文档章节

Framework打包前传

樗同学
 樗同学
发布于 2016/09/27 17:42
字数 972
阅读 69
收藏 1

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

关于库的一些基础知识

首先来了解一下什么是库:库(Library)其实是一段编译好的二进制代码,然后将头文件暴露出来(OC中就是.h文件,swift中打包后Xcode将会自动生成.h文件 需要将Swift代码前面添加public)提供给别人使用

关于为什么使用库!1.只提供给使用者接口而不暴露出来具体的实现方式

                           2.不会对代码进行较大的频繁的改动,减少编译时间(因为库就是一段已经编译好的二进制代码使用时候只需要Link一下就可以了)

关于Link 就衍生出来了 静态链接以及动态链接,也就是动态库以及静态库

1.静态库

静态库即静态链接库(Windows 下的 .lib,Linux 和 Mac 下的 .a)

使用时直接copy一份在项目中,在目标程序中就不会改变了。

好处:没有外部依赖,直接运行

缺点:使目标项目体积增大

2.动态库

动态库即动态链接库(Windows 下的 .dll,Linux 下的 .so,Mac 下的 .dylib)

与静态库相反,动态库编译时候不会copy到程序中,只会存储动态库的引用。等程序运行时才会加入动态库

编译才载入的特性,也可以让我们随时对库进行替换,而不需要重新编译代码

优点:不会增大目标程序体积,同一份库可以被多个程序使用

缺点:一部分性能损失。依赖于外部环境。如果环境缺失或者库版本不对。将会导致程序无法运行

 

iOS:Framework

Framework实际上是一种打包方式,将库的二进制文件,头文件和相关资源打包到一起,方便管理发布。

iOS8以前不支持动态Framework。开发者只可以使用苹果自家的UIKit.Framework,Foundation.Framework等。由于iOS的应用都运行在沙盒中,不同程序之间无法共享代码,同时动态下载代码苹果明令禁止,没法发挥出来动态库的优势,所以动态库没有存在的必要。所以只能打包成为静态库.a文件同时附上头文件

iOS8/Xcode 6 推出之后。iOS平台添加了动态库支持,同时Xcode也原声自带了Framework支持(动静太都可以Static以及Dynamic)关于为什么添加动态库支持。可能的理由是Swift的Extension出现吧

Extension和APP是两个分开的可执行文件。需要共享代码。但是和系统的Framework还是有较大区别的。首先需要copy到目标程序中,App和Extension的Bundle是共享的,因此成为Embedded Framework

 

Swift支持

跟着iOS8/Xcode 6 同时发布的还有Swift。如果在项目中使用外部的代码。可选的方式1:直接将代码copy到过程中,另外一种就是动态的Framework,使用静态库是不支持的。(这也是我后来将Swift代码改成OC代码打包成静态Framework的主要原因吧 😭😭😭)

造成这个问题的原因主要是 Swift 的 Runtime 没有被包含在 iOS 系统中,而是会打包进 App 中(这也是造成 Swift App 体积大的原因),静态库会导致最终的目标程序中包含重复的 Runtime(这是苹果自家的解释)。同时拷贝 Runtime 这种做法也会导致在纯 ObjC 的项目中使用 Swift 库出现问题。苹果声称等到 Swift 的 Runtime 稳定之后会被加入到系统当中,到时候这个限制就会被去除了。

 

 

© 著作权归作者所有

上一篇: Framework打包
樗同学
粉丝 0
博文 33
码字总数 16046
作品 0
朝阳
私信 提问
分享26个关于Java开发视频教程(免费下载)

分享26个关于Java开发视频教程(免费下载) 1、开发前传_CSS.avi 2、开发前传_HTML基础.avi 3、开发前传_javascript.avi 4、Web开发工具的安装与使用.avi 5、Servlet起源.avi 6、Servlet编程...

邓剑彬
2012/12/01
397
1
Caffe代码阅读3-Layer的实现细节

我的读Caffe的过程完全参考了张博博士的文章,http://blog.csdn.net/xizero00/article/details/50914471,十分的佩服他给我们留下了这样用心的文章,我有一些理解也直接盗用了QAQ,然后备注我...

just_sort
2018/02/01
0
0
ijkPlayer编译、打包、多格式及Https支持

编译环境 macOS + Xcode,文末有我打包好的文件,需要请自行下载 准备工作 获取 ijkPlayer 源码 桌面新建一个文件夹 ijkplayer,位置自行决定,我这里文件放到桌面了 打开终端、依次输入以下...

草帽小子的九喇嘛
2018/05/10
0
0
xcode 编译插件--xcode-configure

有时候,我们希望通过命令行来编译xcode工程,我们可以直接用xcodebuild来编译,之后再到编译路径下拷贝打包成ipa或者是要包含各种cpu架构的静态库或framework,就显得非常非常麻烦,有没有一...

smallmuou
2016/01/19
587
0
Xcode 7 Framework制作流程详情整理

一、打包Framework 1、新建iOS->Framework & Library->Cocoa Touch Framework 2、选择next进入下一步 3、在PROJECT->Deployment Target->iOS Deployment Target选择你需要支持的最低系统。 ......

田广ly
2015/12/29
708
0

没有更多内容

加载失败,请刷新页面

加载更多

加载JDBC驱动

我们平时在连接数据库时需要加载驱动,通常做法是将JDBC驱动程序放在类路径中的某个位置,然后用Class.forName()查找并加载驱动程序。 这也就意味着要么将驱动程序打包到jar中,要么将驱动程...

uknow8692
28分钟前
4
0
TCP三次握手详情

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。 客户端在收发数据前要使用 conn...

vinci321
29分钟前
4
0
适用于PDF文件的MIME媒体类型

使用PDF时,我遇到了MIME类型application/pdf和application/x-pdf等。 这两种类型之间是否存在差异,如果是这样,它是什么? 一个比另一个更受欢迎吗? 我正在开发一个必须提供大量PDF的网络...

技术盛宴
36分钟前
5
0
Docker数据挂载

Docker数据管理 在容器中管理数据主要有两种方式: 数据卷(Volumes) 挂载主机目录(Bind mounts) 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特...

CodingDiary
48分钟前
6
0
jQuery获取特定的选项标签文本

好吧,说我有这个: <select id='list'> <option value='1'>Option A</option> <option value='2'>Option B</option> <option value='3'>Option C</option></select> 如果我想......

javail
52分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部