关于iPhone:是否可以在库中隐藏方法的实现?

Possible to hide method implementation in library?

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

这个伟大的话题引发了关于静态库许可系统的一些问题:静态库许可系统。我想使用的方案是:

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

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

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

我的主要问题是,如果您具有头文件,则可以在静态库中看到实现。有什么隐藏实现的方法吗?


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

例如,在SomeClass.m

1
2
3
4
5
6
7
8
9
10
11
12
@interface SomeClass (/*Secret stuff*/)
- (BOOL)validateRegistration:(NSData *)key;
@end


@implementation SomeClass

// Other methods....

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

@end

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