可以在库中隐藏方法实现吗?

时间:2009-11-19 23:14:23

标签: iphone objective-c cocoa-touch xcode

我想知道是否可以从静态库的使用者那里隐藏库实现。

这个伟大的线程产生了一些关于静态库许可系统的问题:Licensing system for static library。我想使用的方案是:

  • 向消费者提供他们放入plist的许可证密钥
  • 部署了plist
  • 从密钥标识符生成强密钥,并与plist中的密钥匹配

这就是系统存在缺陷的原因:我需要运行一个算法(用于动态生成强密钥),然后输出一些字符串。问题是我必须包含要使用的库的头文件。此时,任何使用该库的人都可以进入实现阶段。如果我有一个名为checkLicense()的方法,那么该库的使用者可以进入该方法并查看如何生成强密钥。

另外,对于静态方法,我是否每次都运行密钥生成,因为没有任何状态?我可以使用单例并在每个静态方法调用中调用它?

我的主要问题是如果你有头文件,可以在静态库中看到实现。有没有隐藏实现的方法?

1 个答案:

答案 0 :(得分:2)

假设您创建的静态库是用Objective-C编写的,您可以使用的一种方法是在实现文件(而不是标题)中创建类的匿名类别。在该类别中,声明您的敏感方法,然后像平常一样在您的类中实现它们。这使得您无需在公共标头中公开这些方法。

例如,在SomeClass.m

@interface SomeClass (/*Secret stuff*/)
- (BOOL)validateRegistration:(NSData *)key;
@end


@implementation SomeClass

// Other methods....

- (BOOL)validateRegistration:(NSData *)key { /* ... */ }

@end

请注意,这是一个匿名类别,因为我没有给类别命名(这只是括号内的注释)。这使得您不必专门为该类别的实现声明一个单独的实现块,这有助于进一步隐藏这些方法。