我想知道是否可以从静态库的使用者那里隐藏库实现。
这个伟大的线程产生了一些关于静态库许可系统的问题:Licensing system for static library。我想使用的方案是:
这就是系统存在缺陷的原因:我需要运行一个算法(用于动态生成强密钥),然后输出一些字符串。问题是我必须包含要使用的库的头文件。此时,任何使用该库的人都可以进入实现阶段。如果我有一个名为checkLicense()的方法,那么该库的使用者可以进入该方法并查看如何生成强密钥。
另外,对于静态方法,我是否每次都运行密钥生成,因为没有任何状态?我可以使用单例并在每个静态方法调用中调用它?
我的主要问题是如果你有头文件,可以在静态库中看到实现。有没有隐藏实现的方法?
答案 0 :(得分:2)
假设您创建的静态库是用Objective-C编写的,您可以使用的一种方法是在实现文件(而不是标题)中创建类的匿名类别。在该类别中,声明您的敏感方法,然后像平常一样在您的类中实现它们。这使得您无需在公共标头中公开这些方法。
例如,在SomeClass.m
:
@interface SomeClass (/*Secret stuff*/)
- (BOOL)validateRegistration:(NSData *)key;
@end
@implementation SomeClass
// Other methods....
- (BOOL)validateRegistration:(NSData *)key { /* ... */ }
@end
请注意,这是一个匿名类别,因为我没有给类别命名(这只是括号内的注释)。这使得您不必专门为该类别的实现声明一个单独的实现块,这有助于进一步隐藏这些方法。