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

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

作者: GPDI互联网创新协会 | 来源:发表于2017-06-19 16:15 被阅读0次

    最近公司需要制作一个控件供其他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的制作

    • 1.新建一个工程,如图所示.
    21.jpg

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

    22.jpg

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

    23.jpg

    接下来进行一些配置:

    24.jpg

    将Build Setting中的COMBINE_HIDPI_IMAGES 为NO.


    25.jpg
    • 2.接下来将项目中的xib文件和所用到的图片资源添加到我们的这个项目中
    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

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/hlogqxtx.html