2012-06-20 36 views
26

Tôi đang thiết lập Jenkins để tự động hóa các bản dựng iOS. Có khả năng cung cấp tệp .mobileprovision không được thêm vào công cụ cấp phép trong Xcode để xcodebuild không?Cung cấp xcodebuild với tệp .mobileprovision

Tôi biết rằng tôi có thể sử dụng PROVISIONING_PROFILE và PROVISIONING_PROFILE [sdk = iphoneos *] nhưng họ yêu cầu hồ sơ cấp phép phải được thêm vào Trình tổ chức.

Tôi biết rằng tôi có thể thực hiện thao tác với xcrun. Nhưng trước khi chạy xcrun, tôi phải đăng nhập thành công ứng dụng bằng xcodebuild.

Có cách nào để tôi có thể cung cấp tệp hồ sơ cấp phép (.mobileprovision) cho xcodebuild không?

Trả lời

46

Chúng tôi có giải pháp cho điều này - về cơ bản những gì bạn cần làm là 'cài đặt' tệp .mobileprovision bằng cách sao chép tệp vào thư mục có tên sau UUID của tệp dự phòng di động. Đây là những gì tổ chức Xcode thực sự thực hiện khi bạn bấm đúp vào tệp .mobileprovision.

Có một chương trình nhỏ được gọi là mpParse có thể trích xuất UUID từ tệp mobileprovision mà tập lệnh sử dụng - liên kết để tải xuống trong mã. Sau đó, nó đã chết đơn giản để sao chép tập tin mobileprovision đến đúng nơi.

Dưới đây là một kịch bản shell tôi đã thực hiện để làm điều này:

#!/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" 

Bạn có thể tải về các tập lệnh trực tiếp từ https://gist.github.com/2568707

Một khi bạn đã chạy kịch bản, bạn có thể sử dụng PROVISIONING_PROFILE và PROVISIONING_PROFILE [sdk = iphoneos *] trong xcodebuild để tạo ứng dụng của bạn. Chúng tôi sử dụng nó trong sản xuất.

Chỉnh sửa: Chỉ để tham khảo, tôi chủ yếu hỏi câu hỏi này ở đây một thời gian ngắn trở lại (Can an Xcode .mobileprovision file be 'installed' from the command line?) và đã đưa ra ở trên khi không ai có vẻ biết :-)

Cập nhật: Là một thay thế cho mpParse người ta có thể sử dụng công cụ táo: /usr/libexec/PlistBuddy -c 'Print UUID' /dev/stdin <<< $(security cms -D -i path_to_mobileprovision)

+0

+1 giải pháp tuyệt vời - cảm ơn vì chia sẻ. – Till

+0

Tuyệt vời! Thanks =) –

+1

Vui vì tôi có thể giúp! –

0

Nếu bạn sử dụng tiếng thở dài từ Fastlane bạn có thể gán nó ra cho một biến provision_id=sigh

này cũng hoạt động nếu phào nhẹ có params: sigh(...)

Đây là kịch bản duy nhất mà làm việc cho tôi:

'var = $ (grep UUID -A1 -a | grep -io "[-A-Z0-9] {36}")'

sử dụng với: "$var.mobileprovision"

Các vấn đề liên quan