Xcode3に付属のxcodebuild
ユーティリティを使用して、Hudsonでのビルドを自動化しています。コマンドは次のようになります。
xcodebuild -project Project.xcodeproj -target Target -configuration Release -sdk iphoneos CODE_SIGN_IDENTITY[sdk=iphoneos*]="iPhone Distribution:XXXXXX"
Xcode 4で同じコマンドを使用しようとしていますが、xcodebuild
はCODE_SIGN_IDENTITY
パラメーターを無視し、Xcodeのターゲット用に選択されたプロビジョニングプロファイルで署名しているようです。
3〜4種類のプロファイルでビルドに署名する必要があるため、これは私にとって非常に重要です。 Xcode 3では問題なく動作しますが、Xcode4では動作しません。
この問題を解決する方法はありますか?
新しいxcodebuildで、設定を指定できるようになりました。 developer.Apple.com から取得:
xcodebuild [-project projectname] [-target targetname ...]
[-configuration configurationname] [-sdk [sdkfullpath | sdkname]]
[buildaction ...] [setting=value ...] [-userdefault=value ...]
利用可能な設定 を説明するためのこのリソースも見つけました
CODE_SIGN_IDENTITY (Code Signing Identity)
Description: Identifier. Specifies the name of a code signing identity.
Example value: iPhone Developer
ただし、PROVISIONING_PROFILEが使用可能なコマンドのインデックスにありません。
最終的に使用したコマンドは、「CODE_SIGN_IDENTITY」と「PROVISIONING_PROFILE」の設定を指定しました。
xcodebuild -sdk <iphoneos> -target <target_name> -configuration <Debug> CODE_SIGN_IDENTITY="iPhone Developer: Mister Smith" PROVISIONING_PROFILE="XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX"
私は次の問題を抱えていました:
開発者は「iPhoneDevelopment」署名IDを使用しましたが、自動統合システムには「iPhoneDistribution」署名IDを使用する必要がありました。
だから私は次の行を追加しました:
codesign -f --sign "iPhone Distribution: XXXXXXX" ${PATH_TO_APP}
xcodebuild
コマンドとxcrun
コマンドの間で、コード署名IDを交換します(-f
国旗)。
Xcode4でCODE_SIGN_IDENTITY = "iPhone Distribution:XXXXXX"を使用するだけです([sdk = iphoneos *]なし)
xcodebuild -project Project.xcodeproj -target Target -configuration Release -sdk iphoneos CODE_SIGN_IDENTITY="iPhone Distribution:XXXXXX"
Xcode 4で私が知る限り、署名はxcrun
ツールを使用して行われます。
/usr/bin/xcrun -sdk "iphoneos" PackageApplication -v "myapp.app" -o "myapp.ipa" --sign "iPhone Developer: XXXXX" --embed "XXXXX.mobileprovisioning"
IDとmobileprovisioningファイルの両方を指定する必要があるため、使用するのは少し不快です。プロビジョニングポータルからプロビジョニングプロファイルが自動的に更新されるたびに名前が変更されるため、~/Library/MobileDevice/Provisioning Profiles/
ディレクトリの最後のディレクトリを使用する場合は特に不快です。
Jenkinsを使用してビルドするための優れた回避策を見つけました。
まず、ジョブを設定する前に、次のようなjenkinsプラグインをダウンロードします。
パラメータ化されたトリガープラグイン
https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin
それを行ったら、ジョブを作成し、ジョブの作成中に、
「このビルドはパラメータ化されています」チェックボックス
文字列パラメータを作成します。私はCODE_SIGN_IDENTITYと呼んでいます。
したがって、文字列パラメータの名前フィールドは次のようになります。
名前:CODE_SIGN_IDENTITY
デフォルト値:iPhone開発者:XXX XXXXX
説明:そこに置きたいものは何でも
次に、Xcodeプラグインで、「カスタムxcodebuild引数」フィールドを見つけます。
[カスタムxcodebuild引数]フィールドに、次の値を入力します。
CODE_SIGN_IDENTITY = $ {CODE_SIGN_IDENTITY}
ジョブの設定が完了すると、すべて設定されます。
これにより、空白の問題が回避されます。プラグインは素晴らしく機能し、他のパラメーターを使用してビルドをカスタマイズできるため、命の恩人です。