Objective c 目标C框架保护

Objective c 目标C框架保护,objective-c,frameworks,Objective C,Frameworks,我已经开发了许多框架,我想与我的应用程序一起发布。我不希望其他人能够使用这些框架,但我已经看到了诸如类转储之类的实用程序,它们可以轻松地获取头文件 我的问题是,如何使我的框架更安全?我知道他们永远不会100%安全,但有没有一些好的一般提示可以遵循 谢谢 您可以使用静态库来链接应用程序,而不是框架。但是,如果您想发布框架,可以使用代码观察器使库更难使用 编辑: 这篇文章对一个基本的观点有一个非常简单的描述。 市场上有这样的产品,但价格昂贵 简言之,不用麻烦了。Objective-C运行时的本质是

我已经开发了许多框架,我想与我的应用程序一起发布。我不希望其他人能够使用这些框架,但我已经看到了诸如类转储之类的实用程序,它们可以轻松地获取头文件

我的问题是,如何使我的框架更安全?我知道他们永远不会100%安全,但有没有一些好的一般提示可以遵循


谢谢

您可以使用静态库来链接应用程序,而不是框架。但是,如果您想发布框架,可以使用代码观察器使库更难使用

编辑:

这篇文章对一个基本的观点有一个非常简单的描述。


市场上有这样的产品,但价格昂贵

简言之,不用麻烦了。Objective-C运行时的本质是有大量可用的元数据

现实情况是,很少有人选择您的框架并尝试嵌入/使用它

请注意,代码混淆器实际上工作得不是很好;仍然有相当多的元数据必须公开。您可以这样做,但一般来说,如果不解决实际问题,调试/崩溃分析会变得非常困难

虽然我怀疑define someSelector mmmrrrggglll的答案并没有经过太多测试,但我看到其他人已经给你指出了困惑的道路

当你走下这条路时,我想我错过了很多:

如果使用KVO/KVC,请确保对addObserver:*等的所有调用都进行了模糊处理

如果您的目标是MacOSX,也不要忘记绑定

Interface Builder的xib文件通常包含对实例变量和/或属性和/或方法的引用。别忘了那些

任何使用运行时内省的东西也需要混淆

确保你没有混淆任何与系统框架相关的东西;不想子类化NSView,比如说,然后混淆drawRect:或initWithFrame:

在某些情况下,Info.plist可以引用类名和入口点。也不要弄乱那些东西

另外,确保@selector的每一次使用都被正确地混淆;没有什么比针对不再存在的方法设置NSTimer触发更好的了

确保您的模糊处理计划还包括为崩溃日志创建非模糊处理程序所需的工程工作

你还想考虑如何调试一个生产二进制文件;假设堆栈跟踪将被混淆。b mmmrrrggglll ftw

如果您的框架具有符号导出控制,请确保也混淆它们!请记住,在某些情况下,架构和编译器之间创建符号的方式是不同的


我想坚持我的框架,但还有什么代码观察家?这是怎么做到的?谢谢你的回答,非常感谢!谢谢-类转储的想法吓了我一跳,因为我在框架中做了很多工作,真的不希望它们被重用。未声明的选择器警告将有助于捕获那些未模糊的选择器,特别是在您设置NSTimer的特定示例中。@Peter True,尽管您必须确保您的原始选择器不是合理地出现在其他地方的东西。例如@SelectorMySaucytimerFireed:vs.@SelectorTimerFireed:。我想你刚刚打破了我的讽刺检测器+1.