回答:
将来、Apple開発者は//WARNING:
ランドマークをリリースするか、別の名前のランドマークに機能を提供する可能性があります。
しかし、今日のXcodeのSwiftでこの機能を呼び出すには、Ben DodsonとJeffrey Sambellsが概説しているように、次のことを実行できます。
ターゲットのビルドフェーズタブに新しい実行スクリプトを追加し(プロジェクト設定>ビルドフェーズ> '+'>新しい実行スクリプトフェーズ)、次のコードを空のボックスに貼り付けます。
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
これにより、マークアップしたコメント// TODO:
や// FIXME:
コメントについて、コンパイル時にXcodeに警告のフラグが立てられます。
または、カスタムタグを使用してTAGSを修正することもできます。TAGS="WARNING:"
上記のコードでは、TODO&FIXMEのデフォルトの動作を維持し、としてマークアップされたコメントに対してコンパイル時の警告を発し// WARNING:
ます。
http://bendodson.com/weblog/2014/10/02/showing-todo-as-warning-in-swift-xcode-project/ http://jeffreysambells.com/2013/01/31/generate-xcode- todoコメントからの警告
編集:18/11/14
@ david-hは彼のコメントで良い点を挙げました。特定のビルド構成でこれらの警告のみを発生させたい場合は、以下を実行できます。
if [ "${CONFIGURATION}" = "Debug" ]; then
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
fi
または、「デバッグ」ではなく「リリース」を使用して、本番ビルドのみをターゲットにすることもできます。
-type f
ますがfind
、検索結果からディレクトリを除外するオプションをコマンドに追加する必要がありました。これはほとんどの人にとって問題ではないはずですが、R.swift
ポッドを使用する誰もがR.swift
ディレクトリなので、私が経験したのと同じエラーに
編集する
Swift 4.2以降、ビルド警告とエラーの両方で言語レベルのサポートを利用できます。
#warning("Warning description")
#error("Throws a build error")
元の回答
素早い、汚い、そしてとてもエレガントなシンプルさ。
// Description of what you need to fix
var FIX_ME__🛠🛠🛠: AnyObject
「FIX_ME__🛠🛠🛠」が使用されなかったという警告をスローします。
必要に応じて、変数名に絵文字を追加することもできます... reallyと🛠をよく使用します。修正が本当に必要な場合は、forも検討します。あなたは置き換えることができますFIX_ME__
:あなたが好きでALGORITHM_NEEDS_REVIEW
、BugID_148
またはJOHNNY_YOU_BROKE_THIS
いくつかの例があります。
迅速、セットアップ不要、簡潔、顔文字でさえ、コードにユーモア/個性を加えることができます。場合によっては、最も単純なソリューションが最適なソリューションになることがあります。
let fixMeMakeMeNonOptional: Int
ますを与える Immutable value fixMeMakeMeNonOptional was never used; consider replacing with _ or removing it
問題ナビゲーターに。他のすべてのソリューションでは、はるかに一般的なエラーメッセージが表示されます。
Xcode 10とSwift 4.2以降では、次のように#warning
再び使用できるようになります。
#warning("TODO: Clean up this code after testing")
これは期待どおりにXcodeで警告として表示されます。
これは#if
チェックと組み合わせても機能します。たとえば、ターゲットプラットフォームがiOSの場合、以下は警告のみを表示します。
#if os(iOS)
#warning("this code is untested in iOS")
#endif
#error
ビルドを失敗させたい場合もあります。
XCode 6を使用するSwiftでは、目的に応じてさまざまな種類のランドマークを使用できます。Appleが言ったことは次のとおりです。
Xcodeは// MARK:、// TODO:および// FIXME:ランドマークをサポートするようになり、コードに注釈を付けてジャンプバーにリストします。
したがって、説明付きの警告を設定するには、次のようなものを使用します。
//TODO: Clean up this code after testing
ショートマークを設定したいだけの場合(何をすべきか覚えていると仮定)、これを使用します。
//FIXME
編集: ただし、これらのランドマークは、XCodeのジャンプバーにのみ表示されます。これは、特に// TODO:および// FIXMEマークからは、期待したものでも期待したものでもない可能性があります。私はそれにレーダーを提出しました:#17776817。うまくいけば、AppleはこれをXCode 6の今後のビルドに追加する予定です。
SOLUTION(EDIT 2):
あなたが自作経由スウィフトリンターをインストールする場合(実行brew install swiftlint
後brew update
)と追加提案ビルドスクリプトを、あなたはすべてのあなたが表示されます、あなたのプロジェクトにTODO
とFIXME
目印がXcodeの内の警告として表示されます。SwiftLintは、必要に応じて構成できる警告/エラーをさらに追加します。私はSwiftLintの使用のみを推奨し、この問題を素晴らしい方法で解決します!
まだAppleチームによってまだ追加されていません。私がやろうと決めたのはおそらく不正行為ですが、少なくともFIXMEメッセージは表示されます。だから私がやっていることはSwiftファイルでFIXME()関数を宣言することです:
@availability(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
func FIXME()
{
}
他の関数から呼び出すと、警告が表示されます。
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
FIXME() // Incomplete method implementation.
return 0
}
Swift 2を使用する場合
@available(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
すべてのタグを強調表示する独自のスクリプトを作成できます。
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/"
別の方法として、警告パネルに何かを表示したい場合は、次のように書くことができます。
if (false){
var x = 2;
}
実際にテキストを表示することはできませんが、特に(ほとんど)警告をエラーのように扱う傾向がある場合は、少なくともより目立つマーカーになります。
私が使用してい.swift
た1つのCocoaPodがその名前に含まれていたため、ディレクトリが返され、カイルのスクリプトがクラッシュしました。コマンドに追加-type f
すると、パターンに一致するディレクトリを返すのfind
では*.swift
なく、一致するファイルのみを調べることで問題が修正されます。
私が使用した最終的なコード:
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -type f -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
ビルド設定を調整したくない場合は、コメントの前にエディターのプレースホルダーを貼り付けると、簡単なホームレメディになります。
<#todo#>// stop and fixme!
ビルド時に「ソースファイルのエディタープレースホルダー」エラーが表示されますが、ジョーダンのソリューションとは異なり、入力中に煩わしいライブエラーはありません。
多くの調査とあこがれの後、私はそのような実体は存在しないと確信しています。#pragma markメカニズムの継続的な欠如について言及している最新のXcodeリリースノートにはまだ期待しています。#warningおよび#errorも同様に来る可能性があります。
余談ですが、bugreport.apple.comでAppleにレーダーを提出してこの機能を追加することを強くお勧めします(17702491をだますことができます)。
コメントタグとビルド構成に基づいてXcode Issue Navigatorに警告とエラーを配置できる構成可能なツールを作成しました:https : //github.com/doubleencore/XcodeIssueGenerator
インストールしてください:
brew tap doubleencore/tap
brew install xcodeissuegenerator
次に、スクリプトの実行ビルドフェーズに行を追加します。
# Mark WARNINGs, SERIOUSs, and TODOs as warnings in DEBUG builds excluding the Vendor and Third Party directories.
XcodeIssueGenerator -b DEBUG -w "WARNING, SERIOUS, TODO" -x "Vendor/, Third Party/"
エラーと警告をサポートするXcode 10でパーティーに遅れる可能性がありますが、単に文字列を入力します。
"Need to finish implementing this"
警告が表示されます:String literal is unused
オートコンプリートは引き続き機能し、プロジェクトはまだコンパイルされています。
私の答えはあなたの質問を完全に満足させるものではありませんが、何か簡単なものが必要な場合は、追加の準備なしですべてのプロジェクトで機能するアルカトラズのこのプラグインを使用できます。次のようにしてください:
1) install Alcatraz (Nice package manager for Xcode Plug-ins) by entering this line in terminal:
curl -fsSL https://raw.githubusercontent.com/supermarin/Alcatraz/deploy/Scripts/install.sh | sh
2) Then restart Xcode and on it launch agree to install all bundles not included in Xcode
3) In Xcode select menu item -> Window -> Package manager -> type in search panel XTodo and press install
4) Relaunch Xcode and again agree to install additional bundles
5) From now press Ctrl + T and you will see all Tags in nice window
新しいタグを追加するための設定もあります
このスニペットの利点-ポッドからの警告は表示されません。
if [ "${CONFIGURATION}" = "DEBUG" ]; then
TAGS="TODO:|FIXME:|WARNING:|warning:" find "." \( -name "*.swift" \) -not -path "./Pods/*" -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
fi
インストールする方法:
//WARNING
#pragmaのようになると思いますが//MARK
、現在XCodeベータ版には追加されていません。