44

xcodebuildコマンドラインからiPhoneアプリをコンパイルするために使用しています。プロビジョニングプロファイルを設定するための何らかのオプションを渡す方法はありますか?一般的に、xcodebuildに関する情報はあまりないようです。

4

6 に答える 6

87

実際には、XCodeコマンドライン設定に追加するだけでよいはずです。

xcodebuild[他のオプションは何でも]PROVISIONING_PROFILE="[ここにあなたのプロファイルの一意のID]"

コマンドラインからのビルド設定はすべてをオーバーライドすることになっているので、これはプロジェクトまたはターゲットで定義されたものすべてに勝つはずです。

于 2009-07-24T23:58:47.927 に答える
35

My solution isn't elegant but it does do the job and let me automate everything on the build server:

#!/bin/bash

TARGET="Your App"
CONFIGURATION="Release"
SDK="iphoneos"
PROFILE_PATH="/Users/jkp/Desktop/foo.mobileprovision"
IDENTITY="iPhone Distribution: Your Company Ltd"
KEYCHAIN="/Users/jkp/Desktop/keychain"
PASSWORD="foobar"

open "${PROFILE_PATH}"
sleep 5
osascript -e "tell application \"Xcode\" to quit"
security unlock-keychain -p ${PASSWORD} ${KEYCHAIN}
xcodebuild \
  -target "${TARGET}" \
  -configuration ${CONFIGURATION} \
  -sdk iphoneos \
  CODE_SIGN_IDENTITY="${IDENTITY}" \    
  OTHER_CODE_SIGN_FLAGS="--keychain ${KEYCHAIN}"

The key thing here is that I didn't need to install the provisioning profile first. I actually have another script that uses mechanize to download the latest copy of the provisioning profile before each build which means we can update the profile (adding new devices for example) remotely and have those changes picked up by our CI server without any extra work.

Note: I've since found a way to install or update a provisioning profile without needing to involve Xcode at all - much cleaner! See here for full details.

于 2011-03-31T09:52:09.310 に答える
22

プロビジョニングプロファイルはUUIDによって提供される必要があります。私の場合、プロビジョニングプロファイルはソース管理システムにチェックインされるため、開発者/ビルドサーバー/CIシステムによってコードでチェックアウトされます。ソースツリーでは、プロファイルはMyApp.mobileprovisonなどの人間が読める形式の名前を持ち、「ProvisioningProfiles」というディレクトリにあります。xcodeアーカイブを作成するには、xcodebuildがプロファイルを認識する前に、プロファイルの名前を変更して〜/ Library / MobileDevice /ProvisioningProfilesディレクトリにコピーする必要があります。これは、CIビルドスクリプトで使用できるコードスニペットです。

# The keychain needs to be unlocked for signing, which requires the keychain
# password. This is stored in a file in the build account only accessible to
# the build account user
if [ ! -f $HOME/.pass ] ; then
    echo "no keychain password file available"
    exit 1
fi

case `stat -L -f "%p" $HOME/.pass`
in
    *400) ;;
    *)
        echo "keychain password file permissions are not restrictive enough"
        echo "chmod 400 $HOME/.pass"
        exit 1
        ;;
esac

#
# unlock the keychain, automatically lock keychain on script exit
#
security unlock-keychain -p `cat $HOME/.pass` $HOME/Library/Keychains/login.keychain
trap "security lock-keychain $HOME/Library/Keychains/login.keychain" EXIT

#
# Extract the profile UUID from the checked in Provisioning Profile.
#
uuid=`/usr/libexec/plistbuddy -c Print:UUID /dev/stdin <<< \
        \`security cms -D -i ProvisioningProfiles/MyApp.mobileprovision\``

#
# Copy the profile to the location XCode expects to find it and start the build,
# specifying which profile and signing identity to use for the archived app
#
cp -f ProvisioningProfiles/MyApp.mobileprovision \
        "$HOME/Library/MobileDevice/Provisioning Profiles/$uuid.mobileprovision"
xcodebuild -workspace MyApp.xcworkspace -scheme MyScheme \
        -archivePath build/MyApp.xcarchive archive \
        PROVISIONING_PROFILE="$uuid" CODE_SIGN_IDENTITY="iOS Distribution"

