64

我有一堆 .ipa 文件,我使用脚本将它们辞职。

那么如何检查配置文件/签名证书以确保他们使用正确的信息呢?

理想情况下,我希望能够获取任何 .ipa 文件并告诉使用哪个配置文件/签名证书对其进行签名。

背景故事:我们的企业发行证书即将到期,我想重新签署我们的东西。对于我们在 Xcode 中制作和存档的所有东西来说,这是一个简单的做法,但对于第 3 方供应商制作的可分发文件,我不能这样做。我想避免要求重新签名的 .ipa 文件,因为新的 .ipa可能包含未知更改并引入问题,而且他们可能也会向我们收费……但我更担心第一个问题。

由于我们的旧分发证书和新分发证书仍然有效(您得到 6 个月的重叠),我需要能够确认使用了新分发证书,否则当旧分发证书过期并且“辞职”脚本没有时,我会看起来很傻t 实际上做这项工作。

4

7 回答 7

81

配置文件有一个可以使用终端命令查看的 UUID:

安全 cms -D -i (path_to_your_provisioning_profile)

请参阅命令输出的 UUID 部分,例如:

<key>UUID</key> <string>A008C022-7B82-4E40-8B37-172763E1E3CC</string>

Xcode 在 .app 包中插入用于签署应用程序的配置文件。要找到它,请将 .ipa 重命名为 .zip,使用 Finder 解压缩,在 /Payload 中找到 .app 文件。在 .app 文件上“显示包内容”并找到名称为 的配置文件embedded.mobileprovision

使用上述命令转储其权利,并将其与“库”下的 Xcode Organizer > Devices 选项卡 > Provisioning Profile 部分中的配置文件中找到的 UUID 进行比较。您可以使用“在 Finder 中显示”来显示它们在磁盘上的位置。

于 2013-02-14T22:44:06.140 回答
25

晚会迟到了......

但是这个工具为我节省了一些时间:nomad/shenzhen

$ ipa info /path/to/app.ipa

+-----------------------------+----------------------------------------------------------+
| ApplicationIdentifierPrefix | DJ73OPSO53                                               |
| CreationDate                | 2014-03-26T02:53:00+00:00                                |
| Entitlements                | application-identifier: DJ73OPSO53.com.nomad.shenzhen    |
|                             | aps-environment: production                              |
|                             | get-task-allow: false                                    |
|                             | keychain-access-groups: ["DJ73OPSO53.*"]                 |
| CreationDate                | 2017-03-26T02:53:00+00:00                                |
| Name                        | Shenzhen                                                 |
| TeamIdentifier              | S6ZYP4L6TY                                               |
| TimeToLive                  | 172                                                      |
| UUID                        | P7602NR3-4D34-441N-B6C9-R79395PN1OO3                     |
| Version                     | 1                                                        |
+-----------------------------+----------------------------------------------------------+

2020:维护者的更新

https://github.com/nomad/shenzhen/blob/master/README.md

注意:shenzhen 使用 Xcode 6 构建 API,该 API 已弃用近 3 年。如果您的应用使用 Swift 3、watchOS 和其他应用目标,这会导致问题。

构建您的 iOS 应用程序的维护替代方法是使用最新 Xcode API 的gym。要分发构建,您可以使用 fastlane。有关如何开始使用的更多信息,请参阅 iOS Beta 部署指南。

于 2015-03-19T21:29:24.623 回答
16

根据 Bobjt 的回答,我使用 IPCU 来获取配置文件的详细信息:

  1. 将您的 .ipa 重命名为 .zip
  2. 用 Finder 解压
  3. 在 /Payload 中找到 .app 文件。
  4. 在 .app 文件上“显示包内容”并找到名称为 embedded.mobileprovision 的配置文件。

  5. 将 mobileprovisioning 文件拖到 iPhone 配置实用程序中

IPCU 显示配置文件的名称/到期日期等。

于 2013-08-21T14:53:07.033 回答
5

