1.Apple禁止在iPhone中使用外部框架或动态链接库,要重用代码最好使用静态库.a了.
2.在项目中链接静态库:
把头文件拷贝到工程内或指定位置,在Head Search Paths中指定静态库的头文件路径,如 lib/header/,选择上递归属性.
把.a添加到工程中.
4.利用lipo 编译合并iPhone模拟器和真机通用的静态类库.
lipo -create /Users/Shark/Desktop/libIMUI.d.a /Users/Travis/Desktop/libIMUI.s.a -output /Users/Shark/Desktop/libIMUI.a
5.在静态库中使用Category的问题.
在iPhone开发中,Category是广泛使用的一种Objective-C的特性,不过如果在静态库中如果使用Category就会遇到一些意外的崩溃,原因就是在使用静态库的应用中会无法发现库中Category的声明。
http://kensou.me/blog/?p=197
解决办法就是,把实现也放在头文件中,作为内联函数.缺点就是多次包含多次内联.
或者把实现文件也提供给应用项目.
在静态库中使用 Category
Objective-C 无法识别静态库中的Category方法
http://kensou.me/blog/?p=189
加上-ObjC后,编译的时候,编译器会将库中所有涉及到某个类的内容全部加载进来,这样会导致生成体积会变大,不过这是理所当然的,因为链入的代码变多了。
使用静态库的矛盾:
.a中使用了开源源A,业务工程中也使用了A,如果业务库中不加-ObjC没问题,加了-ObjC则编译报重复;
.a中使用了类别,业务工程运行时报找不到函数。解决办法在业务工程中加上-ObjC。
6.打包图片资源到.a中
苹果提供得静态库工程无法将图片资源导入,只能通过外加.bundle文件的方式,这样在调 试阶段也需要使用bundle文件,而每次更新bundle文件的内容时都需要重新编译bundle工程,生成新的bundle文件。
还有一种方法:
在图片资源不多时,可以将图片转换成base64的string,通过static方式存储。需要用的时候再通过base64解析成data,最后完成显示
http://webcodertools.com/imagetobase64converter/Create
Since iOS 6.0 UIImage
has method + imageWithData:scale:
, you can pass2.0
as scale for retina. 测试在4。3,5.0ios系统上也能正常显示。