web-dev-qa-db-ja.com

カスタム.plistファイルでユーザー定義のビルド設定を使用する

アプリにさまざまなビルド構成(Debug、Stage、Prod)を定義し、User-Definedビルド設定を使用します。

enter image description here

facebookのログインやその他のものを_Info.plist_ファイルに設定するには:

enter image description here

このシナリオでは、$(USER_DEFINED_SETTINGS)表記は機能します

Googleサインインを設定しようとしたとき、追加の_.plist_ファイル(_GoogleService-Info.plist_)を使用する必要があり、ユーザー定義の設定は、_Info.plist_ファイルと同じように機能しません。

カスタム_.plist_ファイルでユーザー定義設定を使用するにはどうすればよいですか?できない場合、どうすればこれを回避できますか?

21
KlimczakM

[〜#〜] not [〜#〜]使用可能ser-Defined設定custom。plistファイル。

[〜#〜] but [〜#〜]アプリをビルドするときに、カスタム.plistファイルを適切な場所にコピーできます。

  1. 新しいフォルダを作成します(例:src/Resources/GoogleServiceInfoPlists)。
  2. 各環境のすべての.plistファイルをそこにコピーします。例えば:
    • GoogleService-Info-Debug.plist
    • GoogleService-Info-Stage.plist
    • GoogleService-Info-Prod.plist
  3. 新しいRun Script Phaseを追加します(Xcode:Target-> Build Phases-> "+" button[左上隅])。
  4. 以下のスクリプトを使用して、特定の環境の.plistファイルをメインディレクトリにコピー(置換)します(私の場合はsrcですが、通常はプロジェクト名です)。

    cp "${SRCROOT}/src/Resources/GoogleServiceInfoPlists/GoogleService-Info-$CONFIGURATION.plist" "${SRCROOT}/src/GoogleService-Info.plist"
    

結果の例(ステージ環境の場合):

ファイルsrc/Resources/GoogleServiceInfoPlists/GoogleService-Info-Stage.plistはビルド中にsrc/GoogleService-Info.plistにコピーされます。

使用される変数/パス:

${SRCROOT}-事前定義されており、プロジェクトの場所を指します。

$CONFIGURATION-事前定義されています。これはビルド構成です。デフォルトでは、DebugReleaseです。私の場合:DebugStageProd。これはXcodeで変更できます:Project(ターゲットではありません!)->Info

重要:

  1. src/GoogleService-Info.plistファイル必須 Xcodeプロジェクトに追加(ビルドフェーズ->バンドルリソースのコピーs)while /src/Resources/GoogleServiceInfoPlists/GoogleService-Info-*ファイルはそうする必要はありません。

  2. 新しい実行スクリプトを配置する必要がありますバンドルリソースのコピーの前ビルドフェーズ。そうしないと、コピーが遅すぎて、デフォルトバージョンの.plistファイルが使用されます。

38
KlimczakM
  1. 新しいフォルダを作成します(例:GoogleServiceInfoPlists)。

  2. 各構成のすべての.plistファイルをそこにコピーします

例えば:

GoogleService-Info-Debug.plist, 
GoogleService-Info-Alpha.plist,
GoogleService-Info-Beta.plist,
GoogleService-Info-Release.plist
  1. 最後に新しいRun Script Phaseを追加します(Xcode:ターゲット->ビルドフェーズ->「+」ボタン)。

  2. 以下のスクリプトを使用して、特定の環境の.plistファイルをビルドディレクトリにコピーします。

脚本:

RESOURCE_PATH=${SRCROOT}/${PRODUCT_NAME}/GoogleServiceInfoPlists/GoogleService-Info-$CONFIGURATION.plist

BUILD_APP_DIR=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app

echo "Copying ${RESOURCE_PATH} to ${BUILD_APP_DIR}"
cp "${RESOURCE_PATH}" "${BUILD_APP_DIR}/GoogleService-Info.plist"

PS:プロジェクトにファイルを追加する必要はありません。メインディレクトリに新しいフォルダを作成するだけです。

enter image description here

2
user2541964

(同じ)名前GoogleService-Info.plistの2つのファイルをプロジェクトに配置しました。

enter image description here

1つはルートにあり、もう1つは「ステージング」と呼ばれるフォルダーにあり、ファイルシステムでの名前の競合を回避します。

Include the plist in only one project each

1つのターゲットに1つ、別のターゲットにもう1つを含めると、各ターゲットに正しい名前の一意のplistファイルが含まれるようになります。

1
mevdev