我正在建立一个php / bash / mysql系统,用于自动化iPhone应用程序的adhoc发布。但我想读取项目的mobileprovision文件中的application-identifier键,并根据它更改info.plist文件。
我目前可以从php构建ipa文件,如果cfbundleidentifer密钥与其配置文件相同。
我找到了像https://gist.github.com/711794这样的代码,但我希望bash脚本将它集成到我的系统中。
由于
答案 0 :(得分:47)
如果您在使用mac os x的计算机上运行此程序,则可以使用以下命令:
/usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' /dev/stdin <<< $(security cms -D -i path_to_mobileprovision)
答案 1 :(得分:26)
如果你想以适当的方式从mobileprovision中提取plist而不依赖grepping / sedding / etc.,你可以使用OpenSSL:
openssl smime -inform der -verify -noverify -in file.mobileprovision
您案例中的完整示例可能是:
openssl smime -inform der -verify -noverify -in file.mobileprovision > tmp.plist
/usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' tmp.plist
OpenSSL部分应该可以在任何平台上运行,尽管到目前为止我只在Mac上完成了。 PlistBuddy仅在Mac上,但可以找到其他实用程序来读/写属性列表文件。
答案 2 :(得分:6)
许多人中的一个解决方案......
将egrep与-a选项一起使用,该选项处理二进制文件,如文本文件和'-A 2',它将在您要匹配的字符串后显示两行:ApplicationIdentifierPrefix。
之后,使用sed修剪括号和空格行。
使用一系列管道:
egrep -a -A 2 ApplicationIdentifierPrefix file.mobileprovision | grep string | sed -e 's/<string>//' -e 's/<\/string>//' -e 's/ //'
答案 3 :(得分:6)
我根据jlawrie的答案创建了一个bash函数,列出了~/Library/MobileDevice/Provisioning Profiles
文件夹中所有.mobileprovision的包ID。
将其保存到您的.bash_profile
,然后从终端点击list_xcode_provisioning_profiles
。
list_xcode_provisioning_profiles() {
while IFS= read -rd '' f; do
2> /dev/null /usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' /dev/stdin \
<<< $(security cms -D -i "$f")
done < <(find "$HOME/Library/MobileDevice/Provisioning Profiles" -name '*.mobileprovision' -print0)
}
答案 4 :(得分:0)
由于.mobileprovision是“PKCS#7签名数据”左右,因此有点单调乏味。
幸运的是,你可以使用grep:)
答案 5 :(得分:0)
我使用mobileprovision-read存储库中的代码来从mobileprovision文件中提取信息。这使用macOS API来读取文件。
以下是运行生成的程序的用法:
mobileprovision-read -- mobileprovision files querying tool.
USAGE
mobileprovision-read -f fileName [-o option]
OPTIONS
type – prints mobileprovision profile type (debug, ad-hoc, enterprise, appstore)
appid – prints application identifier
Will print raw provision's plist if option is not specified.
You can also use key path as an option.
EXAMPLES
mobileprovision-read -f test.mobileprovision -o type
Prints profile type
mobileprovision-read -f test.mobileprovision -o UUID
Prints profile UUID
mobileprovision-read -f test.mobileprovision -o ProvisionedDevices
Prints provisioned devices UDIDs
mobileprovision-read -f test.mobileprovision -o Entitlements.get-task-allow
Prints 0 if profile doesn't allow debugging 1 otherwise