51

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

我的脚本基于来自 github 的非常有用的脚本,最初发布在https://gist.github.com/949831

我正在使用 xcodebuild 构建应用程序,然后使用 xcrun 对 mobileprovision 文件进行签名和嵌入。

当我使用 mobileprovision 文件执行所有这些操作时,我使用 GUI(例如双击)手动安装到 Xcode 中,它工作正常。如果我只是尝试使用复制到带有 SCP 的服务器上的 mobileprovision 文件,它会失败(代码签名错误:找不到配置文件“123abc123”。)

大概这是因为该文件未“安装”。

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

谢谢!

4

7 回答 7

83

如果您不想下载外部依赖项(就像 Ben 所做的那样),在大多数情况下应该可以使用以下方法:

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

请注意, 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

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

于 2012-05-27T15:17:22.583 回答
28

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

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

这是我的完整工作脚本:

https://gist.github.com/2568707

于 2012-05-01T15:18:11.677 回答
7

所有其他答案的纲要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

易于适应您的配置需求。

于 2014-10-04T12:12:25.890 回答
3

我们在 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>

“”是您在目标的构建设置中的“代码签名”部分下看到的内容。

于 2012-05-02T16:40:40.360 回答
3

看起来 Apple 在每个键值对下方的 .mobileprovision 配置文件中添加了空行,并且 grep 选项不再起作用。

以下是如何使用 PlistBuddy 和使用 python 脚本的安全性来检索它

command = "/usr/libexec/PlistBuddy -c 'Print :UUID' /dev/stdin <<< $(security cms -D -i abc.mobileprovision)"
uuid = os.popen(command).readline().rstrip('\n')
于 2014-08-12T22:18:23.587 回答
2

使用 fastlane sigh 安装特定的临时文件,或者您可以创建一个新文件。

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

临时配置文件名称只是配置文件的名称,不包含 .mobileprovision 扩展名。

要创建添加了所有设备 UUID 的新临时配置文件,

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

快速文件,

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
于 2017-09-11T05:18:08.997 回答
1

看起来最近没有任何进展cupertinoFastlane有一个称为sigh管理配置文件(创建、下载、更新、修复)的工具:https ://github.com/fastlane/fastlane/tree/master/sigh#readme

于 2016-08-26T20:56:32.460 回答