iOS代码含有xib和其他第三方库的.a文件的制作

2017-06-19  本文已影响0人  GPDI互联网创新协会

最近公司需要制作一个控件供其他APP使用,所以需要制作成.a文件.由于源代码包含xib并用到了OpenSSL,所以如何将OpenSSL编译进入.a文件里面呢?

一.将源代码编译成.a文件

1.如何编制成.a

首先新建一个.a的工程

1.jpg

创建完成后,会自动生成一个.h和.m文件.如果已经写好的代码,那么将这两个文件删除.
然后将写好的代码拖到工程中,弹出下面的框,选择如下.(注:如果含有xib文件,请不要将xib文件拖进来.如果含有第三方的库,只需将其include添加到工程中,.a文件不要添加进来)

2.jpg

添加效果如下图:

3.jpg

导入头文件:


4.jpg

将需要暴露出去的头文件拖到如图所在的位置.

5.jpg

2.接下来将是做一些配置

在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.jpg

Show 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的制作

21.jpg

创建完成之后,将项目中的info.plist文件删除

22.jpg

删掉了info之后,再进行一些设置,如下图

23.jpg

接下来进行一些配置:

24.jpg

将Build Setting中的COMBINE_HIDPI_IMAGES 为NO.


25.jpg 26.jpg

注: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文件也制作好啦!
最后一步,运用到项目中.将图中圈出的文件拖到项目中.就可以开始使用啦!

33.jpg

第一次写简书如果其中有什么不对得地方,希望大家批评指正!

上一篇下一篇

猜你喜欢

热点阅读