前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS 静态库&动态库

iOS 静态库&动态库

作者头像
动动我试试
发布2020-03-12 15:30:30
2.4K0
发布2020-03-12 15:30:30
举报
文章被收录于专栏:zhimingcowzhimingcowzhimingcow
iOS下的存在形式

静态库:.a和.framework 动态库:.dylib和.framework(系统提供给我们的framework都是动态库!)

苹果的态度

iOS 8 之前,iOS 平台不支持使用动态 Framework,开发者可以使用的Framework 只有苹果自家的 UIKit.Framework,Foundation.Framework 等。

WWDC2014(iOS8)以后,苹果允许开发者自行开发动态库。突然间转变态度,唯一的理由大概是App Extension的出现,它可以为一个应用创建插件,Extension 和 App 是两个分开的可执行文件,同时需要共享代码,这种情况下动态库的支持就是必不可少的了。

app动态更新

开放了动态库的使用权限之后,开发者可以自定义创建framework实现软件的动态更新(即绕过apple store审核,从服务器发布更新版本),不过含有自定义的framework的app是无法在商店上架的,故只能用于企业内部应用。

和库相关的几个命令

nm display name list (symbol table),其实就是把对象文件中的相关符号标识都列出来 otool otool,顾名思义就是object tool,比其nm来说,其功能更强大,可以查看对象文件的方方面面,比如展示对象文件的Mach Header,用到了哪些共享库(shared libraries),或者数据段内容等。 lipo create or operate on universal files,此命令主要是帮你查看或者创建支持多平台的静态库的。比如将两台不同平台的静态进行合并。

Xcode8制作framework及使用

http://blog.csdn.net/dp948080952/article/details/52749120

注意:如果静态库中使用了caategory,调用的时候肯定会出现如下unrecognized selector sent to class错误提示,这时要设置other linker flag,生成静态库和调用静态库的工程都加上-all_load。


2018年10月26日更新

.a不支持Swift(苹果的限制)
不能使用OC和Swift混编的方式实现静态库

因为想Swift调用OC需要<produceName-Bridging-Header.h>的桥接头文件,OC调用Swift需要produceName-swift.h桥接头文件,这两个文件都是隐藏的,无法暴露出来,因此也就不可能引用。


2019年11月14日更新

framework跟.a的区别

.a是多个目标文件.o的集合,它在生成的时候只需要所依赖静态库的头文件,不需要具体的实现,所以最终用的时候需要链接依赖的静态库,这可能会出现openssl由于版本不一致导致的冲突问题

framework是二进制代码,它所依赖的静态库会在生成framework的时候被链接进去,所以最终用的时候只需要framework,不再需要.a了,这可以用于解决openssl由于版本不一致导致的冲突问题

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • iOS下的存在形式
  • 苹果的态度
  • app动态更新
  • 和库相关的几个命令
  • Xcode8制作framework及使用
  • .a不支持Swift(苹果的限制)
  • 不能使用OC和Swift混编的方式实现静态库
  • framework跟.a的区别
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档