最近在打包SDK碰到的问题和注意事项在这里记录一下吧
我们在平时的项目中或多或少的使用到SDK,就算不使用SDK,也会用到系统的framework和SDK. 库分为动态库和静态库.库是一段编译好的二进制代码,通过头文件让别人使用.
动态库就不说了,因为可能自己打包的SDK,自己在打包上线的时候,可能会审核不过去,所以平时我们用的第三方SDK基本上都是静态库, 简单说下静态库的几个特点:
- 在App项目编译的时候会被拷贝一份编译到目标程序中,相当于将静态库嵌入了,所以得到的App二进制文件会变大。
- 在使用的时候,需要手动导入静态库所依赖的其他类库。(比如说某个SDK中使用到了CoreMotion.framework,在使用的时候需要手动导入。有的SDK需要link十几个系统库,这个时候非常恶心,只能一个一个手动加,这是静态库一个很大的不便之处。)
- 导入静态库的应用可以减少对外界的依赖,如果导入的是第三方动态库,动态库找不到的话应用就会崩掉,例如Linux上经常出现的lib not found。
- 静态库很大的一个优点是减少耦合性,因为静态库中是不可以包含其他静态库的,使用的时候要另外导入它的依赖库,最大限度的保证了每一个静态库都是独立的,不会重复引用。
好了,通过静态库的特点,我们也基本了解了静态库, 打包静态库可以打成framework和.a形式, 在这里我说的是
基本的就不说了网上的挺多一堆的, 在这里贴上一个链接ios打包静态库 这个链接打包基本的静态库还是可以的,但有时我们项目中会有第三方的framework和.a库还有自己项目中的xib文件和图片source ,这让一些developer有些不知道怎么做了. 我在下面说一下,就说下这两种情况怎么解决吧.
项目中有.a库和.framework
因为你制作的静态库里会用到这个第三方的静态库,没有的话会报错,但是添加进去可能造成使用者,再去链接这些库的时候,会造成重复
为了解决这个问题,我们在添加进自己的项目的时候, 会有三个选项,Destination
,Added folders
和Add to targets
, 这三个选项大家都很清楚, 我在这里说的是添加第三方静态库的时候,这里会有不同, 前两个Destination
,Added folders
还是和平时一样打勾,在这里说的是第三个Add to targets
, 首先你想下这个,target,选入后,这个库就会在Link Binary with Libraries
里出现,说明这个库参与编译了,不选的时候,这里不会有的.当我们不选Add to targets
这个选项的时候,使用者须添加上这个第三方的库,方便使用者及时更新以及配合自己使用.如果里面包含自己不想让使用者看到的库,就得选上这个Add to targets
这个选项了.
因为有第三方的静态库,注意自己使用的库要link的系统库
项目中打包bundle
- 在Mac OS 选bundle模板, bundle 里包含图片资源,xib,dat文件等;
- 编译,在product文件夹下生成对应的bundle;
使用bundle
NSString * bundlePath = [[ NSBundle mainBundle] pathForResource: @"FFOS" ofType :@ "bundle"];
NSString *imgPath= [bundlePath stringByAppendingPathComponent :@"zt_open_huoti"];
UIImage *imageF = [UIImage imageWithContentsOfFile:imgPath];
这是使用图片的方法,其他类似的资源也可这么使用,可以在UIImage类里写个类别,写个方法,使用的时候直接调取
这时候可能有同学会问了,xib文件怎么办呢,怎么调用
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
NSString * bundlePath = [[ NSBundle mainBundle] pathForResource: @"FFOS" ofType :@ "bundle"];
NSBundle *resourceBundle = [NSBundle bundleWithPath:bundlePath];
self = [super initWithNibName:nibNameOrNil bundle:resourceBundle];
if (self) {
}
return self;
}
介就是方法了,哈哈,是不很棒啊,
😆
这里有个问题,大家有没发现,大家打包出来的图片有的ttf格式啊,😂,这个当然也可以用,可能图片被压缩了,不是原图了,如果还想用原图png的话怎么搞呢
介个,就是 在bundle 的project 中,在Build Settings里 搜COMBINE
你会看到COMBINE_HIDPI_IMAGES
的选项,设置成NO
,就好了😂.
先讲这些了,可能有些我忘了,有问题的可以 留言
給我哦
看完的同学,不要吝啬给❤️哦,,谢谢.