如果您想在构建静态库时使用界面构建器构建界面,您需要制作一个捆绑包并将其与您的库一起分发。
在 Xcode 中:
- 文件>新建>目标
- 从 OS X 框架和库部分选择“Bundle”
- 填写详细信息。 bundle 框架应该是核心基础。
然后你需要在编译你的框架的同时编译你的包。将包添加到框架的“目标依赖项”构建阶段。
当你制作你的 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;
}
然后您可以在代码中访问您的包以加载 xib,如下所示:
UIViewController * controller = [[UIViewController alloc] initWithNibName:nil bundle:[NSBundle myBundle]];
请记住,如果您在框架代码中使用类别,则需要确保您的框架使用者将-ObjC(或-all_load,如果不使用最近的 Xcode)“其他链接器标志”添加到他们的项目中