前因:

  因为公司上架前后的原因,外围的平台层部分提前上线,而我做的功能部分需要晚一些上线,是单独的一个工程在其他仓库开发。

我的资源文件放在Bundle中。合到主工程中,资源文件不用改,直接拖进去。倒是代码部分因为重名较多,花了大半天时间来改名字。

  过一段时间,需要将我们的代码以Framework的形式,放入另一个项目的平台层中。我的做法是,将代码打包进入Framework,然后资源文件在Bundle中,两部分拖进平台层,资源文件调用等等也都不用改。

因为Android就只有一个aar文件导入平台层。所以对方提出希望我也只提供一个Framework 包。

所以现在就需要改资源文件调用方式了。

以前的做法很简单:

  1. NS_INLINE UIImage * UIResourceBundleSubMove(NSString *strPath){
  2. return [UIImage imageNamed:[NSString stringWithFormat:@"XXXX.bundle/images/move/%@.png",strPath]];
  3. }

现在就是

  1. #define FrameworkPath [[NSBundle mainBundle] pathForResource:@"VivenSDK" ofType:@"framework"]
  2. #define FrameworkBundle [NSBundle bundleWithPath:FrameworkPath]
  3. #define VivienBundle [NSBundle bundleWithPath:[FrameworkBundle pathForResource:@"Vivien" ofType:@"bundle"]]
  4. #define UIResourceBundleSubMove(imageName) [UIImage imageNamed:[NSString stringWithFormat:@"images/move/%@",imageName] inBundle:VivienBundle compatibleWithTraitCollection:nil]
  5.  
  6. NS_INLINE UIImage * UIResourceBundleMore(NSString *imageName){
  7. return [UIImage imageNamed:[NSString stringWithFormat:@"images/main/%@",imageName] inBundle:VivienBundle compatibleWithTraitCollection:nil];
  8. }

然后再把Framework再拖一份到主工程的Copy Bundle Resources

如果报错,可以通过代码的方式查看报错:

  1. NSString *path = [[NSBundle mainBundle] pathForResource:@"VivienSDK" ofType:@"framework"];
  2. NSLog(@"path = %@", path);
  3.  
  4. NSBundle *myBundle = [NSBundle bundleWithPath:path];
  5. NSLog(@"myBunlde = %@", myBundle);
  6.  
  7. NSBundle *vivienResBundle= [NSBundle bundleWithPath:[myBundle pathForResource:@"Vivien" ofType:@"bundle"]];
  8.  
  9. NSLog(@"vivienResBundle = %@", vivienResBundle);
  10.  
  11. UIImage *iconImage = [UIImage imageNamed:[NSString stringWithFormat:@"Images/%@",@"icon_friend"] inBundle:vivienResBundle compatibleWithTraitCollection:nil];
  12. NSLog(@"iconImage = %@", iconImage);

现在发现这样有问题,Archive的时候会报错:

  1. Failed to generate distribution items with error: Error Domain=DVTMachOErrorDomain Code= "Found an unexpected Mach-O header code: 0x72613c21"
  2. UserInfo={NSLocalizedDescription=Found an unexpected Mach-O header code: 0x72613c21, NSLocalizedRecoverySuggestion=}

因为,静态的framework不能打包进bundle。静态库会编译进二进制文件的。静态framework里面的资源需要重新打包一个bundle。工程里面链接下framework,加入资源bundle就ok了

如果改为动态库可以成功;

1,Sandbox会验证动态库的签名,所以如果是动态从服务器更新的动态库,是签名不了的,因此应用插件化、软件版本实时模块升级等功能在iOS上无法实现;

http://www.jianshu.com/p/f2ffe8325519

