iOS架构-静态库.a的打包及使用(2)

补充知识-框架分类:
模拟器架构:
• i386 : 32位架构 4S ~ 5
• x86_64 : 64位架构 5S ~ 现在的机型
真机架构:
• armv7: 在最老的支持iOS7的设备上使用
• armv7s: 在iPhone5和5C上使用 (armv7s架构被苹果放弃了)
• arm64: 运行于iPhone5S的64位 ARM 处理器 上

目标:

打包成模拟器和真机都能运行的静态库.a包,形成SDK文件包提供给客户使用。
SDK文件包:头文件.h集合、通用.a包

环境

Xcode 10.1
默认新建的支持架构为x86_64arm64(如需增加架构arm7s 需要在设置中添加)

修改框架的方式如下图:
在这里插入图片描述
debug 项默认为 YES ,表示仅生成当前选择的框架的库; release 项默认为 NO ,表示生成支持所有模拟器或真机的库。生成的库将会保存在 products 目录下的不同分类目录内:

在这里插入图片描述

在这里插入图片描述
不将Build Configuration改为Release,则打包出来的静态库会存于【Debug-iphoneos】和【Debug-iphonesimulator】两个文件夹下。我们一般都使用Release模式,因为程序最终发布之后是Release版的,所以静态库也是在Release模式下使用。

合成模拟器的架构【默认:模拟器编译只会生成对应的1种架构,真机编译会合成两种架构】
在这里插入图片描述
这里,设置为YES,那么编译出来的.a静态库就只包含当前设备的架构。
举个例子:如果我们选择iPhone 5模拟器【Command+B】编译,则编译出来的.a静态库只能用iPhone4s~5模拟器跑程序, 用iPhone5s~6plus,则会报找不到x86_64的libFMDB库。设置为 NO 之后,【Command+B】不管选择哪个【模拟器】,则都会把【386 : 32位架构 4S ~ 5】【x86_64 : 64位架构 5S ~ 现在的机型】的架构都打包合并。

注】【真机】不设置 [Build Active Architecture Only] 也默认会自动合并的armv7 和amr64架构 。但是 armv7s架构被苹果放弃了,真机要想合并armv7s的话需要进行如下操作再编译。(其实没必要设置这个)
在这里插入图片描述
四. 合成架构

一般来说, 只需要前两步即可

  1. 模拟器架构的合成: Target --> Build Settings --> Build Active Architecture Only(是否只编译当前架构) --> Debug 改为NO(改为NO, 模拟器就可以直接合成2种架构)

  2. 真机和模拟器合并: lipo -create 静态库1.a 静态库2.a -output 新静态库.a

  3. armv7s这个架构, 在2014年10月份的xcode版本更新中, 取消了默认导出此架构. 可以不用支持此架构. 如果要支持, 需要手动添加3个架构.

第一步:编译出模拟器和真机.a文件

  1. 在桌面创建 ProjectDemos 的文件
  2. 创建.a 静态库工程 名字为 VideoPlayerLib 放置于ProjectDemos
    在这里插入图片描述
  3. 在.h 中声明方法
    在这里插入图片描述
  4. 在.m中实现方法
    在这里插入图片描述
  5. 修改SDK支持的最低系统版本 iOS Deployment Target iOS 8.0
    在这里插入图片描述
  6. 分别选中 模拟器和Generic iOS Device 编译之后,在下面Products 下libVideoPlayerLib.a 红色变成了的白色,Show In Finder查看所在目录
    在这里插入图片描述
  7. 在路径Debug-iphoneos 和Debug-iphonesimulator 下生成了libVideoPlayerLib.a
    这样就有了真机和模拟器的.a 包了,头文件在include中
    在这里插入图片描述

第二步:合并成通用包.a

这里使用终端命令去合并,脚本自动化合并打包将会在(二)中详细讲解
DEVICE_DIR_A 真机.a 路径
SIMULATOR_DIR_A 模拟.a 路径
INSTALL_DIR_A 通用.a 路径

#合成模拟器和真机.a包
lipo -create DEVICE_DIR_A SIMULATOR_DIR_A -output INSTALL_DIR_A

这里我把合成的生成在工程的Products 下,libVideoPlayer.a 通用包名

lipo -create /Users/suning/Desktop/ProjectDemos/VideoPlayerLib/Build/Products/Debug-iphonesimulator/libVideoPlayerLib.a /Users/suning/Desktop/ProjectDemos/VideoPlayerLib/Build/Products/Debug-iphoneos/libVideoPlayerLib.a -output /Users/suning/Desktop/ProjectDemos/VideoPlayerLib/Build/Products/libVideoPlayer.a


在这里插入图片描述
执行后我们可以看到:目标.a
在这里插入图片描述验证合成包的架构是否成功

lipo -info 目标.a路径

在这里插入图片描述

第三步:SDK文件包,并导入工程使用

  1. 把真机中的include 文件夹和合并的.a copy到一个桌面上新的文件夹Mylib中
    在这里插入图片描述
  2. 在demo工程中使用.a 添加桌面上Mylib文件夹
    1. 添加文件选择 Create Group (黄色的/folder 蓝色实体文件)
    2. build phases 添加头文件
    3. 编译,使用处导入头文件。
      在这里插入图片描述
      // 使用处
      [[VideoPlayerLib sharedInstance] openPlayerWindow];

这个种方法弊端:
1.要终端打包,打包后还要验证
2.要手动组成 Mylib 文件夹

下篇文章解决这个问题:使用脚本,一键打包成Mylib。嗨上天!

结束!

发布了249 篇原创文章 · 获赞 225 · 访问量 21万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览