2012-06-20 8 views
26

Я настраиваю Jenkins для автоматизации сборки iOS. Есть ли возможность предоставить файл .mobileprovision, который не добавлен в средство инициализации в Xcode для xcodebuild?Предоставьте xcodebuild с файлом .mobileprovision

Я знаю, что я могу использовать PROVISIONING_PROFILE и PROVISIONING_PROFILE [sdk = iphoneos *], но они требуют, чтобы профиль подготовки был добавлен в Организатор.

Я знаю, что могу выполнить операцию с помощью xcrun. Но перед запуском xcrun я должен успешно подписать приложение с помощью xcodebuild.

Есть ли способ, которым я могу предоставить файл профиля подготовки (.mobileprovision) к xcodebuild?

ответ

46

У нас есть решение для этого - по существу, вам нужно «установить» файл .mobileprovision, скопировав его в каталог с именем UUID мобильного файла обеспечения. Это то, что фактически делает Xcode Organizer при двойном щелчке файла .mobileprovision.

Есть небольшая программа под названием mpParse, которая может извлечь UUID из файла mobileprovision, который использует сценарий, - ссылку для загрузки в коде. Тогда было бы просто скопировать файл mobileprovision в нужное место.

Вот сценарий оболочки я сделал, чтобы сделать это:

#!/bin/sh 

# 2012 - Ben Clayton (benvium). Calvium Ltd 
# Found at https://gist.github.com/2568707 
# 
# This script installs a .mobileprovision file without using Xcode. Unlike Xcode, it'll 
# work over SSH. 
# 
# Requires Mac OS X (I'm using 10.7 and Xcode 4.3.2) 
# 
# IMPORTANT NOTE: You need to download and install the mpParse executable from  http://idevblog.info/mobileprovision-files-structure-and-reading 
# and place it in the same folder as this script for this to work. 
# 
# Usage installMobileProvisionFile.sh path/to/foobar.mobileprovision 

if [ ! $# == 1 ]; then 
echo "Usage: $0 (path/to/mobileprovision)" 
exit 
fi 

mp=$1 

uuid=`/usr/libexec/PlistBuddy -c 'Print UUID' /dev/stdin <<< $(security cms -D -i ${mp})` 

echo "Found UUID $uuid" 

output="~/Library/MobileDevice/Provisioning Profiles/$uuid.mobileprovision" 

echo "copying to $output.." 
cp "${mp}" "$output" 

echo "done" 

Вы можете скачать скрипт прямо из https://gist.github.com/2568707

После того, как вы запустите скрипт, вы можете использовать PROVISIONING_PROFILE и PROVISIONING_PROFILE [SDK = iphoneos *] в xcodebuild для создания вашего приложения. Мы используем это в производстве.

Edit: Просто для справки, я по существу задал этот вопрос здесь некоторое время назад (Can an Xcode .mobileprovision file be 'installed' from the command line?) и придумал выше когда никто не знал :-)

Update: качестве альтернатива mpParse можно использовать яблочные инструменты: /usr/libexec/PlistBuddy -c 'Print UUID' /dev/stdin <<< $(security cms -D -i path_to_mobileprovision)

+0

+1 Отличное решение - спасибо за обмен. – Till

+0

Удивительный! Спасибо =) –

+1

Рад, что я мог помочь! –

0

Если вы используете вздыхать от Fastlane вы можете назначить его вывод к переменному provision_id=sigh

это также работает, если Вздох имеет Params: sigh(...)

Это единственный сценарий, который работал для меня:

`вар = $ (Grep UUID -A1 -a | Grep -io "[A-Z0-9] {36}")»

использования с: "$var.mobileprovision"