在framework中打包xib

本文详细介绍了如何在iOS项目中将XIB文件正确地加载到Framework内,并解决了资源路径变更导致的问题。同时,提供了调整图片资源加载方式的具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

废话不多说,直接上图

1、Copy Bundle Resources 中加入相关xib

2、这里是重点,调用的时候不能直接写

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. [[NSBundle mainBundle] loadNibNamed:@"yourXibName" owner:nil options:nil]  

而要加入framework中的路径,否则在调用的时候会报找不到xib文件(路径不同)的错,继而crash

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. [[NSBundle mainBundle] loadNibNamed:@"yourframework.framework/yourXibName" owner:nil options:nil]  

3、编译完成后可以看到在framework目录下生成了对应的nib文件(xib编译之后生成nib,详情自己搜吧)



4、然后在项目配置的时候,需要把framework加入到Copy Bundle Resources 中,这一步也是重点



不过这样会增加整个包的大小

因此个人认为还是使用.a+bundle的形式更为妥当

另外如果在xib中直接加载了图片资源,则需要使用代码进行重新设置,因为无论是framework的形式还是.a+bundle的形式,资源目录都发生了改变,不再是从.app的根目录下去取资源,而是在.app目录下的bundle或者framework目录中取,因此加载资源的方式也需要进行更改

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. + (NSString *)pathForResource:(NSString *)name ofType:(NSString *)type {  
  2.     NSBundle *bkBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:YOUR_BUNDLE_NAME ofType:@"bundle"]];  
  3.     NSString* path = [bkBundle pathForResource:name ofType:type];  
  4.     return path;  
  5. }  

还有一个蛋疼的地方需要注意,在xcode6下,combine_hidpi_images的默认设置项为yes,需要手动改为no,否则bundle中的png图片经过编译打包会变成tiff的文件,进而导致对应图片找不到


From: http://blog.youkuaiyun.com/xyxjn/article/details/42527341


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值