有没有办法检测 macOS 应用 运行 是否来自 Mac App Store?

Is there a way to detect if a macOS app running is from the Mac App Store or not?

我有这个应用程序,它在 Mac App Store 内外发布,来自我自己的网站。

我需要在 运行 时检测 运行ning 是什么版本,这样我就可以在代码中做一些决定。

有没有办法检测到?我怎样才能区分它?有没有办法知道该应用程序是否已为 App Store 签名?


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

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

  1. 做一个compile-time旗帜。以一种方式编译它以提交到 App Store,另一种方式以在 App Store 之外分发。
  2. 与其仅仅检查您应用的代码签名有效性(如您找到的库所做的那样),不如调用 SecCodeCopySigningInformation to get signature details, and look at the kSecCodeInfoCertificates array 查看它是否包含您的 Developer ID 证书或应用使用的 "Apple Mac OS Application Signing" 证书商店。

在我看来,第二种选择要复杂得多,也更脆弱;例如,如果 Apple 更改他们签署 App Store 应用程序的方式,您的代码可能会中断。我会选择第一个选项。