Iphone 检查是否有“错误”;“发布版本”;运行时

Iphone 检查是否有“错误”;“发布版本”;运行时,iphone,objective-c,ios,xcode,Iphone,Objective C,Ios,Xcode,我正在为我开发的组件创建一个.framework(或一个静态库),我想把它卖给第三方 我计划添加一些代码来保护框架不被未经授权的重用、再分发或再销售 我认为实现这一点的一个好方法是要求购买者告诉我将使用框架的应用程序的捆绑ID是什么,将其保存在框架中作为NSString属性,并创建一个方法,在运行时检查使用框架的应用程序的捆绑ID是否匹配 不过,我也想让这个框架免费试用。因此,我只想在包含应用程序的应用程序在发布模式下编译时,或者当应用程序在开发沙箱之外的最终用户设备上运行时,才启用bundle

我正在为我开发的组件创建一个.framework(或一个静态库),我想把它卖给第三方

我计划添加一些代码来保护框架不被未经授权的重用、再分发或再销售

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

不过,我也想让这个框架免费试用。因此,我只想在包含应用程序的应用程序在发布模式下编译时,或者当应用程序在开发沙箱之外的最终用户设备上运行时,才启用bundle ID检查

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

有没有办法在运行时检查应用程序是否在开发人员沙箱中运行?或者如果应用程序已使用发布版本配置文件生成


谢谢

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

嗨,丹尼尔,谢谢你的投入。但是,您的解决方案不会阻止获得“解锁”版本的用户重用、转售或重新分发您的组件……如果您利用签名许可文件的概念,它会在一定程度上减轻影响。不存在傻瓜式的许可证计划。另外,泄露的副本可能会通过充当营销设备而实际上为您带来更多的销售……就像盗版的MS Office/Windows为Daniel女士所做的那样,您能给我指一些说明如何实现签名许可文件概念的文档或在线资源吗?一般来说,您会希望使用非对称签名算法(数字签名算法)生成许可证文件(XML或其他格式),使用您的私钥进行签名。您的应用程序/组件/任何内容都将读取已签名的许可证文件,并根据您的公钥进行验证。我还建议在许可证文件中添加一些内容,以标识您向谁颁发了许可证。许可证文件为纯文本,但如果更改,将无法通过签名验证过程。我已建议我们在Windows应用程序中使用此方法,通过C驱动器卷ID将许可证密钥绑定到一台计算机。我们用另一种方法解决了这个问题:我们添加了一个名为“license”的公共属性在框架本身中,我们加入了一些逻辑,根据捆绑包ID生成加密字符串。如果它与许可证字符串不匹配,框架将停止工作。我们在框架中包含了一个通用许可证,该许可证是根据我们已经拥有的捆绑包ID生成的。每个人都可以毫无问题地尝试该框架,但如果他们想发布在app Store上安装应用程序时,他们必须为其捆绑ID申请许可证。以下是最终结果:我检查了它的可能副本,但它没有给出有效的问题解决方案…@BlackFrog我找到了这个答案:()可能有效…我正在检查它的有效性。