iOS中第三方库管理

Cocoapods

cocoapoda 是ios最早![](
的第三方库管理工具了,
CocoaPods是一个用来帮助我们管理第三方依赖库的工具。它可以解决库与库之间的依赖关系,下载库的源代码,同时通过创建一个Xcode的workspace来将这些第三方库和我们的工程连接起来,供我们开发使用。
使用CocoaPods的目的是让我们能自动化的、集中的、直观的管理第三方开源库。
使用cocapoda会生成几个pod文件

cocapoda使用

1:在项目中新建 Podfile文件


use_frameworks 会生成.framework的动态库, 如果没有就是.a的静态库

2:install

安装完成后项目中会生成这些文件,用来管理第三方库
可以看到我们添加了如下文件

PodFile 依赖描述文件

Podfile.lock 当前安装的依赖库的版本

CardPlayer.xcworkspace

xcworkspace文件,使用CocoaPod管理依赖的项目,XCode只能使用workspace编译项目,如果还只打开以前的xcodeproj文件进行开发,编译会失败

xcworkspace文件实际是一个文件夹,实际Workspace信息保存在contents.xcworkspacedata里,该文件的内容非常简单,实际上只指示它所使用的工程的文件目录

Pods工程会新建Debug和Release两个Configuration,每个Configuration会为不同的target设置不同的xcconfig,xcconfig指出了头文件查找目录,要链接的第3方库,链接目录等信息,如下图所示:

Pods工程会新建Debug和Release两个Configuration,每个Configuration会为不同的target设置不同的xcconfig,xcconfig指出了头文件查找目录,要链接的第3方库,链接目录等信息,如下图所示:

IOS工程在XCode上看到的结构和文件系统的结构并不一致,在XCode上看到的文件夹并不是物理的文件夹,而是叫做Group,在组织IOS工程时,会将逻辑关系较近的文件放在同一个Group下。如下图所示:

主程序cocapoda运行流程

可以看到采用CocoaPods之后,Debug Configuration设置了配置文件Pods-CardPlayer.debug.xcconfig文件,Release Configuration则设置了配置文件Pods-CardPlayer.release.xcconfig文件,这些配置文件指明了头文件的查找目录,要链接的第三方库

主程序依赖关系

我们的主工程的main target显示指出了需要链接库pods_taiyuangjial.framework,而pods_taiyuangjial.framework由target Pods-taiyuanjial产生,所以主工程的main target将会隐式依赖于target Pods-taiyuanjial,而在target Pods-taiyuanjial的配置中,显示指出了依赖对第三方库对应的target的依赖,如下所示:

iOS库 .a与.framework区别

/
.a文件是一个静态库, 是一个纯二进制文件 :链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。
.framework动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。、

三、iOS里静态库形式?

.a和.framework

四、iOS里动态库形式?

.dylib和.framework

五、framework为什么既是静态库又是动态库?

系统的.framework是动态库,我们自己建立的.framework是静态库。

六、a与.framework有什么区别?

.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。

.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。

.a + .h + sourceFile = .framework。

七、为什么要使用静态库?

方便共享代码,便于合理使用。

实现iOS程序的模块化。可以把固定的业务模块化成静态库。

和别人分享你的代码库,但不想让别人看到你代码的实现。

开发第三方sdk的需要。

/////////////////////////////////////////////////////

Carthage

主页:Carthage:https://github.com/Carthage/Carthage
目标:Carthage旨在使用最简单的方式来管理Cocoa等第三方框架。
原理:自动将第三方框架编译为动态库(Dynamic framework)。
优点:Carthage为用户管理第三方框架和依赖,但不会自动修改项目文件或构建设置,开发者可以完全控制项目结构和设置。
缺点:只支持iOS 8.0+,不能用来开发iOS 8.0以前的项目。

Carthage的安装

安装Carthage有多种选择:

pkg文件:下载并运行Carthage.pkg最新版本的文件,然后按照屏幕上的说明进行操作。
Homebrew:可以使用Homebrew安装Carthage

1、安装Homebrew,在终端运行:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)",这条指令运行结束后,Homebrew就安装完成了,具体可以查看官网(https://brew.sh);

2、安装Carthage,在终端运行:brew update,等待运行结束后,接着运行:brew install carthage,这样Carthage就安装完成了。

注意:如果以前安装过Carthage,则应先删除/Library/Frameworks/CarthageKit.framework

源代码:只需要克隆master存储库的分支,然后在终端进入到项目目录下运行make install即可,这需要Xcode 8.3(Swift 3.1)支持。

