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_64 和 arm64(如需增加架构arm7s 需要在设置中添加)
第一步:编译出模拟器和真机.a文件
- 在桌面创建 ProjectDemos 的文件
- 创建.a 静态库工程 名字为 VideoPlayerLib 放置于ProjectDemos中
- 在.h 中声明方法
- 在.m中实现方法
- 修改SDK支持的最低系统版本 iOS Deployment Target iOS 8.0
- 分别选中 模拟器和Generic iOS Device 编译之后,在下面Products 下libVideoPlayerLib.a 红色变成了的白色,Show In Finder查看所在目录
- 在路径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文件包,并导入工程使用
- 把真机中的include 文件夹和合并的.a copy到一个桌面上新的文件夹Mylib中
- 在demo工程中使用.a 添加桌面上Mylib文件夹
- 添加文件选择 Create Group (黄色的/folder 蓝色实体文件)
- build phases 添加头文件
- 编译,使用处导入头文件。
// 使用处[[VideoPlayerLib sharedInstance] openPlayerWindow];
这个种方法弊端:
1.要终端打包,打包后还要验证
2.要手动组成 Mylib 文件夹
下篇文章解决这个问题:使用脚本,一键打包成Mylib。嗨上天!