1

プロジェクト内の 4 つのターゲット間でアセットを共有する方法についてアドバイスを求めています: A.app、B.app、C.app、D.app


アプローチ 1 - 最良のケース。私はこれを試みましたが失敗しました

  1. Assets.bundle ターゲットを作成します。
  2. 「スクリプトの実行」フェーズで、ファイルを 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 - 最悪の場合

  1. Assets.bundle ターゲットを作成します。
  2. Assets.bundle フォルダーを *.app ターゲットにコピーします。
  3. すべての [NSBundle mainBundle] コードを変更して、代わりに Assets.bundle を使用するようにします。

このプロジェクトには、1000 を超える画像ファイルと 150 を超える .xib ファイルがあります。ハードコーディングされたパス ルックアップを使用する多くのレガシー コードがあります。再加工には時間がかかります。私は小さなプロジェクトでこの変更を行いました。これは非常にエレガントなソリューションです。ただし、このサイズのリワークには多くの時間がかかります。

4

2 に答える 2

4

XCode の統合処理を使用しないのはなぜですか? アセットを選択し、右側のユーティリティ パネルの [ターゲット メンバーシップ] セクションで、アセットを含めるターゲットを選択します。私はこれを使用して、無料版と有料版の間で xib、グラフィックスなどを切り替えます。少なくともこれには最適です。

忘れていたのは、同じ名前のファイルのバリエーションを含める場合は、それらをフォルダーまたはバンドルに入れて簡単に分離できるようにすることです。次に、バンドル/フォルダー名を使用してターゲットに定義を追加して、任意のパスから自動的にロードできるようにします。

于 2012-12-11T10:11:04.797 に答える
2

古い質問であることは知っていますが、同じ問題を抱えていたので、xcodeprojライブラリでこれを行う方法を見つけました。必要に応じて、 https ://github.com/dalu93/DLSharedBundleResources/ でこれを確認できます。

パラメータとして 2 つのターゲット (1 つは「完了」ターゲット、もう 1 つは「完了ターゲット」) を取り、不足しているファイルを追加します。ファイルを開くと、「マージ」から除外するファイル名の配列を挿入できる var.rbも見つかります。blacklist

お役に立てば幸いです

于 2015-07-15T17:20:51.060 に答える