澳门威利斯人_威利斯人娱乐「手机版」

来自 澳门威利斯人 2020-04-10 07:16 的文章
当前位置: 澳门威利斯人 > 澳门威利斯人 > 正文

Framework制作专题

方今公司app中有个BookRoom模块,也正是绘本阅读的模块须求再行做,并且封装成framework的款型实行(fcs项目曾经超大,很冗余,每趟Xcode编写翻译项目都急需多量的年月,至罕见5分钟),所以选用swift创设的framework遇到的主题材料坑作者好些个都碰着过。于是想把全部经过记录下来,鲜明有人和自身相像境遇相同的主题材料,以便下一次遇到可以长足解决;

首要参照他事他说加以侦察链接:

  • iOS 静态库和动态库的主干介绍和选择
  1. 新建项目选取Cocoa Touch Framework项目,取名字为BookRoom基特,接受斯威夫特语言

    图片 1新建framework图片 2bookroomkit

  2. 下一场新建二个BookRoomManager单例类用来传值设置,何况须求表明为public,那样我们才可以在别的种类上使用大家提供的framwork的代码;

  3. 编写翻译framework;作者这里以真机公布版本framework的为例。首先使用Product->Scheme->Edit Scheme 张开如下分界面,设置为Release景况,

    图片 3设置编写翻译情状为release然后遵从下图选取,第1步代表真机械运输转,第2步运转,第3步代表编写翻译成功的BookRoomKit.framework;图片 4编写翻译framework选中BookRoomKit.framework,右击Show inFinder,会展示编写翻译好的framework在finder中的地点,如下图:图片 5show in finder

  4. 接下去咱们新建一个壳工程,也正是测量试验工程,用来使用BookRoomKit.framework;何况命名字为BookRoom德姆o,如下图:

    图片 6BookRoomDemo App图片 7BookRoom德姆o将BookRoomKit.framework拖入项目中,勾选上边三项,然后点击Finish图片 8勾选的三项编写代码前,记得将壳工程切换为release情形,然后真机械运输营,因为编写翻译的framework必得与壳工程运转的条件一致才可以运维成功。图片 9编辑测验代码运转之后您会开掘,程序运维不起来,奔溃的错误新闻是:

制作动态及静态Framework

上面的文章回答了那几个难题:

