web-dev-qa-db-ja.com

メインプロジェクトxcode4.1にバンドルを含める方法

[2015年3月4日更新]

質問は4歳になり、件名で指定したXCodeの特定のバージョンに適用されます。


私はこの議論をたくさん検索しましたが、解決策を見つけることができませんでした。stackoverflowに投稿することもできましたが、アクセスがほとんどないため、すぐに質問を削除しました。今、私は再試行しています。

2つの異なるプロジェクトAとBを持つワークスペースがあります。

Bには2つのターゲットがあります。1つは静的ライブラリBlib.aを構築し、もう1つはバンドルB.bundleを構築します。それらはすべて、派生ディレクトリに組み込まれます。

プロジェクトAでは、ビルドフェーズから静的ライブラリを簡単に追加できます。ただし、バンドルを含める方法が見つかりません。 B.bundleは、Aの[リソースのコピー]タブからは表示されません。したがって、手動で追加する必要があります。スクリプトの使用も考えましたが、これを最後の選択肢として使いたいと思います。

誰かがこれに対する解決策を持っていますか?私は何か見落としてますか ?

ありがとう

31
Leonardo

長い調査の結果、これを行う簡単な方法はないことがわかりました。 B.bundleがAプロジェクトに表示されることはなく、それを変更するための設定がワークスペースにありません。この時点で、3つの解決策があります。

  • 「リソースのコピー->その他」から手動でバンドルを含める、これから始めましたが、変更があるたびに、バンドルを削除して再度含める必要があります
  • ビルドフェーズで実行するスクリプトを作成します。すべてがPRODUCTSディレクトリに組み込まれている場合は、バンドルを簡単に見つけることができ、app.bundleに自動的にコピーされます。これは悪い解決策ではありません。 svnを使用している場合、スクリプトはプロジェクトに含まれ、ユーザーは追加の作業なしで無料でスクリプトを使用できます。
  • Appleテクニカルサポート、フォルダ参照を使用します。バンドルBをフォルダにビルドし、[追加されたフォルダのフォルダ参照を作成する]オプションを使用してそのようなフォルダをプロジェクトAに追加します。Xcode4が更新されます。バンドルをビルドするたびにそのフォルダーにバンドルします。プロジェクトAに含めると、追加したフォルダーは青色で表示されます。

BUILT_PRODUCTS_DIRなどの標準のxcode参照変数を使用する場合、このソリューションはパスに依存せず、シェルスクリプトは単なるcp -r-fであるため、私は個人的にスクリプトを使用します。

[2015年3月4日更新]

質問は4歳になりました。当時、利用できる「公式」オプションは多くありませんでした。私はApple Tech Supportと話しましたが、これは唯一の利用可能なソリューションとしてソリューション3を提案しました。もちろん、状況が変わった可能性が非常に高く、はるかに優れたソリューションがあります。 、上記の3つは「ハック」ではなく「ソリューション」であり、技術的には時代遅れかもしれませんが、今日でも使用できます。「ハック」を「ハック」として意図しています。つまり、おそらく将来のソフトウェアリリースでは機能しないでしょう。

19
Leonardo

これが私がそれをした方法です。

  1. B.bundleをプロジェクトB→製品→B.bundleからプロジェクトAのアプリのCopy Bundle Resourcesビルドフェーズにドラッグアンドドロップします(要求されたらグループオプションを作成します)。これにより、プロジェクトAのアウトラインのルートにB.bundleが追加されます。必要に応じて、Blib.aの近くのFrameworksディレクトリに移動できます。

  2. B.bundleを選択し、Identity and Type右側のパネルでLocationを確認します( tilities area =)。デフォルトでは、XcodeはRelative to Projectを選択します。これは間違っています。代わりにRelative to Build Productsを選択してください。

  3. 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; };
    
  4. project.pbxprojファイルを保存します。 Xcodeはプロジェクトを自動的にリロードし、アプリは正常にビルドされます。

8
0xced

長い間検索して何度も失敗した後、静的ライブラリを作成し、メインプロジェクトにバンドルを含めたり、ライブラリを使用する可能性のあるサードパーティの開発者に配布したりするための非常に優れたチュートリアルであるこのリソースを見つけました。

絶対にお勧め:

https://github.com/jverkoey/iOS-Framework

4
agarcian

Xcode 5.1.1の時点で、B.bundleをプロジェクトナビゲータからプロジェクトAビルドフェーズの[バンドルリソースのコピー]リストにドラッグアンドドロップすることができました。 B.bundleターゲットの作成は問題ではないと思います。

1

プロジェクトAでは、プロジェクトBの製品は、スキームのビルドアクションの依存関係ですか?この依存関係を表示して別のターゲットにコピーできるようにするには、この依存関係を設定する必要があると思います(自動依存関係検出オプションを無効にするのが最適な場合もあります)。これは、ビルドされるまで(イメージリソースファイルのように)実際には存在せず、Xcodeが別のターゲットから操作する前にビルドされていることを確認する必要があるためだと思います。

1
Joshua Nozzi
  1. ビルドをGeneric iOS Deviceに切り替えます。このステップは、非シミュレーター参照を作成するために必要です。
  2. .bundleを他のプロジェクトのCopy Bundle Resourcesにドラッグします。
  3. 他のプロジェクトの.bundleProject navigatorを選択し、そのLocationRelative to Build Productsに変更します。

静的ライブラリの.bundleTarget Dependenciesが追加されていることを確認してください

0
vadimtrifonov