【问题标题】:How to find out whether iOS app was signed with a development or a distribution certificate?如何确定 iOS 应用程序是使用开发证书还是分发证书签名的?
【发布时间】:2017-09-14 12:10:12
【问题描述】:

我想知道 iOS 应用是否可以查明它是使用开发证书还是分发证书签名的。

我发现 iOS 应用可以通过访问 bundle 的信息字典来获取一些关于自身的元信息。例如,可以通过从字典中读取 CFBundleVersion 键来检索版本。是否存在类似的获取签名证书信息的方法?

我之所以问,是因为 APNS。当我的应用程序向我的云服务器注册 APNS 设备令牌时,云服务器需要知道是否需要通过调用 Apple 的生产 APNS 服务器(“api.push.apple.com”)或开发 APNS 服务器来创建该令牌的推送消息“api.development.push.apple.com”。

【问题讨论】:

  • APNS 设置存储在权利中,而不是签名证书中。您查看过codesign 工具的源代码吗?
  • 我没有查看协同设计工具的源代码。你关于权利的评论很有趣。我看到我的项目包含一个扩展名为“.entitlements”的文件。该文件指定键“APS Environment”的值为“development”。因此,从应用程序访问该信息也可以解决我的问题。我(尚)不知道如何从我的 Swift 代码中以编程方式获取该信息,但感谢您的提示!
  • 在代码签名构建阶段,该值设置为developmentproduction。这取决于代码签名证书和配置文件。
  • 以下是在运行时读取应用权利的分步说明:davedelong.com/blog/2018/01/10/reading-your-own-entitlements

标签: ios apple-push-notifications code-signing-certificate


【解决方案1】:

有关 APNS 服务器的信息位于二进制文件代码签名部分的权利中。基本步骤是:

  1. dladdr 获取二进制文件的加载地址。
  2. 循环遍历LC_CODE_SIGNATURE 的所有 Mach-O 加载命令
  3. 解析代码签名命令的方式与codesign 工具相同。它在 opensource.apple.com 上开源。
  4. 解析权利 plist-data。
  5. 提取 aps-environment 值。

这与在二进制文件上运行命令codesign -d --entitlements :- 基本相同。

【讨论】:

    猜你喜欢
    • 2020-05-08
    • 1970-01-01
    • 2013-01-16
    • 2017-10-15
    • 1970-01-01
    • 2012-06-17
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多