最近公司需要制作一个控件供其他APP使用,所以需要制作成.a文件.由于源代码包含xib并用到了OpenSSL,所以如何将OpenSSL编译进入.a文件里面呢?
一.将源代码编译成.a文件
1.如何编制成.a
首先新建一个.a的工程
1.jpg创建完成后,会自动生成一个.h和.m文件.如果已经写好的代码,那么将这两个文件删除.
然后将写好的代码拖到工程中,弹出下面的框,选择如下.(注:如果含有xib文件,请不要将xib文件拖进来.如果含有第三方的库,只需将其include添加到工程中,.a文件不要添加进来)
添加效果如下图:
3.jpg导入头文件:
4.jpg
将需要暴露出去的头文件拖到如图所在的位置.
5.jpg2.接下来将是做一些配置
在Xcode的Project Navigator窗口中选中项目,在右侧TARGETS中选中目标(比如下图中CreatGroupDemo),选中Build Settings标签页,输入“Build Active Architecture Only”,将其设置为NO.当它设置为Yes时,是为了debug的时候编译速度更快,此时它只编译当前的architecture版本。而设置为No时,会编译所有的版本.如下图所示:
6.jpg在Xcode的Project Navigator窗口中选中项目,在右侧TARGETS中选中目标(比如下图中CreatGroupDemo),选中Build Settings标签页,输入“Other Linker Flags”,点击“+”按钮, 将-objc和-all_load添加上去.如下图所示:
7.jpg
3.编译
虽然导入的头文件,但是还是会报openSSL中的头文件找不到文件的错误,如图:
8.jpg在Xcode的Project Navigator窗口中选中项目,在右侧TARGETS中选中目标(比如下图中CreatGroupDemo),选中Build Settings标签页,输入“Header Search Paths”,点击“+”按钮,将你第三方库的头文件的路径($(SRCROOT)/CreatGroupDemo/OpenSSL/include/)添加上去.如下图所示:
9.jpg然后Comman + B一下,原本红色的libCreatGroupDemo.a会变成黑色的
10.jpg
选中.a文件,鼠标右键
11.jpgShow in Finder一下就可以看到编译好的.a啦
12.jpg将模式却换成真机模式,再Comman + B一下
13.jpg
最后转换成Release
![15.jpg](https://img.haomeiwen.com/i6163660/376050649ec1025f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)重复上面的步骤,切换成模拟器和真机模式下各Comman + B一下.就生成了这4个文件夹,分别对应Debug模式下的真机,模拟器和Release模式下的真机和模拟器.
16.jpg
4.将真机和模拟器的.a文件合并成一个文件.
打开终端,输入lipo -create 静态库路径1(空格) 静态库路径2(空格) -output(空格) 合并之后的.a存放的路径/合并之后的名字.a
输入 lipo -info 静态库路径,可以查看.a库支持的架构.
18.jpg到了这里.a就制作完成啦!接下来将xib编译进入.bundle.
二.bundle的制作
- 1.新建一个工程,如图所示.
创建完成之后,将项目中的info.plist文件删除
22.jpg删掉了info之后,再进行一些设置,如下图
23.jpg接下来进行一些配置:
24.jpg将Build Setting中的COMBINE_HIDPI_IMAGES 为NO.
25.jpg
- 2.接下来将项目中的xib文件和所用到的图片资源添加到我们的这个项目中
注:xib中所有的图片都要删除,不能直接设置在里面而要通过代码设置,否则当把.bundle运用到项目中会报找不到xx图片.如下图所示:
27.jpg相应的代码也要修改,所以需要修改上面打入.a中的代码.例子如下:
#define BUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:BundleName]
#define ImageNamed(imageName) ([UIImage imageNamed:[NSString stringWithFormat:@"%@/Images/%@",BUNDLE_PATH,imageName]])
[self.closeBtnsetImage:ImageNamed(@"close")forState:UIControlStateNormal];
28.jpg
29.jpg
3.编译
编译的步骤和上面编译.a的步骤相同,得到下面这些文件.
30.jpg显示包内容如下:
31.jpg在编译的过程中当你选中模拟器时会出现如下的报错,而选择真机时却不会出现.目前也没有找到解决这个报错的方法,暂时忽略但不影响我们的.bundle的制作.如果您有解决方法,请给我留言!
32.jpg至此,.bundle文件也制作好啦!
最后一步,运用到项目中.将图中圈出的文件拖到项目中.就可以开始使用啦!
第一次写简书如果其中有什么不对得地方,希望大家批评指正!
网友评论