用bash解析mobileprovision文件?

egi*_*ray 23 iphone bash shell adhoc plist

我正在建立一个php/bash/mysql系统,用于自动化iPhone应用程序的adhoc发布.但我想读取项目的mobileprovision文件中的application-identifier键,并根据它更改info.plist文件.

我目前可以从php构建ipa文件,如果cfbundleidentifer密钥与其配置文件相同.

我找到了这样的代码https://gist.github.com/711794但是我想要bash脚本将它集成到我的系统中.

谢谢

小智 49

如果您在具有mac os x的计算机上运行它,则可以使用以下命令:

/usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' /dev/stdin <<< $(security cms -D -i path_to_mobileprovision)
Run Code Online (Sandbox Code Playgroud)


小智 26

如果你想以适当的方式从mobileprovision中提取plist而不依赖grepping/sedding/etc.,你可以使用OpenSSL如下:

openssl smime -inform der -verify -noverify -in file.mobileprovision
Run Code Online (Sandbox Code Playgroud)

您的案例中的完整示例可能是:

openssl smime -inform der -verify -noverify -in file.mobileprovision > tmp.plist
/usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' tmp.plist
Run Code Online (Sandbox Code Playgroud)

OpenSSL部分应该可以在任何平台上运行,尽管到目前为止我只在Mac上完成了.PlistBuddy仅在Mac上,但可以找到其他实用程序来读/写属性列表文件.


小智 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/ //'
Run Code Online (Sandbox Code Playgroud)


hyp*_*not 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)
}
Run Code Online (Sandbox Code Playgroud)

  • 对于那些不知道如何在`.bash_profile` 中插入它的人,`touch ~/.bash_profile; 打开 ~/.bash_profile`,复制并粘贴提供的源代码,保存它,重新启动终端窗口,然后他们就按照建议使用 `list_xcode_provisioning_profiles`。 (3认同)