Framework 嵌套与依赖

本文都是以 Swift 为基础做测试的.

静态库 嵌套 其他静态库

在你的项目中, 使用了一个静态库, 它里面嵌套了另一个静态库.

  1. 如果这个静态以 Embed(嵌套) 的形式引入另一个静态库, 那么嵌套的静态库会包含在当前的静态库的 Frameworks 文件夹中, 如下:

    虽然包含, 但在其他项目使用这个静态库的时候, 并不会动态的把依赖的静态库 link 到这个项目, 直接 build 会报如下错误:

    需要自己手动 link 嵌套的 framework, 如下图:

    把那个依赖库拖入到 Build Phases -> Link Binary With Libraries, 即可解决上面的错误
  2. 如果以 Do Not Embed 的形式引入另一个静态库, 构建这个静态库, 它本身就不包含 Frameworks 文件夹, 需要找到那个依赖的库, 并且拖入到 Build Phases -> Link Binary With Libraries

动态库 嵌套 其他静态库

与上面的基本相同, 但使用时, 不需要 link 嵌套的 framework, 拖入即可以使用.
即使在动态库中, 对这个静态库 Do Not Embed, 在项目中使用动态库的时候依然不需要拖入这个静态库.
所以动态库引入其他静态库, 无论是 Embed 还是 Do Not Embed, 都会把其他的静态库嵌入到本身, 而且你还可以在你的项目中通过 import StaticFramework 的形式引入这个静态库, 使用他的 public 部分, 但是无法查看 API, 查看的时候会显示:

???

动态库 嵌套 其他动态库

当前的项目可以给引入的 framework 进行签名, 但是不可以给这个 framework 嵌套的动态库签名, 所以如果你的动态库嵌套其他的动态库, 需要在你构建动态库的时候给他签名, 但是这种签名之后就无法被其他 team 使用, 如下:

如果在动态库引入另一个动态库使用:

  1. 选择了 Embed & Sign, 则需要上面所描述的
  2. 选择了 Embed & Without Signing, 这个不可以应用在两个动态库嵌套, 会出现如下错误
dyld: Library not loaded: @rpath/StaticFramework.framework/StaticFramework
  Referenced from: /private/var/containers/Bundle/Application/AC3BE487-EB49-4DEB-AD3D-787856606C23/SwiftTest.app/Frameworks/StaticFramework2.framework/StaticFramework2
  Reason: no suitable image found.  Did find:
    /private/var/containers/Bundle/Application/AC3BE487-EB49-4DEB-AD3D-787856606C23/SwiftTest.app/Frameworks/StaticFramework2.framework/Frameworks/StaticFramework.framework/StaticFramework: code signature in (/private/var/containers/Bundle/Application/AC3BE487-EB49-4DEB-AD3D-787856606C23/SwiftTest.app/Frameworks/StaticFramework2.framework/Frameworks/StaticFramework.framework/StaticFramework) not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.
(lldb) 
  1. 选择了 Do Not Embed, 表示这个动态库不嵌入, 但依赖这个库, 所以在使用时需要同时引入这两个动态库.
    所以动态库尽量不要嵌套其他动态库, 而是在项目中同时引入两个动态库进行使用.

静态库 嵌套 其他动态库

如果在静态库引入另一个动态库使用:

  1. 选择了 Do Not Embed, 则需要在项目中同时引入两个库, 因为静态库依赖那个动态库, 但没有嵌入.
  2. 选择了 Embed & Sign, 与 静态库 嵌套 其他静态库 相同, 需要拖入依赖的动态库

总结:

  1. Static Framework
    无论选择 Do Not Embed, 还是 Embed & Sign, 都不会动态连接依赖的库, 需要手动链接.
    但选择 Embed的静态库, 会把依赖的库一起打包到它本身. 如下:


    如果选择 Do Not Embed, 就不会包含 Frameworks 这个文件夹.

  2. Dynamic Framework
    1.嵌套静态库, 始终会把静态库嵌入其中.
    2.引入动态库, 选择 Do Not Embed, 则需要在使用的时候引入依赖的动态库
    选择 Embed 需要对内嵌的动态库进行签名, 而且签名过的库, 只允许同一个 Team 使用.

所以无论静态库还是动态库都尽量不要嵌套使用, 而是以依赖的方式引用, 这样才更优雅一些.

IPA processing failed
上传到 AppStore 不可以包含 x86_64i386

lipo <文件夹/文件> -remove x86_64 -o <文件夹/文件> // 去除x86_64

使用 Script 删除 x86_64 和 i386

Todo: Found an unexpected Mach-O header code: 0x72613c21

Static Library 不可以以嵌入的方式, 而是在 Build Phases -> Link Binary With Libraries 中引用.
如果加入到 Embed Frameworks 中, 就会报上面的错误

目前没有测试动态 framework 以嵌入的方式引用静态 framework , 是否会报错.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容