代码之家  ›  专栏  ›  技术社区  ›  4thSpace wkw

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

  •  0
  • 4thSpace wkw  · 技术社区  · 15 年前

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

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

    • 给消费者一个他们放入plist的许可证密钥
    • PList已部署
    • 强键是从bundle标识符生成的,并与plist中的键匹配。

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

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

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

    1 回复  |  直到 15 年前
        1
  •  2
  •   Marc W    15 年前

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

    例如,在 SomeClass.m :

    @interface SomeClass (/*Secret stuff*/)
    - (BOOL)validateRegistration:(NSData *)key;
    @end
    
    
    @implementation SomeClass
    
    // Other methods....
    
    - (BOOL)validateRegistration:(NSData *)key { /* ... */ }
    
    @end
    

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