これを機能させるには、キーチェーンのロックを解除し、「/ usr / bin /codesign」ツールに署名IDに関連付けられた秘密鍵へのアクセスを許可する必要があります-次の参照が使用されました https://stackoverflow.com/a/21327591/ 2351246およびコードサインのキーチェーンアクセスをロック解除および追加するためのキーチェーンなしの秘密キーACLへのコードサインの追加。

その後、xcodebuildを使用してアーカイブをIPAにエクスポートする場合は、次の問題を考慮する必要があります(xcodebuildが.appからファイルをコピーしない)。プロビジョニングプロファイルを再度提供する必要があります。IPAを作成するためのスクリプトスニペットは

profileName=`/usr/libexec/plistbuddy -c Print:Name /dev/stdin <<< \
        \`security cms -D -i ProvisioningProfiles/MyApp.mobileprovision\``

xcodebuild \
        -exportArchive \
        -exportFormat IPA \
        -archivePath build/MyApp.xcarchive \
        -exportPath $IPADIR/MyApp.ipa \
        -exportProvisioningProfile "$profileName"

このコマンドの実行中は、キーチェーンのロックを解除する必要があります。

アップデート

OSX Mavericks(v10.9.5)およびOSX Yosemiteで、コード署名エラーが発生し始めました。

Codesign check fails : ...../MyApp.app: resource envelope is obsolete

xcodebuild --codesign -vvvvが「リソースエンベロープは廃止されました」と言っている原因については、この投稿を確認してください。

参照されている投稿でAppleサポートによって提案された変更を実装するには、次のコマンドを実行します。

 sudo perl -pi.bak -e 's/--verify"./--verify", "--no-strict",/ if /codesign.*origApp/;' `xcrun -sdk iphoneos -f PackageApplication`
于 2014-09-16T20:29:24.013 に答える
5

これはおそらくOPトピックから少し外れていると思いますが、XcodeビルドをJenkinsで動作させる方法を検索するときに、この質問が最初に出てきます。後世のためにここにいくつかの追加情報を投稿します。そしてポイント。これが役に立ったと思ったら、ポイントを教えてください:)

とにかく、最近、これを数回行った。これを見つけました:

http://code-dojo.blogspot.co.uk/2012/09/fix-ios-code-signing-issue-when-using.html

動作しているようです。次のことを確認してください。

  1. 最初にXcodeビルドを通常のOSXユーザーとしてセットアップします。そこから配布可能なものを構築し、Xcodeを介してプロビジョニングプロファイルの問題を修正します。

  2. 通常のOSXユーザーとして、xcodebuildを使用してコマンドラインビルドを機能させます。

  3. 次に、上記の投稿の指示に従ってレターを作成し、すべてのiOS証明書をログインキーチェーンからシステムにコピー~/Library/MobileDevice/Provisioning Profilesして、Jenkinsユーザーの~jenkins/Library/MobileDevice/Provisioning Profilesフォルダーにコピーします。

上記の手順2のコマンドを使用した次のJenkinsビルドは、問題なく動作するはずです。

于 2014-08-08T23:06:36.067 に答える
4

ドキュメンテーション

ドキュメントからは、プロビジョニングファイルを設定できないようですが、ターゲットを指定することはできます。

[-ターゲットターゲット名]

したがって、プロビジョニングファイルごとにターゲットを作成する場合は、コマンドラインから適切なターゲットを選択できます。

これは基本的にあなたの求めていることを達成するでしょう。

于 2009-05-15T07:59:34.167 に答える
0

ExportOption.plistファイルを作成して、compileBitcode、teamID、証明書、プロビジョニングプロファイルなどのすべてのパラメーターを設定できます。

次に、ターミナルのプロジェクトフォルダに移動し、次のようなコマンドでアーカイブを作成します。

xcodebuild -quiet -workspace <ProjectName>.xcworkspace -scheme <ProjectScheme> -sdk iphoneos -configuration Release -destination generic/platform=iOS clean archive -archivePath <PathForArchive>/<ProjectName>.xcarchive

次に、ExportOption.plistを現在のフォルダー(PathForArchive)に配置し、次のコマンドを実行します。

xcodebuild -quiet -exportArchive -archivePath <ProjectName>.xcarchive -exportOptionsPlist ExportOptions.plist -exportPath <PathForExport>

そして、ExportOptions.plistから設定した.ipaがフォルダーにあります。

ExportOption.plistの例

于 2021-04-12T15:49:00.880 に答える