私は、さまざまな顧客にブランド化されることになっている iOS アプリケーションを開発しています。当面の問題は、アプリケーションの 2 つのバージョン (1 つはオレンジ色のテーマ、もう 1 つは赤色のテーマ) を同時にインストールする必要があることです。これを達成するための最良のアプローチは何ですか?
4 に答える
2 つの異なるバンドル識別子を使用するだけです。これは info.plist: で設定できますCFBundleIdentifier
。異なるバージョンの info.plist を使用する異なるターゲットまたはスキームをセットアップしたい場合があります。
「アーカイブ」操作用のカスタム「事前アクション」ビルドスクリプトで 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']}")
同じプロジェクトに 2 つの異なるターゲットを設定する。次に、各ターゲットで、アプリのバージョンを区別するためにコードで使用するプリプロセッサ マクロを定義します。たとえば、次のことができます。
if (FREE_VERSION == true) {
...
}
else {
...
}