有没有办法检测正在运行的 macOS 应用程序是否来自 Mac App Store?

Spa*_*Dog 1 macos cocoa macos-high-sierra

我有一个我的应用程序,它通过我自己的网站发布在 Mac App Store 及其外部。

我需要在运行时检测正在运行的版本,以便我可以在代码中做出一些决定。

有办法检测到吗?我该如何区分呢?有没有办法知道应用程序是否经过 App Store 签名?


编辑:我找到了这个库,但这不好,因为如果收据丢失,它就会告诉应用程序不是来自应用程序商店。但收据可能因其他原因丢失。没有收据并不是一个充分的理由。

Gor*_*son 5

我看到有两种方法可以做到这一点:

  1. 制作一个编译时标志。一种编译方式是提交到 App Store,另一种方式是在 App Store 之外分发。
  2. 不只是检查应用程序的代码签名有效性(如您找到的库所做的那样),而是调用SecCodeCopySigningInformation来获取签名详细信息,并查看kSecCodeInfoCertificates 数组以查看它是否包含您的开发人员 ID 证书或“Apple Mac OS 应用程序签名”证书由应用商店使用。

IMO 第二种选择明显更加复杂和脆弱;例如,如果 Apple 更改了 App Store 应用程序的签名方式,您的代码可能会损坏。我会选择第一个选项。