7

1 つのアプリを生成する比較的大規模な Xcode プロジェクトがあります。ただし、このアプリの詳細なカスタマイズとブランディングを必要とする多くのクライアント/顧客がいます。これらの構成には、さまざまなグラフィックス、いくつかの異なるインターフェイスと実装、そしておそらく最も重要な .xcconfig ファイルが含まれます。

私の Xcode プロジェクトには、ディスク上の特定のクライアントのカスタマイズ フォルダーを指す専用のグループがあるため、Xcode プロジェクトを開いてビルドすると、現在のクライアントのカスタマイズを含む単一のアプリのビルドが取得されます。別のクライアントに切り替えるには、そのグループが指すディスク上の場所を変更します。(また、プロジェクトの情報ペインで xcconfig の「ベース」設定を変更して元に戻し、xcconfig の完全な継承をリロードします。1 つまたは複数の xcconfig ファイルを含むグループを変更するだけでは、これはリロードされません!) + クライアント。別のクライアント用にアプリをビルドし、xcconfig が正しいことを確認する必要があるたびに、このフォルダーを切り替えるのは少し面倒ですが、うまくいきます。

現在、コマンドラインを介してビルドを自動化している最中で、問題が発生しています。前述の Xcode グループを別のカスタマイズ フォルダーにポイントする手っ取り早い解決策は、ProjectName.xcodeproj/project.pbxprojファイルをコピーして、ProjectName.xcodeproj/project-template.pbxprojこのファイル内にプレースホルダーを配置することでした。これを grep して、目的のカスタマイズ フォルダーの名前とパスに置き換えることができます。次に、修正した project-template.pbxproj で project.pbxproj を一時的に上書きし、ビルドして正しいアプリを取得します。

お気づきかもしれませんが、project.pbxproj は複製および変更されているため、開発者がオリジナルを変更し、テンプレートも更新するのを忘れると、同期が取れなくなります。それに、とにかく、この方法で pbxproj ファイルをいじるべきではありません。これは Xcode のプライベートなものです。

では、プロジェクト グループ レベルではなく、おそらくスクリプトまたは環境変数を使用して、ビルド フェーズ中にリソース、コード、および構成ファイルでいっぱいのフォルダーについて Xcode に伝えるより良い方法はありますか? 最も複雑なのは xcconfig チェーンのようです。各クライアントには、単一のアプリのデバッグ、開発、および配布の xcconfig ファイルから継承する独自の xcconfig ファイルがあるためです。

この質問が長くて申し訳ありませんが、少し複雑です! どんな提案でも大歓迎です!

4

1 に答える 1

2

Xcode のターゲット機能を使用したほうがよいと思います。1 つのプロジェクトと、そのプロジェクト内のすべてのクライアントのリソースを用意します。

次に、既に持っているターゲットを複製できます (ターゲットを右クリックし、Xcode の Project Navigator でプロジェクト ファイルを選択します)。

すべてのターゲットが同じコードでコンパイルされます。Build Phases > Copy Bundle Resources でリソースを変更するだけで、ターゲットごとに異なるアプリが作成されます。Xcode の内部ファイルを見る必要はありません。

FIRST_CLIENT=1ビルド オプション ( など)にプリプロセッサ マクロを追加して、ソース ファイルのコードを変更し、#if FIRST_CLIENT.

私はこのようなプロジェクトをセットアップしており、かなりうまく機能しています:

ここに画像の説明を入力

于 2011-10-18T18:04:34.280 に答える