2011-01-20 12 views
48

私はこれで何かを見つけることができませんでした(間違った検索語句を使っているだけかもしれません):
私たちは、アプリケーションのための賢明な連続統合設定を構築しようとしています。本当に分かりやすい実装をするには、ビルドサーバーは、使用済みのプロビジョニングプロファイルをappleから自動的にリフレッシュできる必要があります。 X-Codeオーガナイザの機能と似ていますが、コマンドラインから自動的に実行されます。
それはまったく可能ですか?コマンドラインによるプロビジョニングプロファイルの更新

+1

この質問をありがとう。今までの私のコマンドラインソリューションは '$ vnc:// server'でした;-) – mpontillo

+0

次のURLを見てください。
http://stackoverflow.com/questions/4369119/how-to-install-developer-certificate-private-key-and-provisioning-profile-for-ios私はそれが役に立ちそうです。 – jfalexvijay

答えて

53

ここで私のbashスクリプトは、スクリプトの最初の引数($ 1)が新しいプロファイルの場所です。

rm -Rf ~/Library/MobileDevice/Provisioning\ Profiles/* 
cp "$1"/*.* ~/Library/MobileDevice/Provisioning\ Profiles/ 

基本的には、その〜/ライブラリ/モバイル装置/プロビジョニングプロファイル/フォルダの何もして構築するために使用することができます(とXcodeに表示されます)。

CIシステムを立ち上げたいと思っている方は、最近ハドソンを使って話をして、スライドとメモをover hereにしてください。私の電子メールはあなたがそれについて質問があれば私のサイトにあります。

+2

クール、答えに感謝します。しかし、あなたは$ 1を得る方法を知っていますか?最初にビルドマシンにプロファイルをどのように取得しますか? – LordT

+5

私の仕事は主に収縮しており、各クライアントには独自のiTunes Connectアカウントがあるので、私はそれらに戻って委任しました。プロビジョニングプロファイルを新しいUDIDで更新する方法を習得し、それぞれのプロビジョニングプロファイルを保持するDropbox.comフォルダを共有しました。ビルドプロセスの第一歩は、Dropboxのクライアント固有のプロビジョニングプロファイルを更新することです。そのため、ビルドは常に最新のものを使用します。新しいプロファイルをアップロードすることもビルドトリガです。新しいデバイスを追加して、自分の介入なしに新しくビルドすることができます。 –

+0

大丈夫です。 Dropboxを使って新しいビルドをどのように起動させるのですか? Folderactions?またはこれを行う特定のオプションがありますか? – LordT

1

は、それはアップルの開発者向けウェブサイトからの情報を解析し、自動的に適切な場所にコピーするためにあなたのためのプロファイルをダウンロードしhttps://github.com/lacostej/apple-dev

からapple_dev_center.rbを使用してみてください。

16

アップデート:最新のiTunesでCupertinoは動作しなくなります。 sighを使用してに見てする代わりに


は大きな時間を手助けします。このコマンド・ライン・インターフェースのような音:あなたがそう(感謝@tdubik)のように、すべての配布プロファイルをダウンロードすることができます

https://github.com/nomad/cupertino

もう1つのアプローチは、Ente プロビジョニングなしでデバイスを構築できるrprise開発ライセンス(300ドル/年)!だからあなたは、あなたのアプリケーションをビルドして、Apple Devセンターに行くか、新しいデバイスを登録する必要なく、デバイスに送ることができます。

アプリをアプリストアに配布することはできませんが、クライアント用にたくさんのアプリを開発する開発ハウスの場合は、「ビルドしてクライアントに送信する」処理がかなり容易になる可能性がありますピース!これがAppleの正当な使用ポリシーであるかどうかは分かりませんので、そのオプションを検討する前に確認してください。しかし、プロトタイプなどのために検討するものかもしれません。実際に出荷したい場合は、独自の開発者プログラムのライセンスを取得する必要があります。

+3

エンタープライズライセンスはApp Storeの配布用ではありませんので、(App Storeにアプリを出荷する予定があると仮定して)これを生産的に使用するには、Appleに別の開発者アカウントを持っている必要があります。 – danieljimenez

+0

良い点...言及するのを忘れてしまった...ありがとう! –

+2

githubのリンクありがとう!ここで最善の答え。しかし、エンタープライズを使ってクライアント用のアプリケーションを構築することはお勧めしません.Appleはそれを好まないのです。エンタープライズは「企業内での内部展開のみ」であり、エンタープライズで使用されるすべてのデバイスを管理する必要があるとの合意が成立したと考えています。 – Sperr

0

私はいつかこの作品を作ろうとしています。ようやくそれを作った!

fastlane sighを使用して、必要な仮プロファイルのみをダウンロードしてインストールできます。

fastlane sigh renew --adhoc -n "provisional_profile_name" 
--app_identifier "your_app_identifier" -u "apple_login _username" --ignore_profiles_with_different_name 

注:このコマンドは、すでに システムにインストールされているアプリのいずれかの暫定プロファイルを必要としていました。それはそうでなければ私のためにエラーを投げた。

provisional_profile_name =プロファイル名の名前だけですが、 に拡張子が必要ありません。

1

Sighは、プロビジョニングプロファイルを管理できます。ただし、自分でフェッチしたプロファイルのインストールはサポートしていません。しかし、私はまだ彼らのsource for how they actually install a profile once they've downloaded itを見る価値があることを発見しました。

ありがたいことに、それはJames J's answerに非常に似ています:

def self.install_profile(profile) 
    UI.message "Installing provisioning profile..." 
    profile_path = File.expand_path("~") + "/Library/MobileDevice/Provisioning Profiles/" 
    uuid = ENV["SIGH_UUID"] || ENV["SIGH_UDID"] 
    profile_filename = uuid + ".mobileprovision" 
    destination = profile_path + profile_filename 

    # If the directory doesn't exist, make it first 
    unless File.directory?(profile_path) 
    FileUtils.mkdir_p(profile_path) 
    end 

    # copy to Xcode provisioning profile directory 
    FileUtils.copy profile, destination 

    if File.exist? destination 
    UI.success "Profile installed at \"#{destination}\"" 
    else 
    UI.user_error!("Failed installation of provisioning profile at location: #{destination}") 
    end 
end 

私は私のために、このローカルインストールを実行するためのスクリプトを持っている:

#!/bin/bash -euo pipefail 

if [ ! -f "${1}" ] 
then 
    echo "Usage: $0 <path/to/mobileprovision/file>" 1>&2 
    exit 1 
fi 

UUID=$(grep --text --after-context=1 UUID "${1}" | grep --ignore-case --only-matching "[-A-Z0-9]\{36\}") 
if [ -z "${UUID}" ] 
then 
    echo "Invalid mobileprovision file: ${1}" 1>&2 
    exit 2 
else 
    echo "${UUID}" 
fi 
:別の uuid-from-mobileprovision.bashスクリプトに依存

#!/bin/bash -euo pipefail 

BASH_SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 

cd "$BASH_SOURCE_DIR" 

# by default bash passes the glob characters if nothing matched the glob 
# disable that 
# http://stackoverflow.com/a/18887210/9636 
shopt -s nullglob 
# this creates a proper bash array, which we need since our profiles 
# have funny characters in them 
MOBILE_PROVISIONS=(*.mobileprovision) 
# re-enable default nullglob behavior 
shopt -u nullglob 

# On a brand new machine that has never run any app on a development device 
# the ~/Library/MobileDevice/"Provisioning Profiles" directory doesn't exist 
mkdir -p ~/Library/MobileDevice/"Provisioning Profiles" 

for mobileprovision in "${MOBILE_PROVISIONS[@]}" 
do 
    uuid=$(./uuid-from-mobileprovision.bash "${mobileprovision}") 
    cp "${mobileprovision}" ~/Library/MobileDevice/"Provisioning Profiles"/"${uuid}".mobileprovision 
done 

関連する問題