
この投稿は、 Hector MatosによるXcodeでTODO、FIXME、およびエラーを強調する方法の無料翻訳です
とても平凡な日でした。コードを書き、バグを修正し、一般的にはすべてが完璧でした。 その後、コードブロックを記述したので、後で戻る必要がありました。 これは、おそらく遭遇する一般的なケースです。まだ準備が整っていないAPIを操作する必要がありました。 APIを使用して取得するオブジェクトの一般的な構造は知っていましたが、その操作方法をテストすることはできませんでした。 他の開発者と同様に、私は次のようなコメントを書きました。

この時点で、コンパイラディレクティブを使用してObjective-Cで行ったのと同じように、Xcodeで警告を作成したいと思います。

しかし、悲しいかな、それはうまくいかず、私は悲しかったです。
行動の男として、私は次のことをしました:私は行動しました。 実行スクリプトを追加して必要な機能を取得できることがわかりました。
スクリプトビルドフェーズの実行
Xcodeは、開発サイクルのさまざまな段階で内部bashコマンドまたはスクリプトをサポートします。 bashスクリプトは、ビルド、実行、テスト、プロファイリング、分析、さらにはアーカイブの前または後にいつでも実行できます!
これを行うには、Xcodeでプロジェクトの「ビルドフェーズ」に進み、左上の「+」をクリックして、ドロップダウンメニューから「新規実行スクリプトフェーズ」を選択します。

次に、bashスクリプトを作成できる新しいセクションが表示されます。 迅速な投稿でスクリプティングを読んだ後、すでにSwiftスクリプトの作成のエキスパートである場合は、スクリプトファイルをプロジェクトのルートディレクトリに配置して、新しい実行スクリプトから呼び出すことができます。

#ネイティブのXcode警告でTODO、FIXME、およびERRORをマークする
実行スクリプトの本文にこの素晴らしいコードを入れてください:
TAGS="TODO:|FIXME:" find "${SRCROOT}" \( -name "*.h" -or -name "*.m" -or -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
これからは、コメントにTODO:またはFIXME:というラベルを付けると警告が表示されます! この魔法の仕組みをご覧ください。

コメントで// ERROR:を使用してエラーを強調表示するような方法でスクリプトを修正することはありません。 ご存じのように、エラーを// ERROR:で強調表示することに特に注意を払いたい状況があります。 これを行うには、bashスクリプトを次のように変更します。
TAGS="TODO:|FIXME:" ERRORTAG="ERROR:" find "${SRCROOT}" \( -name "*.h" -or -name "*.m" -or -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$|($ERRORTAG).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/" | perl -p -e "s/($ERRORTAG)/ error: \$1/"
あなたのことは知りませんが、私はおそらく世界で最も忘れっぽい人です。 結局のところ、私の現在のコードフラグメントは常に終了しているわけではなく、明日何をすべきかを思い出させるために// ERROR:を使用したいと思っています。

私のIDEがこのように見えるとき、私はすぐにすでに開始されたものを終了する必要があると感じます。 心配しないでください。このスクリプトによって生成されるエラーは、プロジェクトのアセンブリを妨げません。
結論
毎日の作業では、後で戻る必要があるコードのブロックに常に遭遇しますが、今では「パッチ」を置いて先に進む必要があります。 残念ながら、コメント内の// TODO :、 // FIXME :、または// ERROR:でさえ十分ではありません。 プロジェクトで// TODO :、 // FIXME : 、および// ERROR:を忘れる人がどれだけいるかに驚くでしょう。 このような状況で実行スクリプトを使用することは、開発サイクルで何かを見逃さないようにする優れた方法です。 これが役立つことを願っています!
幸せなコーディング、仲間のオタク!
追伸 コードにマーク// //エラー:がある場合にプロジェクトアセンブリに干渉する必要がある場合に備えて、スクリプトの別の変更が元の投稿へのコメントから抽出されました。
TAGS="TODO:|FIXME:" ERRORTAG="ERROR:" OUTPUT=$(find "${SRCROOT}" \( -name "*.h" -or -name "*.m" -or -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$|($ERRORTAG).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/" | perl -p -e "s/($ERRORTAG)/ error: \$1/") ECHO "$OUTPUT" if [[ $OUTPUT == *" error: "* ]] then exit 1 fi