如何在iOS中的静态库中添加xib文件

6 xcode static-libraries ios

我试图在静态库中添加xib文件或任何其他视图控制器文件,但我不能这样做.你能帮我么?

如果可能请添加完整的源代码

他们是第一个视图上的按钮.当点击该按钮时,新的视图控制器会出现一些东西(比如改变背景颜色).如何为此创建静态库?这样我可以在另一个项目中使用它?

提前致谢

jac*_*ash 7

如果要在构建静态库时使用接口构建器构建接口,则需要创建一个包并将其与库一起分发.

在Xcode中:

  1. 文件>新建>目标
  2. 从OS X Framework和Library部分选择"Bundle"
  3. 填写详细信息.捆绑框架应该是核心基础.

然后,您需要在框架的同时编译捆绑包.将包添加到框架的"Target Dependencies"构建阶段.

当你制作你的xib时,你就会创建你创建的新包.

然后,当您在派生数据目录中编译框架时,在框架二进制文件旁边,您将找到已编译的包.您将此与框架二进制文件一起提供给您的第三方.

那么如何在代码中引用此包呢?在iOS捆绑包中无法加载,您的捆绑包实际上将在第三方的iOS应用程序主捆绑包内.您可以在NSBundle上创建一个类别,以便从代码中方便地访问您的包:

@interface NSBundle (mybundle)
+(NSBundle *)myBundle;
@end

@implementation NSBundle (mybundle)

static NSBundle * _myBundle;

+(NSBundle *)myBundle{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{

        NSBundle * mainBundle = [NSBundle mainBundle];
        NSString * pathToMyBundle = [mainBundle pathForResource:@"myBundle" ofType:@"bundle"];

        NSAssert(pathToMyBundle, @"bundle not found", nil);

        _myBundle = [NSBundle bundleWithPath:pathToMyBundle];
    });

    return _myBundle;
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在代码中访问您的bundle以加载xib,如下所示:

UIViewController * controller = [[UIViewController alloc] initWithNibName:nil bundle:[NSBundle myBundle]];
Run Code Online (Sandbox Code Playgroud)

请记住,如果在框架代码中使用类别,则需要确保框架使用者将-ObjC(或者-all_load如果不使用最新的Xcode)"其他链接器标志"添加到他们的项目中


Max*_*eod 4

严格来说,不能将 Xib 添加到静态库是正确的。不过,也有解决方法。Matt Galloway 的 iOS Library With Resources 教程将向您展示如何做到这一点。

请参阅带有资源的 iOS 库