在iOS开发中,embedded.mobileprovision描述文件是开发人员非常熟悉的,里面包含了证书信息,如调试设备UDID、Entitlements、AppIDName、DeveloperCertificates等大量关于此安装包和证书的信息,此文件是二进制格式,无法直接打开,只能通过终端命令,例如mac下自动的命令行工具:security来查看信息,笔者这里演示下如何在获取一个IPA安装包或embedded.mobileprovision的情况下得知描述文件或证书的到期时间。
查看embedded.mobileprovision文件信息,首先打开终端Terminal,输入如下命令:
security cms -D -i embedded.mobileprovision
说明:如果是IPA安装包,请先解压获取此描述文件,全部文本结果如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AppIDName</key>
<string>XXXXX</string>
<key>ApplicationIdentifierPrefix</key>
<array>
<string>V5L5V5L5NXXXXXXX</string>
</array>
<key>CreationDate</key>
<date>2020-11-26T06:38:02Z</date>
<key>Platform</key>
<array>
<string>iOS</string>
</array>
<key>IsXcodeManaged</key>
<false/>
<key>DeveloperCertificates</key>
<array>
<data>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</data>
</array>
<key>Entitlements</key>
<dict>
<key>beta-reports-active</key>
<true/>
<key>application-identifier</key>
<string>V5L5NXXXXXXX.com.XXXXXXX</string>
<key>keychain-access-groups</key>
<array>
<string>V5L5NXXXXXXX.*</string>
<string>com.apple.token</string>
</array>
<key>get-task-allow</key>
<false/>
<key>com.apple.developer.team-identifier</key>
<string>V5L5V5L5NXXXXXXX</string>
</dict>
<key>ExpirationDate</key>
<date>2021-10-26T02:31:28Z</date>
<key>Name</key>
<string>XXXXX</string>
<key>TeamIdentifier</key>
<array>
<string>XXXXXXX</string>
</array>
<key>TeamName</key>
<string>XXXXX Busines Co., Ltd.</string>
<key>TimeToLive</key>
<integer>333</integer>
<key>UUID</key>
<string>a1c12dbb-d919-49c8-9742-cXXXXXXX2ab1</string>
<key>Version</key>
<integer>1</integer>
</dict>
</plist>%
从以上文件就可以得知此描述文件到期时间:2021-10-26T02:31:28Z
<key>ExpirationDate</key>
<date>2021-10-26T02:31:28Z</date>
但在此命令下无法得知证书的到期时间,DeveloperCertificates 字段对应的值为Base64加密,无法正常解析出来,一般个人或公司为一年,企业为三年,描述文件都是一年有效期。
至此,我们用到如下命令来查看证书到期时间,输入如下命令:
security cms -D -i embedded.mobileprovision > tmp.plist && /usr/libexec/PlistBuddy -c 'Print DeveloperCertificates:0' tmp.plist | openssl x509 -inform DER -noout -enddate
notAfter=Oct 26 02:31:28 2021 GMT
可见证书文件到期时间为:Oct 26 02:31:28 2021 GMT,与描述文件到期时间一致,说明是个人或公司类型,如果是2023年到期说明是企业类型,同时也生成了一个temp.plist的临时文件,如果不需要此文件,可以执行如下命令:
/usr/libexec/PlistBuddy -c 'Print DeveloperCertificates:0' /dev/stdin <<< $(security cms -D -i embedded.mobileprovision) | openssl x509 -inform DER -noout -enddate
也能看到同样的到期时间,如果想看全部信息,把后面的-enddate换成-text,可以执行如下命令:
/usr/libexec/PlistBuddy -c 'Print DeveloperCertificates:0' /dev/stdin <<< $(security cms -D -i embedded.mobileprovision) | openssl x509 -inform DER -noout -text
在命令行下查看首先要解压IPA包文件,拿到embedded.mobileprovision,然后执行相应的命令来查看,如果不想如此复杂,可以利用UI工具来查看,利用这款mac软件:风车签名管理 - 工具箱 - 查看描述文件,直接拖拽即可快速查看,如下图:
另外,如果想快速预览一个IPA包文件或描述文件,也可以采用mac插件的方式,首先安装QuickLook插件ProvisionQL,地址:https://github.com/ealeksandrov/ProvisionQL,安装方式如下:
Manual
- download archive with latest version from the Releases page;
- move
ProvisionQL.qlgenerator
to~/Library/QuickLook/
(current user) or/Library/QuickLook/
(all users); - run
qlmanage -r
to refresh Quick Look plugins list.
之后选中文件右键鼠标(这里如果不起作用,建议重启电脑一次):
即可看到如下文件信息: