可以从命令行"安装"Xcode .mobileprovision文件吗?

Ben*_*ton 47 bash xcodebuild ios xcrun

我正在尝试使用在Mac Mini Server(OSX 10.7)上运行的bash脚本自动化为客户构建应用程序的过程.

我的脚本基于github上最有用的脚本,最初发布于https://gist.github.com/949831

我正在使用xcodebuild构建应用程序,然后使用xcrun签名并嵌入mobileprovision文件.

当我使用mobileprovision文件完成所有这些操作时,我使用GUI手动安装到Xcode中(例如双击),它可以正常工作.如果我只是尝试使用复制到SCP服务器上的mobileprovision文件失败(代码签名错误:无法找到供应配置文件'123abc123'.)

大概这是因为文件没有"安装".

有没有办法从终端安装mobileprovision文件?我正在使用SSH,所以使用诸如'open'命令之类的东西是行不通的.

谢谢!

nsc*_*hum 72

如果您不想下载外部依赖项(如Ben所做的那样),以下情况应该适用于大多数情况:

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

需要注意的是一个UUID是由十六进制数字,以便正确的范围[-A-F0-9],而不是[-A-Z0-9].

奖励:下载并安装配置文件

使用cupertino工具,以下代码段从Developer Portal下载所有分发配置文件并进行安装.

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
Run Code Online (Sandbox Code Playgroud)

cupertino(ios命令)可以安装sudo gem install cupertino.

  • 而不是使用`grep`来提取UUID,你可以使用Apple的`security`和`PlistBuddy`工具 - 参见[this answer](http://stackoverflow.com/a/10490095/1851186) - `uuid = $(/usr/libexec/PlistBuddy -c"打印UUID"/ dev/stdin <<< $(/ usr/bin/security cms -D -i adhoc.mobileprovision)) (8认同)

Ben*_*ton 26

自从提出这个问题以来,我自己就建立了一个解决方案.秘诀就是简单地将文件复制到〜/ Library/MobileDevice/Provisioning Profiles /文件夹,但是(这里是棘手的位)重命名为[The UUID] .mobileprovision.

UUID保存在文件本身的文本部分内(在plist中).不幸的是,该文件还包含二进制文件,因此"默认读取"无法读取它.幸运的是,这个人已经构建了一个小命令行实用程序来获取UUID(以及其他一些东西).

这是我的完整工作脚本:

https://gist.github.com/2568707


djr*_*ero 6

所有其他答案的汇编update_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
Run Code Online (Sandbox Code Playgroud)

易于适应您的配置需求.