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

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

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

1.如何编制成.a

首先新建一个.a的工程

iOS代码含有xib和其他第三方库的.a文件的制作_第1张图片
1.jpg

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

iOS代码含有xib和其他第三方库的.a文件的制作_第2张图片
2.jpg

添加效果如下图:

iOS代码含有xib和其他第三方库的.a文件的制作_第3张图片
3.jpg

导入头文件:


iOS代码含有xib和其他第三方库的.a文件的制作_第4张图片
4.jpg

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

iOS代码含有xib和其他第三方库的.a文件的制作_第5张图片
5.jpg

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

在Xcode的Project Navigator窗口中选中项目,在右侧TARGETS中选中目标(比如下图中CreatGroupDemo),选中Build Settings标签页,输入“Build Active Architecture Only”,将其设置为NO.当它设置为Yes时,是为了debug的时候编译速度更快,此时它只编译当前的architecture版本。而设置为No时,会编译所有的版本.如下图所示:

iOS代码含有xib和其他第三方库的.a文件的制作_第6张图片
6.jpg

在Xcode的Project Navigator窗口中选中项目,在右侧TARGETS中选中目标(比如下图中CreatGroupDemo),选中Build Settings标签页,输入“Other Linker Flags”,点击“+”按钮, 将-objc和-all_load添加上去.如下图所示:


iOS代码含有xib和其他第三方库的.a文件的制作_第7张图片
7.jpg

3.编译

虽然导入的头文件,但是还是会报openSSL中的头文件找不到文件的错误,如图:

8.jpg

在Xcode的Project Navigator窗口中选中项目,在右侧TARGETS中选中目标(比如下图中CreatGroupDemo),选中Build Settings标签页,输入“Header Search Paths”,点击“+”按钮,将你第三方库的头文件的路径($(SRCROOT)/CreatGroupDemo/OpenSSL/include/)添加上去.如下图所示:

iOS代码含有xib和其他第三方库的.a文件的制作_第8张图片
9.jpg

然后Comman + B一下,原本红色的libCreatGroupDemo.a会变成黑色的


iOS代码含有xib和其他第三方库的.a文件的制作_第9张图片
10.jpg

选中.a文件,鼠标右键

iOS代码含有xib和其他第三方库的.a文件的制作_第10张图片
11.jpg

Show in Finder一下就可以看到编译好的.a啦

12.jpg

将模式却换成真机模式,再Comman + B一下


iOS代码含有xib和其他第三方库的.a文件的制作_第11张图片
13.jpg

最后转换成Release

iOS代码含有xib和其他第三方库的.a文件的制作_第12张图片
![15.jpg](http://upload-images.jianshu.io/upload_images/6163660-376050649ec1025f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

重复上面的步骤,切换成模拟器和真机模式下各Comman + B一下.就生成了这4个文件夹,分别对应Debug模式下的真机,模拟器和Release模式下的真机和模拟器.


iOS代码含有xib和其他第三方库的.a文件的制作_第13张图片
16.jpg

4.将真机和模拟器的.a文件合并成一个文件.

打开终端,输入lipo -create 静态库路径1(空格) 静态库路径2(空格) -output(空格) 合并之后的.a存放的路径/合并之后的名字.a

输入 lipo -info 静态库路径,可以查看.a库支持的架构.

iOS代码含有xib和其他第三方库的.a文件的制作_第14张图片
iOS代码含有xib和其他第三方库的.a文件的制作_第15张图片
18.jpg

到了这里.a就制作完成啦!接下来将xib编译进入.bundle.

二.bundle的制作

  • 1.新建一个工程,如图所示.
iOS代码含有xib和其他第三方库的.a文件的制作_第16张图片
21.jpg

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

iOS代码含有xib和其他第三方库的.a文件的制作_第17张图片
22.jpg

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

iOS代码含有xib和其他第三方库的.a文件的制作_第18张图片
23.jpg

接下来进行一些配置:

iOS代码含有xib和其他第三方库的.a文件的制作_第19张图片
24.jpg

将Build Setting中的COMBINE_HIDPI_IMAGES 为NO.


iOS代码含有xib和其他第三方库的.a文件的制作_第20张图片
25.jpg
  • 2.接下来将项目中的xib文件和所用到的图片资源添加到我们的这个项目中
iOS代码含有xib和其他第三方库的.a文件的制作_第21张图片
26.jpg

注:xib中所有的图片都要删除,不能直接设置在里面而要通过代码设置,否则当把.bundle运用到项目中会报找不到xx图片.如下图所示:

iOS代码含有xib和其他第三方库的.a文件的制作_第22张图片
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的步骤相同,得到下面这些文件.

iOS代码含有xib和其他第三方库的.a文件的制作_第23张图片
30.jpg

显示包内容如下:

iOS代码含有xib和其他第三方库的.a文件的制作_第24张图片
31.jpg

在编译的过程中当你选中模拟器时会出现如下的报错,而选择真机时却不会出现.目前也没有找到解决这个报错的方法,暂时忽略但不影响我们的.bundle的制作.如果您有解决方法,请给我留言!

32.jpg

至此,.bundle文件也制作好啦!
最后一步,运用到项目中.将图中圈出的文件拖到项目中.就可以开始使用啦!

iOS代码含有xib和其他第三方库的.a文件的制作_第25张图片
33.jpg

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

你可能感兴趣的:(iOS代码含有xib和其他第三方库的.a文件的制作)