Jenkinsをセットアップして、ビルドプロセスを自動化します。特に、私のニーズのために、異なるバンドル識別子を設定できるようにしたいと思います。
Xcode Jenkinsプラグインを使用して、バンドル識別子を設定しています。
問題は、これによりInfo.plistファイルおよびMyTarget> General> Bundle Identifierのバンドル識別子が変更されることです。ただし、[ビルド設定]> [パッケージング]> [製品バンドル識別子]のバンドル識別子は変更されません。
手動で行うと同じことが起こります。 Xcode 7で新しいプロジェクトを作成します。デフォルトでは、3つの値は次のとおりです。
Info.plist
ファイルの値を次のように変更すると:
他の2つの値は次のとおりです。
したがって、ビルド設定で値を確認する方法は変更されていません。 Xcodeを使用している場合、その値を手動で変更しますが、Jenkinsでプロジェクトをビルドしている場合、これはbisの問題です。
誰も同じ問題に遭遇しましたか?どのように取り組みますか?
ありがとう!
同じ問題に直面した。
PRODUCT_BUNDLE_IDENTIFIER
は、project.pbxproj
ファイル内の変数です。これを必要なものに変更すると、Info.plist
とプロジェクト設定の両方に反映されます。
監査の答え は正しい。ベストプラクティスは、plistでバンドルID値を$ PRODUCT_BUNDLE_IDENTIFIERに設定することです。次に、ビルド設定で、異なる構成(デバッグ、リリースなど)を使用して、必要に応じて異なるバンドルIDをセットアップします。
バンドルIDを変更するためにxCodeプラグインはもう必要ありませんが、設定を指定する必要があります。
次のようなシェルコマンドを使用して$ PRODUCT_BUNDLE_IDENTIFIERを置き換える簡単なソリューションについては、 this を参照してください。
sed -i '' 's/com.example.oldbundleid/com.example.newbundleid/g' project.pbxproj
それに応じて、Jenkins/Shellを使用して変数を渡すことができます。
これを行う別の方法は、 mod-pbxproj を使用することです。
python -m mod_pbxproj -b -af PRODUCT_BUNDLE_IDENTIFIER=com.example.newbundleid -rf PRODUCT_BUNDLE_IDENTIFIER=com.example.oldbundleid project.pbxproj All
//編集
古いバンドルIDは次の方法で取得できます-
awk -F '=' '/PRODUCT_BUNDLE_IDENTIFIER/ {print $2; exit}' project.pbxproj
これは文字列変数に格納され、com.example.oldbundleid
の代わりに使用できます
xcode 8.xの場合
[ターゲット]> [your_app_name-情報]>新しいプロパティキーの追加でアプリ名を変更しても、プロジェクト全体でアプリ名のすべての場所が完全に変更されるわけではありません。
これを行うと、プロジェクトはMacのみでスムーズに実行されます(つまり、すべてのプロパティキーとIDがシステムに保存されるため、これらの変更を行ったシステムで)。別のシステムでプロジェクトを使用しようとすると、プロジェクトでポッドを使用している場合にプロジェクトが見つからないという奇妙なエラーが発生します。
したがって、これを克服するために、すべてのビルド設定でいくつかの変更を行うを選択し、[全般]タブと[情報]タブはそのままにしておきます。
ターゲット>ビルド設定の下で、パッケージングまでスクロールします。
製品名を目的の名前に変更し、製品バンドル識別子を新しい名前に変更します。これを行うと、プロジェクトの表示名とバンドルIDが[全般]タブの新しい名前に自動的に変更されます。