• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift + framework的使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
  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


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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap