プロジェクト内の 4 つのターゲット間でアセットを共有する方法についてアドバイスを求めています: A.app、B.app、C.app、D.app
アプローチ 1 - 最良のケース。私はこれを試みましたが失敗しました
- Assets.bundle ターゲットを作成します。
「スクリプトの実行」フェーズで、ファイルを Assets.bundle から *.app ターゲットに次のようにコピーします。
cd "${BUILT_PRODUCTS_DIR}" ls Assets.bundle | sed '/Info.plist/d' | xargs -t -I {} cp -r Assets.bundle/{} "${CONTENTS_FOLDER_PATH}/"
ただし、アプリを実行すると、UI が正しく表示されません。.xib は読み込まれますが、画像は読み込まれません! イメージ ファイルと nib ファイルは、.app フォルダーに正しくコピーされているようです。私の仮説は、コンパイルされた .nib ファイルは Assets.bundle フォルダー内にあると想定しているため、Assets.bundle フォルダーの外にあると機能しない理由を説明しています。
このアプローチで何か不足していますか?
アプローチ 2 - 未テスト
{A,B,C,D}.app ターゲットによって #import される Assets.xcconfig ファイルを作成します。
アプローチ 3 - 未テスト
「バンドル リソースのコピー」を A.app ターゲットから {B,C,D}.app ターゲットにミラーリングします。
ruby スクリプトを使用して、「project.pbxproj」ファイルを更新できます。
アプローチ 4 - 私の現在のアプローチ
{A,B,C,D}.app ターゲットで「バンドル リソースのコピー」を手動で維持します。
編集: この「ターゲット メンバーシップ」アプローチを放棄したいと思います。これは大きなプロジェクトであり、複数の人が貢献しているためです。
アプローチ 5 - 最悪の場合
- Assets.bundle ターゲットを作成します。
- Assets.bundle フォルダーを *.app ターゲットにコピーします。
- すべての [NSBundle mainBundle] コードを変更して、代わりに Assets.bundle を使用するようにします。
このプロジェクトには、1000 を超える画像ファイルと 150 を超える .xib ファイルがあります。ハードコーディングされたパス ルックアップを使用する多くのレガシー コードがあります。再加工には時間がかかります。私は小さなプロジェクトでこの変更を行いました。これは非常にエレガントなソリューションです。ただし、このサイズのリワークには多くの時間がかかります。