xcode编译生成.framework、.a静态库

5 篇文章 0 订阅
2 篇文章 0 订阅

一、概念解析

静态库:

被完整的拷贝到可执行文件中,被多次使用就有多份拷贝,有a 和 .framework两种形式;

动态库:

程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存,有dylib 和 .framework 两种形式

系统的.framework是动态库,自己可编译的.framework静态库和动态库(据说用动态库app审核会通不过,没有验证,咱也不知道是真是假)

.a与.framework的区别

.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件和.h文件。.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。

两者关系:
.a + .h + sourceFile = .framework。

二、静态库生成步骤

生成.a

1.打开xcode新建一个project,选择.a类型,然后next新建一个项目。

2.新建或拖入已有的源码文件(可以是OC 、C、 C++的源码文件)

3.更改配置
(1)首先是Dead Code Stripping设置为NO,网上对此项的解释如下,大致意思是如果开启此项就会对代码中的”dead”、”unreachable”的代码过滤,不过这个开关是否关闭,似乎没有多大影响,不过为了完整还原framework中的代码,将此项关闭也未曾不可。

(2)然后将Link With Standard Libraries关闭,可能是为了避免重复链接。
(3)最后将Mach-O Type设为Static Library。



4.打包
打包分为模拟器版本和真机版本,选择generic iOS Device打包为真机版本,选择任意一个模拟器打包则为模拟器版本。点击build按钮打包。

5.查看静态库支持的 编译系统
许多第三方提供的.a文件(一般是那些SDK),嵌入到我们的xcode项目后,生成不会报错。

 一部分粗心的SDK提供方,或者我们自己做的.a文件,就会有报错,常见的就是不是armv7结构,或者不是armv7s结构,如果在模拟器中运行,会报不是i386结构。 原因是:armv7是支持比iphone5旧的那些设备,armv7s是iphone5或ipad4或者以后的新设备,i386是mac的。 这些名字指的是处理器所用的指令集。 

因此常常发生的是.a文件要么模拟器可以Build成功,但真机不能Build成功。要么就相反,让人抓狂。

这个时我们可以通过以下方式来查看静态库支持的编译环境即可以运行在哪些设备上

lipo -info XXXX.a 

这个时我们得到一个支持模拟器的静态库,为了方便使用我们将支持模拟器 和真机的静态库 合并,这样就不用操心这个库是什么库了。

6.合并
打开终端,输入lipo -create 模拟器.a的二进制文件地址 真机.a二进制文件地址 -output 新文件地址 然后回车,将新二进制文件替换任意一个.a里的二进制文件,即可得到合并后的framework。
终端命令:

 lipo -create /Users/xxx/Desktop/1\ 2019-05-18\ 18-28-33/2/lib_json.a /Users/xxx/Desktop/1\ 2019-05-18\ 18-28-33/3/lib_json.a  -output /Users/xxx/Desktop/1\ 2019-05-18\ 18-28-33/1/lib_json.a 


生成.framework

创建工程时,选择Cocoa Touch Framework,其余步骤与创建.a类似,不再详细讲述。
注意事项:1、framework 在某些情况下出现error,此时需要在该工程中 other linker flags添加两个参数 -ObjC -all_load。(



 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你在使用 Xcode 14.3.1 进行打包编译时遇到缓慢的问题,以下是一些可能的解决方法: 1. 清理 Derived Data:在 Xcode 的菜单栏中选择 "File" -> "Workspace Settings",然后在弹出的窗口中点击 "Derived Data" 的位置旁边的箭头图标,打开 Derived Data 文件夹。在 Finder 中删除 Derived Data 文件夹中的内容,然后重新启动 Xcode。 2. 调整编译设置:在 Xcode 的菜单栏中选择 "File" -> "Workspace Settings",然后点击 "Build System" 标签页,尝试切换到 "Legacy Build System",或者如果你已经在使用 "Legacy Build System",尝试切换到 "New Build System"。 3. 减少依赖和框架:如果你的项目中有过多的依赖和框架,可以考虑移除一些不必要的依赖,或者尝试使用静态替代动态。 4. 使用编译缓存:在 Xcode 的菜单栏中选择 "File" -> "Workspace Settings",然后点击 "Build System" 标签页,确保 "Use Shared Build Cache" 处于选中状态。这将利用其他项目构建过程中生成的缓存来加速编译。 5. 升级硬件配置:如果你的电脑性能较低,可以考虑升级硬件或使用更高配置的电脑来提升 Xcode编译速度。 6. 更新 Xcode:如果你的 Xcode 版本较旧,尝试升级到最新版本,以获取更好的性能和稳定性。 如果以上方法仍然无法解决问题,你可以尝试在开发者论坛或社区中寻求帮助,以获取更具体的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值