iOS打包静态库的流程在网上一搜一大把,但是很少看到同时把资源文件带上的(毕竟打包的静态库一般都专做业务逻辑,很少掺杂视图)。正好这次遇到了这个问题,就来说说目前打包过程中遇到的坑吧
资源文件不参与编译的问题
虽说这是废话。。。但是还是提提,资源文件不会编译成二进制的文件(如果可以那就可以偷懒了,然而这样包肯定又更大,真是难以取舍)。即使在项目中的Copy Bundle Resource中强行弄进去也不会有任何变化。。。然后我能想到的办法就只有一个了,打包成bundle文件
打包成bundle之后图片找不到的问题
其实。。。这个正常的想想,光是打包之后代码也不改,怎么找的到原来的图片。。。原本我的代码里加载image用的是imageNamed
方法,将资源文件打包之后就不得不在图片名前加个bundle的路径了
xxx.png -> xxx.bundle/xxx.png
为了方便就写了个宏,都替换成这种模式
#define IMG_PATH(x) [NSString stringWithFormat:@"%@/%@",IMG_BUNDLE,x]
但是,开发的时候,资源文件都会分文件夹。。。直接这样打包,好的,也是找不到,所以用这种方法,需要在打包成bundle的时候,把文件夹全部去掉,直接把文件全部拖到同一个文件夹下
这里怕有人不知道做个提示:bundle文件可以直接将文件夹名字改成xxx.bundle就自动打包了,不需要用xcode里面的bundle生成
打包跟开发项目分离,代码更新后都要重新拖代码
这个。。。嗯,因为项目在开发阶段,好多问题都要修改,然后这边改动了,打包的工程里的代码也要拖,就觉得好麻烦- -于是介绍下我的处理方法,大神们勿喷。我的处理办法是在开发的项目中添加个target,选择framework文件,这样就在工程里面有个framework的子工程了,然后手动将需要编译成framework的.m文件和头文件分别添加到Complie Sources和Headers中。由于我的项目里有用到pod引用第三方库,所以在framework的配置中是稍微麻烦了一点,这个可以通过新建的framework工程中引入pod,将pod配置抄过来(坑点就是别忘记pod定义的user-defined)
然后由于两个工程共用了文件,所以也添加了宏#define PROJECT_IS_FRAMEWORK 0
(感觉应该有其他方法判断,但是没去找),打framework的时候就修改一下。
这个方法唯一坑的就是,添加文件的时候,需要在framework的target中手动添加文件,其余的还好。
只用打release包就可以了吧
这个我也不太确定,不过反正debug包也能跑的样子,那么干脆只打release就好了