我最终混合使用了 Bobjt 和 HaemEternal 解决方案提案。

  1. 查找存档。
  2. 显示包内容。
  3. 复制 .app 文件
  4. 显示 .app 文件的包内容。
  5. 将 embedded.mobileprovision 文件复制出来。
  6. 运行“安全 cms -D -i (path_to_your_provisioning_profile)”
  7. 从步骤 6 中的调用结果中查找 UUID 编号。
  8. 打开 Iphone 配置实用程序并查看配置文件以找到具有相同 UUID 编号的配置文件。
于 2014-03-26T05:08:27.180 回答
4

我已经能够使用以下过程成功测试。

  1. 将原始 .ipa 安装到设备上。
  2. 转到设置->常规->配置文件(请参阅旧配置文件)
  3. 从设备中删除应用程序和旧配置文件
  4. 辞职应用。
  5. 在设备上安装重新签名的应用程序
  6. 转到设置->常规->配置文件(请参阅新的配置文件)

这似乎是一种确认配置文件已更新的防弹方法,并且由于配置文件中只有 1 个签名证书......那么我们必须使用新证书进行签名。

(但我还是想找到更好的方法)

于 2013-02-14T19:48:16.750 回答
1

如果您尝试确定是否使用了特定证书来签署 .ipa,您可以执行以下操作:

如果您对 python 感到满意,您可以使用我创建的这个脚本来比较嵌入在 .ipa 中的证书与您拥有的证书。

https://gist.github.com/ronsims2/1b7a8b9e15898f9406788988106b2f78

python ipa_cert_checker.py /Users/janedoe/Dcouments/Foobar.ipa /Users/janedoe/Dcouments/barfoo.cer

或者,您可以从 Mac 的命令行手动执行脚本执行的操作。

  1. 解压缩 IPA 存档。它将生成一个名为“Payload”的文件夹。

    unzip Foobar.ipa

  2. 阅读嵌入式配置信息。请注意,Payload 目录中的包/文件夹的名称与 .ipa 相同,但扩展名为 .app。

    security cms -Di Payload/Foobar.app/embedded.mobileprovision

在上述命令的输出中,证书作为 base64 字符串嵌入到与键“DeveloperCertificates”关联的数组数据元素中。3. 复制证书(不包括 xml 标签并确保没有多余的空格)并将它们作为文本保存到方便的位置。在本例中,我将其命名为“cert_from_foobar.txt”

  1. Base64 编码已知证书并将输出保存到文件中。

    base64 barfoo.cer > barfoo.txt

  2. 将已知证书与您保存的嵌入式证书进行比较。 cmp cert_from_foobar.txt barfoo.txt || echo 'These files are NOT the same.'

如果它们相同,您将看不到任何消息。

于 2019-03-19T13:43:44.667 回答
0

据我所知,以上都无法立即告诉我是否使用了某个分发证书。

以下是对我有用的。

首先,打开 Keychain Access,过滤 Certificates,找到 iPhone 分发证书。

钥匙串访问列表证书

右键单击分发证书并选择获取信息。出现一个新窗口。

显示分发证书序列号的窗口

将此十进制序列号转换为十六进制,例如通过选择并复制它,然后将其粘贴到计算器应用程序中(通过菜单 View -> Programmer 切换到程序员模式):

显示长序列号的计算器应用程序

然后在右上角将分段控件切换到“16”:

计算器应用程序以十六进制显示长序列号

有了这些知识,打开终端并解压缩 IPA,然后切换到 Payload 目录:

$ unzip MyApp.ipa
$ cd Payload

提取证书:

$ codesign -d --extract-certificates MyApp.app

显示第一个证书的序列号:

$ openssl x509 -inform DER -in codesign0 -noout -nameopt -oneline -serial
serial=20DE00FFA05EED03

在这种情况下,十六进制序列与上述证书匹配。

于 2021-10-26T13:32:40.867 回答