5

私は、さまざまな顧客にブランド化されることになっている iOS アプリケーションを開発しています。当面の問題は、アプリケーションの 2 つのバージョン (1 つはオレンジ色のテーマ、もう 1 つは赤色のテーマ) を同時にインストールする必要があることです。これを達成するための最良のアプローチは何ですか?

4

4 に答える 4

9

2 つの異なるバンドル識別子を使用するだけです。これは info.plist: で設定できますCFBundleIdentifier。異なるバージョンの info.plist を使用する異なるターゲットまたはスキームをセットアップしたい場合があります。

于 2013-10-31T15:56:18.117 に答える
4

「アーカイブ」操作用のカスタム「事前アクション」ビルドスクリプトで plist ファイルを後処理することにより、2 つの個別の plist ファイルを維持せずにこれを行うことを好みます。

これにより、誰かが何かを変更したときに両方の plist ファイルを更新するのを忘れるという問題を回避できます。

このメカニズムを使用して、TestFlight にアップロードできるアプリのテスト バージョンを構築し、テスターがライブ バージョンと現在のテスト バージョンの両方を同時にインストールできるようにします。

(注: このスクリプトは「事前アクション」セクションに含まれていますが、XCode が plist ファイルへのすべての変数置換を行った後に発生するため、実際には後処理ステップです)

これを設定するには (これらの手順は XCode 5.0.1 用です)、既存のスキームを複製し、適切な名前を付けます。

[スキームの編集] を選択し、左側のタブで [アーカイブ] 項目を展開します。これにより、「アクション前」、「アーカイブ」、および「アクション後」のサブアイテムが表示されます。「事前アクション」をクリックし、右側のタブで下部の「+」をクリックして、新しい「スクリプト実行アクション」を追加します。

私はビルド スクリプトに Ruby を使用しているので、上部の "Shell" ボックスに "/usr/bin/ruby" と入力しますが、当然、bash などでも同じことができます。

[ビルド設定の提供元...] ドロップダウンでプロジェクトを選択します。

次に、下のボックスに次のコードの変形を貼り付けることができます (または、ファイルに入れて、ファイルをボックスにドラッグします)。

def changeBundle(file)
    oldId = `/usr/libexec/Plistbuddy -c "print :CFBundleIdentifier" #{file}`.strip
    system("/usr/libexec/PlistBuddy -c \"Set :CFBundleIdentifier #{oldId}_test\" #{file}")

    oldName = `/usr/libexec/Plistbuddy -c "print :CFBundleDisplayName" #{file}`.strip
    system("/usr/libexec/PlistBuddy -c \"Set :CFBundleDisplayName #{oldName}-Test\" #{file}")
end

changeBundle("#{ENV['CODESIGNING_FOLDER_PATH']}/Info.plist")

これにより、CFBundleIdentifier ('_test' を追加) と CFBundleDisplayName ('-Test' を追加) が更新され、アプリが視覚的に異なるようになります。カスタマイズして、必要な変更を加えます。

ファイルを変更するコードが関数内にある理由は、必要に応じて複数の plist ファイルに同じ変更を簡単に加えられるようにするためです。

この場合、それを行う必要はありません (おそらく、出力アーカイブ ファイルに入れるものを変更したいだけなので) が、私の他のビルド スクリプトのいくつかはバージョン番号を自動的に更新し、それらの変更を git にチェックインしたいと考えています。 . そのようなことを行う必要がある場合は、ソース plist ファイルを変更して、これを下部に追加することもできます。

changeBundle("#{ENV['PROJECT_DIR']}/#{ENV['INFOPLIST_FILE']}")
于 2014-03-05T13:06:13.593 に答える
0

同じプロジェクトに 2 つの異なるターゲットを設定する。次に、各ターゲットで、アプリのバージョンを区別するためにコードで使用するプリプロセッサ マクロを定義します。たとえば、次のことができます。

if (FREE_VERSION == true) {
    ...
}
else {
    ...
}
于 2013-10-31T15:56:26.180 に答える