静态库上的 xib 文件
Xib file on static library
我正在接手一个我没有开始的项目,而且我还是个大三学生,所以我需要一些帮助来理清思路。
我正在为 iOS 7.0 及更高版本开发一个库。
这个库然后通过 cocoapods 分发。
我已经构建了一个自定义视图以及我如何拥有一个包含它的 .xib 文件。
它在我的开发应用程序中完美运行(因为我直接使用代码),但是当我在我的暂存应用程序(通过本地 pod 加载库)中测试它时,我得到
NSInternalInconsistencyException Could not load NIB in bundle: 'NSBundle </Users/Jack/Library/Developer/CoreSimulator/Devices/899B54FC-8A37-4182-9D89-109251B58555/data/Containers/Bundle/Application/36A3B225-AEF2-42B7-8AEC-5D930F4C4BCA/StagingApp.app> (loaded)' with name 'CheckBoxWithText''
.xib 文件处于复制文件构建阶段,是我用来构建库的目标的一部分。
我正在像这样加载 xib
[[NSBundle mainBundle] loadNibNamed:@"CheckBoxWithText" owner:self options:nil];
但是一旦组件加载到屏幕上它就会崩溃。
有人说要使用你的图书馆的捆绑包,但我认为我的图书馆没有标识符(在信息上看不到)。
我尝试使用
[[NSBundle bundleWithIdentifier:@"com.company.project"] loadNibNamed:@"CheckBoxWithText" owner:self options:nil];
但它不加载任何内容。
我花了一个下午阅读可能的解决方案,但现在我脑子里一片混乱。
静态库(比如我的)不应该包含像 xib 这样的资源,但我正在用它打包一些图像。我在这里遗漏了什么吗?
我读过 tutorial 一篇关于一个人使用 budle 目标实现此目标的文章,但我还没有真正理解他是如何做到的以及我将如何使用该目标,因为我应该使用我的总目标构建库。
如果不是因为我不能在 iOS7.0.
上使用它,动态框架将解决问题
我是以编程方式构建布局的唯一选择吗?
或者我只是遗漏了一些东西并且可以打包 .xib 文件?
当您在 .podspec
中使用 resources
指定 .xib
文件时,CocoaPods 似乎无法获取这些文件。使用 resource_bundles
可以正常工作。
所以 .podspec
将显示为:
s.resource_bundles = { 'CheckBoxWithText' => ['CheckBoxWithText.xib'] }
Nib 将像这样加载:
NSBundle* bundle = [NSBundle bundleForURL:[NSBundle.mainBundle URLForResource:@"CheckBoxWithText"
withExtension:@"bundle"]];
NSArray* nib = [bundle loadNibNamed:@"USACheckBoxWithText" owner:self options:nil];
现在还有一个bug in CocoaPods which prevents asset catalogs to be loaded from resource_bundles
。您现在应该避免使用资产目录。
请注意,如果您使用 iOS 8 作为最低限度并在 Swift 中开发您的 Pod,这两个错误都会得到解决。
我正在接手一个我没有开始的项目,而且我还是个大三学生,所以我需要一些帮助来理清思路。 我正在为 iOS 7.0 及更高版本开发一个库。 这个库然后通过 cocoapods 分发。
我已经构建了一个自定义视图以及我如何拥有一个包含它的 .xib 文件。 它在我的开发应用程序中完美运行(因为我直接使用代码),但是当我在我的暂存应用程序(通过本地 pod 加载库)中测试它时,我得到
NSInternalInconsistencyException Could not load NIB in bundle: 'NSBundle </Users/Jack/Library/Developer/CoreSimulator/Devices/899B54FC-8A37-4182-9D89-109251B58555/data/Containers/Bundle/Application/36A3B225-AEF2-42B7-8AEC-5D930F4C4BCA/StagingApp.app> (loaded)' with name 'CheckBoxWithText''
.xib 文件处于复制文件构建阶段,是我用来构建库的目标的一部分。
我正在像这样加载 xib
[[NSBundle mainBundle] loadNibNamed:@"CheckBoxWithText" owner:self options:nil];
但是一旦组件加载到屏幕上它就会崩溃。
有人说要使用你的图书馆的捆绑包,但我认为我的图书馆没有标识符(在信息上看不到)。
我尝试使用
[[NSBundle bundleWithIdentifier:@"com.company.project"] loadNibNamed:@"CheckBoxWithText" owner:self options:nil];
但它不加载任何内容。
我花了一个下午阅读可能的解决方案,但现在我脑子里一片混乱。
静态库(比如我的)不应该包含像 xib 这样的资源,但我正在用它打包一些图像。我在这里遗漏了什么吗?
我读过 tutorial 一篇关于一个人使用 budle 目标实现此目标的文章,但我还没有真正理解他是如何做到的以及我将如何使用该目标,因为我应该使用我的总目标构建库。
如果不是因为我不能在 iOS7.0.
上使用它,动态框架将解决问题我是以编程方式构建布局的唯一选择吗?
或者我只是遗漏了一些东西并且可以打包 .xib 文件?
当您在 .podspec
中使用 resources
指定 .xib
文件时,CocoaPods 似乎无法获取这些文件。使用 resource_bundles
可以正常工作。
所以 .podspec
将显示为:
s.resource_bundles = { 'CheckBoxWithText' => ['CheckBoxWithText.xib'] }
Nib 将像这样加载:
NSBundle* bundle = [NSBundle bundleForURL:[NSBundle.mainBundle URLForResource:@"CheckBoxWithText"
withExtension:@"bundle"]];
NSArray* nib = [bundle loadNibNamed:@"USACheckBoxWithText" owner:self options:nil];
现在还有一个bug in CocoaPods which prevents asset catalogs to be loaded from resource_bundles
。您现在应该避免使用资产目录。
请注意,如果您使用 iOS 8 作为最低限度并在 Swift 中开发您的 Pod,这两个错误都会得到解决。