http://blog.csdn.net/yongyinmg/article/details/41513917

  • 如何是库?
    库就是程序代码的汇集, 将N个文件组织起来, 是分享程序代码的一种方法

  • 库的分类?

    • 开源库: 源码是开诚相见的, 能够看出各类达成文件 .m 的贯彻, 譬如Github 上常用的开源库 AFNetworking, SDWebImage 等.
    • 闭源库: 不明白源码, 是因此编写翻译后的二进制文件, 看不到具体的落成. 闭源库又分为: 静态库 和 动态库
  • 静态库的留存形式?
    .a
    .framework

  • 动态库的留存情势?
    .dylib
    .framework

  • 静态库和动态库的界别?

    • .a 文件确定是静态库, .dylib 料定是动态库, .framework 或许是静态库也说不定是动态库
    • 静态库在链接时, 会被完整的赋值到可推行文件中, 倘使四个应用软件都接收了同叁个静态库, 那么各个应用程式都会拷贝一份, 缺点是浪费内部存款和储蓄器, 相似于概念叁在那之中坚变量, 使用该中央变量是新复制了一份数据, 实际不是原来定义的
    • 动态库不会复制,唯有一份, 程序运营时动态加载到内存中, 系统只会加载一次, 多个程序公用一份, 节约了内部存款和储蓄器. 相同于选拔变量的内部存款和储蓄器地址一样. 使用的是同二个变量
      然则项目中要是接受了谐和定义的动态库, 苹果是不许上架的, 在 iOS8 后 苹果开放了动态加载 .dylib 的接口, 用于挂载 .dylib 动态库
  • 静态库的使用气象?

    • 维护自个儿的主导代码, 如讯飞语音探究了广新岁查究出的结果本来要保存起来, 都公开了商场怎么生活
    • 将MRC的花色打包成静态库, 能够在ARC下直接选取, 不用转变, 如人家使用 MRC 写的开源库, 放到温馨的ARC项目中, 需求对种种文件加叁个编写翻译参数 -fno-objc-arc 那样相对来讲很辛劳, 将一切工程打包成静态库直接放到项目中就能够, 也不用对各类文件加多编写翻译选项
  • 静态库的性状?
    .a .h
    .a : 能够当做全体 .m 文件加密后的三个二进制文件
    .h : 头文件, 顾客暴光可用的接口 (方法卡塔尔

  • 制作静态库的进度 .a

    1. new -> project -> Cocoa Touch Static Liabrary
    2. 编写制定逻辑代码
    3. Build Phases -> Copy Files 加多要暴光的头文件
    4. Build Setting -> Build Active Architecture only (只创设活跃构架卡塔尔 -> nO
    5. a. 全数模拟器调节和测验版本静态库: 选中模拟器 command b
      b. 真机调节和测量试验版本静态库: 选中 generic iOS Device , Command b
      c. 真机发表静态库: 选中 generic iOS Device , Edit scheme Run -> Build Configuration -> Release. command b
    6. 工程文件夹 Produts 下的 .a 文件正是编写翻译获得的静态文件
    7. 右键 show finder 查看全体版本的静态库
      Debug-iphonesos 调节和测量检验 真机版本
      Debug-iphonesimulator 调节和测量检验 模拟器版本
      Release-iphoneos 公布 真几版本
      Release-iphonesimulator 宣布 模拟器版本
      8 . 怎么着引进静态库?
      直接把 对应静态库 .a 和 暴光的.h 文件 拖入到 指标工程中就可以
    8. 合併静态库?
      lipo -create 模拟器调节和测量试验.a 模拟器发表.a 真机调试.a 真机宣布.a output 通用.a
    9. 静态库注意:
      慈悲的静态库给外人用, 常常都以给五个发表版本 (模拟器, 真机卡塔尔(قطر‎, 最佳永不合併. 即使给了客商归并版的, 客户不恐怕分解.

    关于 lipo 命令
    点击查看lipo命令

dyld: Library not loaded: @rpath/BookRoomKit.framework/BookRoomKit Referenced from: /var/containers/Bundle/Application/C3208286-60C0-456D-B512-C26FB1E6A254/BookRoomDemo.app/BookRoomDemo Reason: image not found

http://years.im/Home/Article/detail/id/52.html

关于构架:
构架是怎样?
CPU 构架 是 CPU 厂家给归于同一种类的 CPU 成品定的一个行业内部, 首要指标是为着不一样分歧体系 CPU 的机要提示, 模拟器上的构架和真机上的构架不是同一的, 模拟器和模拟器之间, 真机和真机之间的构架也是不相同的, 假如静态库的构架和测量检验项目对应的模拟器恐怕真机上的构架不对应就能报错 "Undefined symbols for architecture arm64/i386"

图片 10奔溃新闻日志这里就事关一个难题,那正是本身事情未发生前的一步操作是直接从Finder元帅framework拖拽进壳工程项指标,那样操作私下认可会将framework放置在Linked Frameworks and Libraries上边,如下图;图片 11首先:Embedded Binaries和Linked Frameworks and Libraries是有分别,具体差别看那篇小说What is the difference between Embedded Binaries and Linked Frameworks;第三:从ios8起来,苹果官方协助大家营造的dynamic framework,大家构建的BookRoom基特.framework正是dynamic frameworks,这种类型的framework它需求具名code-signed以至嵌入到大家的app,不然大家真机械运输转时就能够奔溃Embedded Binaries with iOS Framework,还或者有叁个标题正是,大家创设的BooRoomKit.framework往往供给选拔第三方的互联网恳求框架,JSON分析框架等等,这个都归因于代码签名的主题材料都得在壳工程中加多说了如此多,消除方案正是:选中Linked Frameworks and Libraries上边包车型大巴BookRoomKit.framework点击删除,然后将右手导航栏的framewotk拖拽到Embedded Binaries上面,这时候Linked Frameworks and Libraries暗许也许有,如下图:图片 12不错的秘诀重国民党的新生活运动行,你会意识运营成功,并且打字与印刷了hello bookroom图片 13hello bookroom

        有未有写SDK或然要将有些常用的工具类做成Framework的涉世? 你恐怕本人写脚本实现了那项专门的职业,相信也会有多数的人使用 iOS-Universal-Framework ,随着xCode6的公布,相信小友大家曾经都清楚了,xCode6扶植做Framework了. 同期iOS-Universal-Framework开拓者也昭示不在继续保持此项指标支付,提出开拓者使用xCode6制作,近年来网络也可能有过多制作iOS Framework的素材,但大致都非常不够详细,接下去本文种详细情况介绍一下在xcode6下制作iOS Framework.

查看静态库对应的构架: lipo -info Xxx.a 

静态库都支持哪些构架?
模拟器架构
    iPhone4s ~ 5 : i386
    iPhone5s ~ 7Plus : x86_64
真机架构
    3GS~4s : armv7
    5/5c : armv7s(armv7兼容armv7s)
    5s ~ 6sPlus : arm64
  1. 使用lipo -info查阅framework帮助的cpu构造,分别对应真机版本和模拟器版本的framework信息图片 14lipo -info
  2. 使用lipo -create一声令下将模拟器和真机的framework归拢成通用版本图片 15真机与模拟器的framework具体操作如下:首先,切换到/BookRoomKit/Build/Products;接下来实行lipo -create -output [name] [path1] [path2]那条命令;实行到位后在Products目录下生成叁个BookRoomKit文件。图片 16lipo -create1图片 17lipo -create2然后将上海体育场所红圈的公文复制到Release-iphoneos中去覆盖原本的本子,最后将Release-iphonesimulator中的框架文件里的/Modules/BookRoomKit.swiftmodule里的公文复制到Release-iphoneos对应的文件夹下。这样我们就获取了一个通用的的框架。图片 18通用的framework最终用那么些framework替换掉测验工程的framewotk就足以在真机和模拟器运转了

        关于静态库和动态库的概念,英特网资料超级多,这里不做陈述,只讲明制作进度。

  • 静态库的炮制进度 .framework
    1. new -> project -> Cocoa Touch Framework
    2. Build Settings -> Mach-O Type -> Static Library (默认是 Dynamic Library)
    3. 编纂逻辑代码
    4. 公起始文件 Build Phases -> Headers -> 把Project 中须求拆穿的 .h 文件拖到 Public 中
    5. 快要公开的全体头文件 引进到 总的头文件 (库名.h卡塔尔(قطر‎ 中,
    6. Build Setting -> Build Active Architecture Only -> NO
    7. 同 静态库.a 制作的步调 5
    8. 品类文件夹 Products 下 的 库名.framework 右键 show finder
    9. 同 .a 静态库制作的手续7 取得全体类型版本的framework
    10. 将 供给的framework 拖入到对象工程中, 调用静态库的措施

为了有助于测量试验工程使用framework,小编这里教我们把八个门类放到二个Xcode里面张开,也不用Xcode展开多少个项目,那样便于测量检验使用,也不用来回在framework工程和壳工程之间切换。操作如下:闭馆BookRoomKit项目,张开BookRoom德姆o项目,将事情未发生前的操作撤消回落,删除集成进来的Book Room.framework。然后将BookRoomKit.xcodeproj拖拽进BookRoom德姆o项目中,编写翻译BookRoomKit,如下图:

1 Framework使用

2.动态库 .framework
步骤跟 静态库 .framework 相通, 下边是分化的地方

图片 19采纳多个档期的顺序开荒然后将编写翻译好的framework拖拽进BookRoom德姆o中的Embedded Binaries,如下图图片 203F6F9E91-A8CB-4ACE-B0B4-D21ABD9C5BA8.png通过地点的操作你就能够实惠的测量检验framework编写的代码,不用每便都编译创设framework,当您运转BookRoom德姆o的时候你就能够使用framework暴表露来的艺术调用。

1.1 制作步骤

  1. Mach-O type -> Dynamic Library
    将调换的动态库 .framework 拖入到对象工程未来
  2. General -> Embedded Binaries 中 添加该.framework
  3. Linked Frameworks and libraries 中 会默许增多该 .framework

本文由澳门威利斯人发布于澳门威利斯人,转载请注明出处:Framework制作专题

关键词: 澳门威利斯人 Swift 注意事项 版本 iOS进阶高级