web-dev-qa-db-ja.com

Xcode .mobileprovisionファイルをコマンドラインから「インストール」できますか?

Mac Mini Server(OSX 10.7)で実行されるbashスクリプトを使用して、クライアント向けのアプリを構築するプロセスを自動化しようとしています。

私のスクリプトは、元々 https://Gist.github.com/949831 に投稿されたgithubの非常に有用なスクリプトに基づいています。

Xcodebuildを使用してアプリを構築し、xcrunを使用してmobileprovisionファイルに署名して埋め込みます。

Mobileprovisionファイルでこれをすべて実行すると、GUIを使用して手動でXcodeにインストール(ダブルクリックなど)して正常に動作します。 SCPでサーバーにコピーされたmobileprovisionファイルを使用しようとすると失敗します(コード署名エラー:プロビジョニングプロファイル '123abc123'が見つかりません)。

これはおそらく、ファイルが「インストール」されていないためです。

ターミナルからmobileprovisionファイルをインストールする方法はありますか?私はSSHを使用しているため、「open」コマンドなどを使用しても機能しません。

ありがとう!

46
Ben Clayton

この質問をして以来、私は自分で解決策を構築しました。秘密は、ファイルを〜/ Library/MobileDevice/Provisioning Profiles /フォルダーにコピーすることですが、(ここでは注意が必要です)名前を[The UUID] .mobileprovisionに変更します。

UUIDは、ファイル自体のテキスト部分(plist)内に保持されます。残念ながら、ファイルにはバイナリも含まれているため、「デフォルトの読み取り」では読み取ることができません。幸いなことに this guy はUUIDを取得するための小さなコマンドラインユーティリティを構築しました(そして、他のいくつかのものを再び出力します)。

これが私の完全なスクリプトです:

https://Gist.github.com/2568707

26
Ben Clayton

外部依存関係をダウンロードしたくない場合(Benがしたように)、ほとんどの場合、次のように動作します。

uuid=`grep UUID -A1 -a adhoc.mobileprovision | grep -io "[-A-F0-9]\{36\}"`
cp adhoc.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$uuid.mobileprovision

a IDは16進数で構成されている なので、正しい範囲は[-A-F0-9]であり、[-A-Z0-9]ではありません。

ボーナス:プロファイルのダウンロードとインストール

cupertinoツール を使用すると、次のスニペットは開発者ポータルからすべての配布プロファイルをダウンロードしてインストールします。

ios profiles:download:all --type distribution

for file in *.*provision*; do
    uuid=`grep UUID -A1 -a "$file" | grep -io "[-A-F0-9]\{36\}"`
    extension="${file##*.}"
    echo "$file -> $uuid"
    mv -f "$file" ~/Library/MobileDevice/Provisioning\ Profiles/"$uuid.$extension"
done

cupertino(iosコマンド)は、Sudo gem install cupertinoでインストールできます。

70
nschum

他のすべての回答の概要 pdate_provisioning_profile.sh

#!/bin/sh
#
# Download and install a single iOS provisioning profile
# Requires https://github.com/nomad/cupertino
#
# Usage
# - Login to your account once:
# ios login
# - Configure TEAM and PROFILE (instructions below)
# - Run update_provisioning_profile.sh at anytime, usually after adding/removing devices to the profile

# Configure the team identifier
# Copy it from developer portal or just use cupertino to get it:
# ios devices
# Copy the string in parens and set it as TEAM
TEAM="team id"

# Configure the profile name you want to manage
# Copy it from developer portal or use cupertino to get a list (ignoring Xcode managed profiles):
# ios profiles --team ${TEAM} | grep -v 'iOS Team Provisioning Profile'
# Copy the name as-is and set as PROFILE
PROFILE="profile name"

# Fetch the profile using `cupertino` tool
# you need to run `ios login` once to setup the account
ios profiles:download "${PROFILE}" --team ${TEAM}
PROFILE_FILE=`echo $PROFILE | tr ' ' '_'` # `cupertino` tool will replace spaces with _
UUID=`/usr/libexec/PlistBuddy -c 'Print :UUID' /dev/stdin <<< $(security cms -D -i ${PROFILE_FILE}.mobileprovision)`

# copy where Xcode can find it
cp ${PROFILE_FILE}.mobileprovision "$HOME/Library/MobileDevice/Provisioning Profiles/${UUID}.mobileprovision"

# clean
rm ${PROFILE_FILE}.mobileprovision

プロビジョニングのニーズに簡単に適応できます。

6
djromero

Appleは、各キーと値のペアの下の.mobileprovisionプロビジョニングプロファイルファイルに空行を追加し、grepオプションは機能しなくなりました。

pythonスクリプトを使用してPlistBuddyとセキュリティで取得する方法は次のとおりです。

command = "/usr/libexec/PlistBuddy -c 'Print :UUID' /dev/stdin <<< $(security cms -D -i abc.mobileprovision)"
uuid = os.popen(command).readline().rstrip('\n')
3
indiantroy

Jenkinsでビルドを実行しましたが、同様の問題がありました。 Ad Hocプロビジョニングプロファイルは頻繁に変更されるため、変更するたびにビルドスレーブがxcodeにインストールされるのを回避したいので、ここで作業します。

/usr/bin/xcrun -sdk iphoneos PackageApplication -v <path to yourapp.app> -o <path to your .ipa file> --sign "<Name of signing identity>" --embed <path to .mobileprovision file>

「」は、ターゲットのビルド設定の「コード署名」セクションに表示されるものです。

2
jpancoast

Fastlaneため息を使用して特定の暫定ファイルをインストールするか、新しいファイルを作成できます。

fastlane sigh renew --adhoc -n "provisional-profile-name" --app_identifier "app-identifier" -u "user-name" --ignore_profiles_with_different_name

provisional-profile-nameは単なるプロファイルの名前であり、.mobileprovision拡張子は含まれません。

すべてのデバイスUUIDが追加された新しいアドホックプロファイルを作成するには、

fastlane sigh --adhoc --app_identifier "app-identifier" -u "username"

Fastfile、

lane :build do

sigh(
adhoc: true,
app_identifier: "***APP_ID**",
provisioning_name: "**Profile_name**",
username: "Apple_ID",
force: true,
skip_certificate_verification: true,
)


gym(
#export_options: "exportPlist.plist",
scheme: "**scheme-name**",
export_method: "ad-hoc",
xcargs: "PROVISIONING_PROFILE=$SIGH_UUID",
)
end
1
Vineeth

cupertinoの最近の開発はないようです。 Fastlaneには、プロビジョニングプロファイル(作成、ダウンロード、更新、修復)を管理するsighというツールがあります。 https://github.com/fastlane/fastlane/tree/master/ sigh#readme

1
Toland Hon