如何在Framework中读取bundle中的Res的更多相关文章

  1. ASP.NET Core 5.0 中读取Request中Body信息

    ASP.NET Core 5.0 中读取Request中Body信息 记录一下如何读取Request中Body信息 public class ValuesController : Controller ...

  2. 从SQL查询分析器中读取EXCEL中的内容

    很早以前就用sql查询分析器来操作过EXCEL文件了. 由于对于excel公式并不是很了解,所以很多时候处理excel中的内容,常常是用sql语句来处理的.[什么样的人有什么样的办法吧 :)] 今又要 ...

  3. 接口测试中读取excel中的请求数据含有中文问题,UnicodeEncodeError: 'latin-1' codec can't encode character '\u5c0f' in position

    错误信息:UnicodeEncodeError: 'latin-1' codec can't encode character '\u5c0f' in position 31: Body ('小') ...

  4. 在java中读取文件中的内容

    package shi; import java.io.*; public class wenjianIO { public static void main(String agrs[]){ File ...

  5. Java中读取配置文件中的内容,并将其赋值给静态变量的方法

    应用场景 项目开发中某个功能需要抽取成方法写成一个工具类,提供给别人使用.写过工具类的人都知道,工具类中的方法一般都是静态方法,可以直接使用类名点方法名调用, 使用很方便,比如判断某个对象是否为空的方 ...

  6. [转] JAVA中读取网络中的图片资源导入到EXCEL中

    需求 导出人员的信息并且加上人员的照片至EXCEL中 完整的代码 //创建一个表格 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb ...

  7. 解决在Filter中读取Request中的流后,后续controller或restful接口中无法获取流的问题

    首先我们来描述一下在开发中遇到的问题,场景如下: 比如我们要拦截所有请求,获取请求中的某个参数,进行相应的逻辑处理:比如我要获取所有请求中的公共参数 token,clientVersion等等:这个时 ...

  8. 解决在Filter中读取Request中的流后, 然后再Control中读取不到的做法

    摘要: 大家知道, StringMVC中@RequestBody是读取的流的方式, 如果在之前有读取过流后, 发现就没有了. 我们来看一下核心代码: filter中主要做的事情, 就是来校验请求是否合 ...

  9. verilog中读取文件中的字符串_modelsim高级仿真

    今天给个程序大家玩玩.因为今天遇到一个问题,就是要向UART发送指令,指令非常多,都是字符串.一直copy 函数 UART ("COMM_1");  UART ("COM ...

随机推荐

  1. unity3d-代码控制游戏角色控制器移动

    先上一个gif看看效果.因为图片大小限制.所以录制的比较小.个人认为效果比较牵强.特别是里面的逻辑代码. 不过我还是认为一切是为了先实现,因为我是刚接触的新手. 工程结构图 这次实现的效果是: 1:摄 ...

  2. 关于python中selector问题

    在做大型的爬虫时,re表达式往往效率不高,scrapy框架为爬虫提供了很好的爬虫方法 scrapy提取数据时有一套自己的机制,即selectors,一般通过特定的XPath,或者特定 的CSS表达式来 ...

  3. C语言---选择结构和循环结构

    C语言的两种选择语句,1) if语句; 2) switch语句; 在if判断语句中,一般使用关系表达式. 关系运算符: <.<=.>.>=.==.!= 关系表达式:用关系运算符 ...

  4. wordpress学习(四)---url伪静态简单了解

    在page-url.php页面做测试 <h2>url伪静态</h2> 接收到的pagename参数是:<? echo $wp_query->query_vars[' ...

  5. Yii2 Restful api分页

  6. v1版本

    <?php use yii\helpers\Html; use yii\helpers\Url; use yii\widgets\DetailView; use yii\grid\GridVie ...

  7. let的使用 优先于闭包

    let声明的变量在{}中使用,变量的作用域限制在块级域中 举例:使用js动态给ul添加li对象并点击第几项,显示当前点击是第几个 错误代码 window.onload = function(){ va ...

  8. 理解Sql Server 事务隔离层级(Transaction Isolation Level)

    关于Sql Server 事务隔离级别,百度百科是这样描述的 隔离级别:一个事务必须与由其他事务进行的资源或数据更改相隔离的程度.隔离级别从允许的并发副作用(例如,脏读或虚拟读取)的角度进行描述. 隔 ...

  9. 有道词典翻译(携带请求头和post参数请求)

    一.静态爬取页面信息 有道翻译网址:http://fanyi.youdao.com/ 在翻译中输入python 找到接口和请求的方式 参数是From Data类型 需要把参数数据转换为字典, 复制粘贴 ...

  10. body中相关标签

    一.字体标签 字体标签包含:h1~h6.<font>.<u>.<b>.<strong><em>.<sup>.<sub> ...