2012-01-01 5 views
2

問題:私が使用するライブラリは、ARC(Automatic Reference Counting)をサポートしません。 (ARCに慣れていない人のために)カスタムxcodeテンプレートは、部分的かつ選択的にARC(Automatic Reference Counting)を有効にできますか?

背景:http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html

マニュアルソリューション:ライブラリの各実装ファイルの-fno-にObjCアークオプションを追加し、そうでない場合は、通常、自分のアプリケーションコードでARCを使用しています。

観察:以下のテンプレートファイルをコピーすることができ、最も可能性が高い(上記のコンパイラフラグを追加することなく - に-間、私は必要なソリューション)完全にONかOFF ARCを回すのいずれかに使用すること:

」 /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOSリファレンスCounting.xctemplate "

質問再入力:手動ソリューションを避ける方法はありますか? (100回以上の-fno-objc-arcオプションのコピーアンドペーストは不便です。私はAppleがプログラム的なソリューションを公開したいと思っています.Xcode UIが変更される可能性が高いため、Automator.appを使用してコピー/ 。)

例Xcode4テンプレートジェネレータ:https://github.com/MrGando/Xcode-4-Template-Generator/blob/master/template_generator.py

注template_generator.pyは、実験的な共有ビルド設定があります。私は選択的に(部分的に共有された)設定を共有したいさらに、main()のNSAutoreleasePoolを@autoreleaseブロックに変更するか、マクロ置換を行うか、2番目のmain.mファイルを提供することが望ましいでしょう。

+0

はい、私は自分のプロジェクトのためにその解決策に移りました。ただし、テンプレートウィザードでは、「レガシー」のARC以外のコードやテンプレートコード自体の既存の定型文を気にせずに、ARCを有効にするかどうかをプログラマが選択できるようにすると便利です。 – mda

+0

あなたはすべていいコメントをしました。実際には、GCCは-fno-objc-arcオプション(Apple-LLVM/clangコンパイラのみ)をサポートしていないため、ARCの移行はおそらく手動プロセスであり、テンプレートには時間がかかることがあります追いつくために。私は複数のプロジェクトでARCに正常に移行しました。それほど難しくありません。私のXcodeリファクタリングツールウィッシュリストにあります。誰かが網羅的なハウツーを追加しない限り、上位のモデレーターがこの質問を閉じるかもしれません。 – mda

答えて

1

[コンパイル元]リストで複数のファイルを選択し、Enter> Paste> Enterを押して、すべてのファイルに一度に-fno-objc-arcタグを適用できます。

+0

真っ先ですが、既存のフラグがあれば上書きされます。彼らはすべて同じであれば、これは素晴らしい作品です。 – mda

3

いいえ、難しいことです...これらのMRCソース用のスタティックライブラリターゲットを作成するだけです(まだ存在しない場合はサードパーティのライブラリです)。適切なビルドを設定してくださいターゲットあたりの設定。ライブラリを最終的な実行可能ファイルにリンクします。

+0

2つの質問: A)ライブラリが変更されるたびに静的ターゲットを再フォーマットする必要はありませんか? B)そのターゲット内の各ファイルに対して-fno-objc-arcを追加する必要がありますか、またはそのオプションをすべてに適用できますか?参照されるARCリリースノートへの移行では、この設定については言及していません。それぞれのファイルに対して個別にオプションを指定しなければならないということだけが述べられています。 – mda

+0

ハウツー/チュートリアルの例(またはそのリンク)があり、ARCをオンまたはオフにするプロセスを本当に簡単にすることができれば、(または最初の回答者:-) ANSWERED承認の象徴(!) – mda

+0

@mda)リンク先のライブラリとしてターゲットを設定するだけで、それを使用するすべてのクライアント/アプリケーションがリンクします。彼らは同じターゲットを参照します。 (誰かがコンパイルするためにすべてのソースを追加する必要があります)。あなたの利便性のために、あなたが使っているライブラリがこの静的ライブラリ/プロジェクトを既に提供しているかもしれません。 b)いいえ。 MRCを使用するこのライブラリのターゲットレベルでフラグを設定するだけです。支配的なレベルでオーバーライドされたビルド設定がないか、または競合するフラグをコンパイラに渡した場合を除いて、ソースは設定を継承します。 – justin

関連する問題