如何处理静态框架依赖项

时间:2016-06-19 03:45:51

标签: ios objective-c static-libraries static-linking ios-frameworks

我正在尝试构建Objective-C静态框架,但遇到了层次结构/组织问题。

对于这个问题,假设我有3个类,classA,classB和classC。 classB和classC是classA的子类。 classB和classC都需要特殊的资源文件。

#import "classB.h"
#import "classC.h"
@implement classA

  + (classA)factoryMethodCreateType:(NSString *)type {
      classA a;
      if ([type isEqualToString:@"classB"]) {
        a = [[classB alloc] init];
      } else if ([type isEqualToString:@"classC"]) {
        a = [classC alloc] init];
      }
      return a;
  }

@end

我想静态打包框架,classB.framework和classC.framework,这样当用户想要使用classB时,他们不需要包含classC及其资源文件。此外,用户可以使用classA作为使用任一框架的入口点。

我假设我只创建classB.framework(包括classA和classB)和classC.framework(包括classA和classC),当用户想要使用这两种类型并包含两个框架时,用户将面对重复的符号?

处理这种情况的最佳方法是什么?以下方法是最好的方法吗?

将classA的实现更改为动态创建classB或classC,而不包括其头文件。

构建3个框架而不是2个:classA.framework,classB.framework,classC.framework。当用户想要使用classB时,用户应该包括classA.framework和classB.framework。

@implement classA
+ (classA)factoryMethodCreateType:(NSString *)type {
    classA a;

    id obj = [NSClassFromString(type) alloc];
    a = objc_msgSend(obj, @selector(init));
    return a;
}

@end

0 个答案:

没有答案