【问题标题】:How to extract the bundle identifier from a provisioning profile?如何从配置文件中提取捆绑标识符?
【发布时间】:2021-03-26 16:02:11
【问题描述】:
【问题讨论】:
标签:
ios
shell
code-signing
provisioning-profile
bundle-identifier
【解决方案1】:
TL;DR
security cms -D -i your.mobileprovision | plutil -extract Entitlements.application-identifier xml1 -o - - | grep string | sed 's/^<string>[^\.]*\.\(.*\)<\/string>$/\1/g'
细节
这里的关键是您可以使用以下方法从配置文件中提取 plist:
security cms -D -i your.mobileprovision > tmp.plist
现在你有了一个合适的 plist,你可以像往常一样使用PlistBuddy。我最终改用plutil,因为PlistBuddy 不支持从标准输入读取,而且我不想创建临时文件。不幸的是,plutil 输出 XML 而不仅仅是属性的值,而且Entitlements.application-identifier 属性前面有团队 ID,所以无论如何我都需要正则表达式来提取包标识符。
如果您对如何改进此命令有任何建议,我很高兴听到这些建议,但该命令按预期工作并解决了我的问题。希望其他人也会发现它也很有用。
【解决方案2】:
在 macOS Monterey 上,这变得更简单了:
security cms -D -i your.mobileprovision | plutil -extract Entitlements.application-identifier raw -o - -
最后,plutil 可以原生打印未封装的值。来自man plutil:
原始值和预期类型
-extract keypath raw 打印的值取决于其类型。
以下是可能的 expect_type 值以及在遇到-extract keypath raw 时将如何打印它们
-
bool = 字符串“true”或“false”
-
整数 = 数值
-
float = 没有特定精度的浮点值
-
string = 未转义的原始字符串,UTF8 编码
-
日期 = UTC 时区中的 RFC3339 编码字符串表示
-
data = 数据的 base64 编码字符串表示
-
数组 = 表示数组中元素个数的数字
-
dictionary = 字典中的每个键都将按字母排序顺序打印在新行上
当使用-type keypath 时,上面的expect_type 字符串本身会被打印出来。