【问题标题】:Is there a way to detect if a macOS app running is from the Mac App Store or not?有没有办法检测正在运行的 macOS 应用程序是否来自 Mac App Store?
【发布时间】:2018-08-27 09:46:33
【问题描述】:

我的这个应用程序在我自己的网站上分布在 Mac App Store 和外部。

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

有没有办法检测到呢?我该如何区分呢?有没有办法知道应用是否已为 App Store 签名?


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

【问题讨论】:

  • 您能否说出导致收据丢失的其他原因?收据验证是防止破解或将应用程序复制给其他用户的标准预防措施

标签: macos cocoa macos-high-sierra


【解决方案1】:

我看到了两种方法:

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

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

【讨论】:

  • 谢谢,我会选择#1。正如你所说的#2太脆弱了。谢谢。
  • 第一次启动应用时可能会丢失收据。我经常看到。 Apple 通过提供强制收据刷新的机制来承认这一点。请参阅 SKReceiptRefreshRequest。
猜你喜欢
  • 2011-06-15
  • 2013-10-24
  • 2012-06-03
  • 1970-01-01
  • 2020-10-25
  • 2018-08-18
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多