[2015年3月4日更新]
質問は4歳になり、件名で指定したXCodeの特定のバージョンに適用されます。
私はこの議論をたくさん検索しましたが、解決策を見つけることができませんでした。stackoverflowに投稿することもできましたが、アクセスがほとんどないため、すぐに質問を削除しました。今、私は再試行しています。
2つの異なるプロジェクトAとBを持つワークスペースがあります。
Bには2つのターゲットがあります。1つは静的ライブラリBlib.aを構築し、もう1つはバンドルB.bundleを構築します。それらはすべて、派生ディレクトリに組み込まれます。
プロジェクトAでは、ビルドフェーズから静的ライブラリを簡単に追加できます。ただし、バンドルを含める方法が見つかりません。 B.bundleは、Aの[リソースのコピー]タブからは表示されません。したがって、手動で追加する必要があります。スクリプトの使用も考えましたが、これを最後の選択肢として使いたいと思います。
誰かがこれに対する解決策を持っていますか?私は何か見落としてますか ?
ありがとう
長い調査の結果、これを行う簡単な方法はないことがわかりました。 B.bundleがAプロジェクトに表示されることはなく、それを変更するための設定がワークスペースにありません。この時点で、3つの解決策があります。
BUILT_PRODUCTS_DIRなどの標準のxcode参照変数を使用する場合、このソリューションはパスに依存せず、シェルスクリプトは単なるcp -r-fであるため、私は個人的にスクリプトを使用します。
[2015年3月4日更新]
質問は4歳になりました。当時、利用できる「公式」オプションは多くありませんでした。私はApple Tech Supportと話しましたが、これは唯一の利用可能なソリューションとしてソリューション3を提案しました。もちろん、状況が変わった可能性が非常に高く、はるかに優れたソリューションがあります。 、上記の3つは「ハック」ではなく「ソリューション」であり、技術的には時代遅れかもしれませんが、今日でも使用できます。「ハック」を「ハック」として意図しています。つまり、おそらく将来のソフトウェアリリースでは機能しないでしょう。
これが私がそれをした方法です。
B.bundle
をプロジェクトB→製品→B.bundleからプロジェクトAのアプリのCopy Bundle Resourcesビルドフェーズにドラッグアンドドロップします(要求されたらグループオプションを作成します)。これにより、プロジェクトAのアウトラインのルートにB.bundle
が追加されます。必要に応じて、Blib.a
の近くのFrameworksディレクトリに移動できます。
B.bundle
を選択し、Identity and Type右側のパネルでLocationを確認します( tilities area =)。デフォルトでは、XcodeはRelative to Projectを選択します。これは間違っています。代わりにRelative to Build Productsを選択してください。
B.bundle
へのパスは../../../../../../../../Projects/MyApp/B.bundle
のようになります。これはあなたが望むものではありませんが、簡単に修正できます。テキストエディタでProjectA.xcodeproj/project.pbxproj
を開き、このパスを検索して、B.bundle
を除くすべてを削除します。 project.pbxproj
は次のようになります。
explicitFileType = wrapper.cfbundle; name = B.bundle; path = "B.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
project.pbxproj
ファイルを保存します。 Xcodeはプロジェクトを自動的にリロードし、アプリは正常にビルドされます。
長い間検索して何度も失敗した後、静的ライブラリを作成し、メインプロジェクトにバンドルを含めたり、ライブラリを使用する可能性のあるサードパーティの開発者に配布したりするための非常に優れたチュートリアルであるこのリソースを見つけました。
絶対にお勧め:
Xcode 5.1.1の時点で、B.bundleをプロジェクトナビゲータからプロジェクトAビルドフェーズの[バンドルリソースのコピー]リストにドラッグアンドドロップすることができました。 B.bundleターゲットの作成は問題ではないと思います。
プロジェクトAでは、プロジェクトBの製品は、スキームのビルドアクションの依存関係ですか?この依存関係を表示して別のターゲットにコピーできるようにするには、この依存関係を設定する必要があると思います(自動依存関係検出オプションを無効にするのが最適な場合もあります)。これは、ビルドされるまで(イメージリソースファイルのように)実際には存在せず、Xcodeが別のターゲットから操作する前にビルドされていることを確認する必要があるためだと思います。
Generic iOS Device
に切り替えます。このステップは、非シミュレーター参照を作成するために必要です。.bundle
を他のプロジェクトのCopy Bundle Resources
にドラッグします。.bundle
でProject navigator
を選択し、そのLocation
をRelative to Build Products
に変更します。静的ライブラリの
.bundle
にTarget Dependencies
が追加されていることを確認してください