Carthage的使用

新建一个项目(已经使用pod)

2、使用Carthage安装第三方库:

1、先进入到项目所在的文件夹

1
$ cd ~/Path/CartHageDemo
2、创建一个空的Cartfile文件(两种方式)

(1)使用终端创建:

1
$ touch Cartfile
(2)使用文本文件创建:

创建一个名为Cartfile的文件,并保存到项目目录下

3、编辑Cartfile文件,例如要安装MBProgressHUD框架

1
github "jdg/MBProgressHUD" ~> 1.0.0
4、保存并关闭Cartfile文件,使用Carthage安装框架

1
$ carthage update

执行完后目录文件只这样的

carthage会clone文件中对应的git第三方库,把每一个第三方库编译成二进制文件的framework文件。

其中--platform iOS命令是可选的,作用是保证只为iOS编译framework,如果不指定平台,会为全平台编译framework文件。如果想要了解更多的命令,可以运行carthage help update查看。

当指定平台后只会下载iOS平台
当命令执行完毕,在Cartfile文件同级别的文件夹中生成一个名为“Carthage”文件夹和“Cartfile.resolved”文件。打开Carthage文件夹,可以看到两个文件夹Build和Checkouts。

Cartfile.resolved:这个文件是辅助Cartfile的,需要被提交到版本库中,它有助于其他开发者使用和你相同版本的第三方库。
Build:包含每一个第三方库创建生成的framework,可以被集成到项目中,每一个framework都是依赖于源文件或者GitHub上的Releases版本。

Checkouts:这里包含的是转换成framework之前的源文件,Carthage有自己的缓存机制,所以不需要在不同的项目中对同一个的第三方库clone多次。

对于是否把Build和Checkouts文件夹提交到版本库取决于你,这不是必须的。如果提交的话,其他人clone了你的资料库就可以使用这两个文件中的内容。

不要改变Checkouts文件夹中的内容,因为如果使用carthage update 或者 carthage checkout命令的话,这个文件夹中的内容可以随时被复写,那么改动工作就白费了。如果一定要改动的话,在使用carthage update命令时,可以使用--use-submodules选项。如果加上这个选项的话,Carthage在添加每个依赖库的时候就会作为一个字模块。

如果其他人想要使用你的工程,你不需要在你的代码中提交已经编译好的framework,他们需要在check out你的工程之后执行carthage bootstrap命令。

bootstrap命令会根据Cartfile.resolved文件下载和编译依赖库的精确版本。另一方面,carthage update命令会更新项目中的第三方库的最新的编译版本,这是不可取的。

在"Carthage/Build/iOS"文件夹中会生成.framework文件。

####配置项目

导入framework

添加编译脚本

点击Target -> Build Phases -> “+” -> New Run Script Phase

![](media/15153811522388/15154859611305.jpg)

展开Run Script,

1、在shell下面输入:/usr/local/bin/Carthage copy-frameworks;

2、在Input Files中加入:$(SRCROOT)/Carthage/Build/iOS/MBProgressHUD.framework;

3、在Output Files中加入:\((BUILT_PRODUCTS_DIR)/\)(FRAMEWORKS_FOLDER_PATH)/MBProgressHUD.framework

Carthage与CocoaPods的区别

1、Cocoapods通过创建一个更集中的生态系统来提高第三方开源库的可维护性和参与度,而Carthage强调尽可能灵活的将任务委托给Xcode和Git;

2、Cocoapods在使用中会自动创建和更新workspace、依赖和Pod项目并进行整合;

3、Carthage在使用中不需要创建和继承相应的workspace和project,只需要依赖打包好的framework文件即可。

总结:

Cocoapods的方法更加简单粗暴容易使用,而Carthage则更灵活且对项目没有侵入性。

CocoaPods项目还必须具有Podspec文件,其中包括有关该项目的元数据,并指出如何构建它。Carthage用于Xcode构建依赖关系,而不是将它们集成到单个工作空间中,它没有类似的规范文件。

Cocoapods有一个中心仓库,而Carthage是去中心化的,没有中心服务器也就避免了可能因中心节点错误而带来的失败,也减少了维护,即Carthage每次配置和更新环境,只会去更新具体的库,所需时间更短。

Carthage存在的一些缺陷:

1、支持Carthage的第三方库依然不如CocoaPods丰富;

2、仅支持iOS 8.0+;

3、在使用的过程中无法查看第三方库源码。

猜你喜欢

转载自blog.csdn.net/investzhu/article/details/79014300