如何加载资源
在传统使用StaticLib的时候,需要一个Bundle文件来承载资源文件,并且将其拷贝进入主工程
根据本系列文章02Mach-O文件类型的分析,Bundle是一个 可以被dlopen()的动态库 但是Framework自身就是动态库,所以拥有Bundle的能力
Bundle加载方法 | Bundle | Framework |
---|---|---|
bundleForClass | NO | YES |
bundleWithPath | YES | YES |
bundleWithURL | YES | YES |
通过class来加载Bundle
从上文看,使用Framework不用考虑Bundle查询的问题,只需要对Framework内部的Class取class就可以获得默认的Bundle
1 | //Framework |
通过Path/URL来加载Bundle
普通的Bundle则需要获取Bundle的路径(需要自己确认),可以用以下函数
1 | //app资源目录路径 |
在静态库使用Bundle的过程中需要注意:
- 最终的bundleWithPath应该是你的那个Bundle在App里的路径,如果找不到,可以用模拟器Build出来,用Finder去看看,是不是路径错了
- 静态库创建Bundle的Target需要在MacOS的选项卡下,iOS没有,然后BuildSetting——Base SDK改为iOS,不然可能引起编译中一些签名问题
- 静态库的Bundle要手动(脚本)的方式拷贝到Target.app
从Bundle中获取资源
Bundle必须 在Load之后 才可以被读取资源,可以用isLoad来检查是否已经Load
1 | //从Bundle获取图片 |