【问题标题】:Check for "Release Build" at runtime在运行时检查“发布构建”
【发布时间】:2012-09-06 13:47:26
【问题描述】:

我正在为我开发的组件创建一个 .framework(或静态库),并希望将其出售给第三方。

我正计划添加一些代码来保护框架免遭未经授权的重复使用、重新分发或转售。

我认为实现这一点的一个好方法是要求购买者告诉我将使用框架的应用程序的捆绑 ID 是什么,将其作为 NSString 属性保存在框架中并创建一个方法来检查在运行时,如果使用框架的应用的包 ID 匹配。

不过,我还希望免费试用该框架。因此,我只想在包含应用程序在发布模式下编译时启用捆绑 ID 检查,或者当应用程序在最终用户设备上运行时,在开发沙箱之外。

当然,我不能使用任何依赖于项目文件中设置的变量或宏的方法,因为它们太容易被利用。我需要在运行时进行...并且无需购买者采取任何行动。

有没有办法在运行时检查应用程序是否在开发人员沙箱中运行?或者,如果应用是使用发布构建配置文件构建的?

谢谢!

【问题讨论】:

标签: iphone objective-c ios xcode


【解决方案1】:

过去,我在免费评估中实现了一个简单的定时炸弹到期,但不能免费部署组件。该库将在某个日期 X 之前运行,然后停止工作。用户只需重新下载最新的位以继续评估。一个付费订单,一个没有定时炸弹的下载链接或一个带有数字签名许可证的许可证文件一起禁用了定时炸弹逻辑。依赖运行时环境特征充其量是脆弱的。

【讨论】:

  • 您好丹尼尔,感谢您的意见。但是,您的解决方案不会阻止获得“解锁”版本的用户重复使用、转售或重新分发您的组件...
  • 如果您利用签名的许可证文件概念,它会在一定程度上缓解。没有万无一失的许可证计划。此外,泄露的副本实际上可能会通过充当营销工具来为您带来更多销售……就像盗版 MS Office/Windows 对 MS 所做的那样。
  • Daniel,您能否指点我一些说明如何实施已签名许可证文件概念的文档或在线资源?
  • 一般来说,您会希望使用非对称签名算法(数字签名算法)来生成使用您的私钥签名的许可证文件(以 XML 或其他格式)。您的应用程序/组件/任何内容将读取已签名的许可证文件,并根据您的公钥进行验证。我还建议在许可证文件中添加一些内容,以标识您将其颁发给谁。许可证文件是纯文本,但如果更改,签名验证过程将失败。我已经在一个 Windows 应用程序中实现了这一点,以通过 C 驱动器卷 ID 将许可证密钥绑定到单台机器。
  • 我们以不同的方式解决了这个问题:我们添加了一个名为“license”的公共属性,并且在框架本身中我们放置了一些逻辑来生成基于 Bundle ID 的加密字符串。如果它与许可证字符串不匹配,则框架将停止工作。我们在框架中包含了一个通用许可证,它是从我们已经拥有的捆绑 ID 生成的。每个人都可以毫无问题地尝试该框架,但如果他们想在 App Store 上发布应用程序,他们必须为其捆绑 ID 申请许可证。这是最终结果:github.com/flubbermedia/FMStickerEngine
猜你喜欢
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2018-11-23
  • 2012-07-27
  • 1970-01-01
相关资源
最近更新 更多