Swift + framework的使用

  1. Swift + framework 的制作(基于project):
    http://www.jianshu.com/p/de006feae864
  2. Swift + framework 的制作(基于pod管理的workspace):
    http://www.jianshu.com/p/c6eb6e4ebc35

前面这两篇文章着重介绍了framework的创建, 但实践才是硬道理, 此篇文章主要讲述他的使用, 分为三种管理方式,四种导入方式, 分别适用于不用的情景,如下:

C648705C-5F20-49D4-BE41-ECF4BC3185F3.png

各个使用方式的详情以及优缺点会按照上图所示结构 在下面进行详细介绍(本文只介绍1.直接导入工程使用 以及 2.使用workspace管理, cocoapods管理本地库会在新的一篇文章中介绍):

一. 使用

1. 直接导入工程使用
1.1 拷贝到工程

目前创建的 Framework分为 独立的framework 基于project的framework以及 依赖于其他第三方的framework 基于pod管理的workspace的framework,导入方式如下:

1.1 .1 基于project的framework

拷贝打包好的framework到工程下, 需要选中copy items if needed

44C0FDBF1180354A18B62CEC1C388F4D.png

加入工程中的framework:

4E97F3EA-AFC9-4203-9B9D-3C8A76542F92.png
1.1.2 基于pod管理的workspace的framework

基于pod管理的workspace的framework, 在framework创建时提到,会生成多个framework(如下图)

825D1224D3A65378E9B76A37843E1E6B.png

使用时不仅需要引入使用的EKWBaseNetWorkRequest.framework,还需要引入它依赖的第三方库Alamofire.framework, 如下:

9E0F3BDAC8F0E3D8D8A203E9EEE3BD6F.png
1.2 添加关联

如果只是引入,运行工程,会发现如下错误:image not found

27700D4A96B1BCDACF64A26C7E21B560.png

解决这个问题, 只需要一个增加一个配置, 在Embedded Binaries添加引入的framework, 如下:

D5734E976D5CB02748DF27FD15D3619D.png
1.3 使用

在工程中需要使用的文件 引入.
如:import EKWBaseUIKit


以上管理方法适用于Framework比较完善,但如果当前使用的Framework还不完善, 需要经常修改, 频繁而来的编库以及导入,建立关联就会显得繁琐而闹心,使用workspace管理会更方便

2. 使用 workspace 管理, 可快速修改, 重新编译

根据是否需要在Framework中调试Bug分为以下两种(前两步操作2.1和2.2是一样的,区别在于第三步2.3第四步2.4,会分为2.3.1 和2.4.1 以及2.3.2和2.4.2进行区分介绍):

  1. 通过workspace的已有的管理,在link中进行简单关联配置
    优:该方式可在Framework中断点定位bug
    劣:工程移植到其他电脑 不能直接运行,需要重新配置下关联
  1. 引入workspace中各个project实际创建的Framework
    优:工程移植到其他电脑 也能直接运行
    劣:该方式不能在Framework中断点定位bug
2.1 创建workspace

选择File -> new ->Workspace创建workspace 文件"FrameworkTest"(已经使用pod管理自动创建workspace的忽略)

2.2 引入工程以及库工程

点击左侧空白区域 -> Add Files To "FrameworkTest"..., 选择需要使用workspace管理的工程project 以及库工程

添加之后工程结构如下:

80B03893-82E8-4AB2-B4B3-D00519F7E7F6.png

进行到当前步骤可在模拟器运行
1)若在相应的Framework工程如:EKWBaseUIKit中添加断点,在相应断点会暂停;
2)修改了Framework工程如:EKWBaseUIKit的内容,需要重新编译(Com+ B)Framework如:EKWBaseUIKit 工程, 再运行主工程EKWStudent, 新的修改才能在主工程中有所体现。

如果还需要在真机运行,需要继续以下步骤(以下步骤同时适用于真机和模拟器):

2.3 引入framework的关联
2.3.1通过workspace的已有的管理,在link中进行简单关联配置
  1. 分别编译(Com+ B)引入的Framework工程如:EKWBaseUIKit, EKWBaseLogic
  2. 在 主工程target -> Build Phases -> Link Binary With Libraries中点击 +, 添加Framework,如下图:

9676DAB3-957C-427C-BD6B-C3E7522BCCD4.png

c. 在主工程target -> General -> Embedded Binaries 中点击+, 添加Framework,如下:
27122558-0769-43A9-AB76-4B23B0BDCEDF.png

此时,该使用方式所有的配置已经完成,可以愉快地使用Framework了。

2.3.2引入workspace中各个project实际创建的Framework
  1. 将编译好的framework引入使用, 但是此处copy items if needed不选中, 只是引用关系, 而不是直接拷贝进工程, 此时更改EKWBaseUIKit中内容, 不需要重新导入新编EKWBaseUIKit.framework库,否则需要重新替换库,会很麻烦。

    13D1717E78929F1A8DF5230AB25682AE.png

  2. 在 主工程target -> Build Phases -> Link Binary With Libraries中点击 +, 添加Framework (同上 2.3.1 ->b )

2.4 framework的修改以及重新编译
2.4.1通过workspace的已有的管理,在link中进行简单关联配置

1.修改需要的代码或者增加需要的文件。如:直接通过workspace中包含的工程EKWBaseUIKit 进行代码修改
2.需要重新编译(Com+ B)Framework如:EKWBaseUIKit 工程, 再运行主工程EKWStudent, 新的修改才能在主工程中有所体现

8E93A73D-034B-4566-9844-5FABB7BF0B79.png
2.4.2引入workspace中各个project实际创建的Framework

1.修改需要的代码或者增加需要的文件。如:直接通过workspace中包含的工程EKWBaseUIKit 进行代码修改
2.选中为EKWBaseUIKit库添加的target BaseUIKitAggregate,重新编译,工程中的库也会进行更新

252D92EC-12B6-4D49-9647-24BB823A1DF5.png

二. 打包

使用以上编译运行的framework 进行archive(操作1)并上传App Store(操作2)两个操作中, 可能会出现两个问题,如下:

1. framework中包含有i386, 以及x86_64相关的包, 不能通过archive打包
95429C97-166F-4855-BDDB-3BA91269A53A.png

解决方案:archive 时,需要把合并的Framework替换为release模式下的 真机Framework(合并的.a 可以直接archive, 但是合并的Framework不能archive, 此处原因不解,欢迎知晓者解答~_~)

2. The main bundle Mach-0 contains armv7(bitcode) and arm64(bitcode), while the nested bundle Mach-0 contains armv7(machine code) and arm64(machine code). Vertify that all of targets for a platform have a consistent value for the ENABLW_BITCODE build setting.
1) 此处涉及到enable bitcodebitcode, machine code

苹果API Distribution Guide–App Thinning 中,有如下描述:

Bitcode is an intermediate representationof a compiled program. Apps you upload to iTunes Connect that contain bitcodewill be compiled and linked on the App Store. Including bitcode will allowApple to re-optimize your app binary in the future without the need to submit anew version of your app to the store.
bitcode 是编译程序的一种中间码, 被上传到 AppleStore 之后,苹果会根据用户的手机生成不同的二进制,进行下发,精简安装包的大小,达到瘦身的效果

2)解决办法
xcode7创建APP, Enable Bitcode默认为Yes, 但对使用的第三方也要求 Enable Bitcode = YES, 若不能保证,需要将工程中 buildSetting -> Enable Bitcode设置为NO

参考链接:
http://www.jianshu.com/p/b6c59d8ed2c9


以上仅是个人使用总结,欢迎批评指正补充~~~~~~~

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

推荐阅读更多精彩内容