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