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

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

目标:

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

环境

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

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

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

第二步:合并成通用包.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

iOS架构-静态库.a的打包及使用(一)
执行后我们可以看到:目标.a
iOS架构-静态库.a的打包及使用(一)验证合成包的架构是否成功

lipo -info 目标.a路径

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

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

  1. 把真机中的include 文件夹和合并的.a copy到一个桌面上新的文件夹Mylib中
    iOS架构-静态库.a的打包及使用(一)
  2. 在demo工程中使用.a 添加桌面上Mylib文件夹
    1. 添加文件选择 Create Group (黄色的/folder 蓝色实体文件)
    2. build phases 添加头文件
    3. 编译,使用处导入头文件。
      iOS架构-静态库.a的打包及使用(一)
      // 使用处
      [[VideoPlayerLib sharedInstance] openPlayerWindow];

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

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

结束!