项目依赖管理学习笔记

在开发的过程中,我们经常要使用(依赖)其他第三方库,而这些库或框架还有可能依赖于其他的第三方库和框架,这样就会形成一个复杂的依赖关系网,而手动管理这些库或框架是非常麻烦的,首先要找到并下载这些库或框架,还要注意版本的兼容性问题,继而把它们添加到当前工程中,还需要配置其相关的环境变量,这些都去手动完成是非常耗费精力的,所幸我们还有依赖管理工具,这将大大减少我们的工作量,CocoaPods和Carthage工具就可以帮助我们完成项目依赖的管理工作。

CocoaPods依赖管理工具

CocoaPods是最有影响力的OS X和IOS项目依赖管理工具,于2011年发布,经过多年的发展,它已经非常完善了,CocoaPods支持项目中采用Objective-C和Swift语言。CocoaPods会将第三方库的源代码编译为静态链接库.a文件或是动态框架.framework文件的形式,并将它们添加到项目中,建立依赖关系。

安装CocoaPods

由于CocoaPods工具是使用Ruby语言开发的,在OS X系统下默认安装了Ruby运行环境,所以不需要另外安装Ruby运行环境了。CocoaPods的下载和安装可以使用Ruby包管理工具gem。 安装流程: 1.在终端中执行:sudo gem install cocoapods 2.等待安装,当完成时终端输出

注:如果这个命令执行了很长时间但没有反应或出现如下错误:ERROR: Could not find a valid gem 'cocoa pods' (> = 0),here is why: Unable to download data from rubygems.org/ - ERROR :Connection reset by peer - SSL_connect ( rubygems.org/latest_apec…)这是由于gem工具无法访问默认的Ruby源(rubygems.org),此时我们可以把Ruby源换为国内的镜像源。在终端执行如下命令: sudo gem source --remove rubygems.org/ sudo gem sources -- a gems.ruby-china.org/ 3.安装指令成功之后还需要进行设置,执行:pod setup 该指令会在本地创建~/.cocoapods/文件夹,并将CocoaPods的GitHub库( github.com/CocoaPods/S…)下载到该文件夹中。这样当配置依赖关系时,可以直接使用本地文件。由于下载的内容较多(300MB左右),setup执行的时间会表较长,而且容易失败,不过百度上有应对其下载失败的办法。例如这篇:( www.jianshu.com/p/b561726ac…) 。 然后就可以搜索我们要使用的第三方库了,可以通过网站https://cocoapods.org进行搜索,一个多么朴素的界面:
当然也可以通过pod指令进行搜索,在终端执行:pod search 第三方库名,例如:pod search AFNetworking,结果如图:
当然并不只有这一个库的信息,而是巨多,当然你全名搜索的话,你需要的在第一条,我本来想数数的,结果数乱了,对,我就是这么无聊,找到需要的后,按q退出,我差点直接关了终端你造吗,我果然依旧菜...... 接下来就是项目与第三库的搭配了,使用CocoaPods工具管理第三方库时,会将第三方提供的源代码进行编译,而编译的结果有两种形式,分别为静态链接库.a文件和动态框架.framework文件,至于如何选择,就需要看项目中调用第三方库的代码采用何种语言,另外还需要看第三方库采用何种语言。 示例:以动态框架库形式管理依赖 1.通过终端进入项目工程目录下,即*.xcodeproj文件所在的目录,执行 pod init指令,例如:
2.该指令执行成功后,会在当前目录下生成一个Podfile文件,该文件是一个文本文件,
这个文本文件的内容是这样的:
然后修改Podfile文件,例如这样:
注:依赖库后面的数值表示依赖版本,它有如下几种表示方式:

=3.1.0, 表示大于等于3.1.0版本。 <=3.1.0, 表示小于等于3.1.0版本。 ~>3.1.0, 表示大于等于3.1.0版本,小于下一个主版本,即小于4.0。 3.1.0, 表示大于3.1.0版本。 <3.1.0, 表示小于3.1.0版本。 3.1.0, 表示等于3.1.0版本。

Podfile文件修改完成后,执行pod install指令,就可以安装依赖关系了,安装成功后,目录是这样的:

playPlay.xcworkspace、Podfile.lock、Pods是安装过程中创建的,其中的Pods目录是工程所依赖库或框架源代码工程。如果通过Xcode启动工程,应该通过playPlay.xcworkspace工作空间文件启动,依赖成功后是这样的:

Carthage依赖管理工具

Carthage是一个轻量级的项目依赖管理工具,主张“去中心化”和“非侵入性”。Cocoapods搭建了一个中心库(cocoapods.org),第三方库被收录到该中心库中,没有收录的第三方库是不能使用Cocoapods管理的,这就是所谓的“中心化”思想,而Carthage没有这样的中心库,第三方库基本上都是从GitHub或私有Git库中下载的,这就是“去中心化”。另外,Cocoapods在下载第三方库后,会将其编译成静态链接库或动态框架文件,然后会修改Xcode项目属性配置依赖关系,这就是“侵入性”。而Carthage下载成功之后,会将第三库编译为动态框架,由开发人员自己配置依赖关系,Carthage不会修改Xcode项目属性,这就是非侵入性。 注:使用Carthage有两个限制: 1.第三库只能编译为框架。 2.IOS项目的版本必须是IOS8以上的版本。

安装Carthage

Carthage工具可以通过两种方式安装,一种是在https://github.com/Carthage/Carthage/releases网站下载已经编译好的安装包Carthage.pkg进行安装。

另一种是通过Homebrew工具安装,Homebrew是用来管理OS X系统下安装包的工具。要确定是否安装了Homebrew工具,可以在终端执行brew update指令,如果没有安装Homebrew工具,终端会提示brew命令无法执行,此时可以在终端中执行如下指令: ruby -e "$(curl -fsSL raw.githubusercontent.com/Homebrew/in…)" 命令执行成功后,就可以在终端中执行brew install carthage指令进行安装。

Cartfile文件

与CocoaPods的Podfile类似,Carthage使用名为Cartfile的文件描述依赖库,该文件的内容示例如下:

从Carthage文件的内容可见依赖库的来源有Git和GitHub,Git是私有库。git或github是依赖库名或git地址,第1行的Alamofire/Alamofire与第2行的AFNetworking/AFNetworking即为依赖库名,指定依赖库一般指定GitHub上库的"用户名/项目名",这个名字如果不能确定,需要到GitHub上查询确定。
第4行为git地址,支持git所支持的所有协议,如:https、git和ssh等,git库可以创建多个分支,所以可以在Carthage文件中指定分支名,其中第3行与第4行中的"main"都是分支名。有了分支,不需要指定版本号。 与Podfile类似,在Cartfile文件中可以指定依赖库版本,它主要有如下表示方式:

1 == 3.0,表示等于3.0版本。 2 >= 3.0,表示大于等于3.0版本。 3 ~> 3.0,表示大于等于3.0版本,小于下一个主版本,即小于4.0。

Carthage依赖管理示例:

1.首先通过终端进入CarthagePlay工程目录下,即*.xcodeproj文件所在目录,并创建Cartfile文本:

2.将其内容修改如下:
3.执行Carthage update --platform iOS指令,安装依赖关系:

Carthage update --platform iOS指令的参数platform iOS表示只考虑IOS平台,执行过程分为两个阶段,首先将库下载到本地,然后再使用xcodebuild命令将库编译为框架。 Carthage update --platform iOS指令执行成功后,CarthagePlay工程目录下会多出一个Carthage目录,该目录中又包含了两个目录Build和Checkouts。Build目录中存放编译好的framework文件,根据不同的平台它会包含不同的目录,如Mac、IOS、tvOS和watchOS。

Checkouts目录是下载的第三方库的源代码。
Carthage需要我们自己配置CarthagePlay工程与第三方库的依赖关系: 1.在Xcode工程中打开TARGETS ——> CarthagePlay ——> General,在Linked Frameworks and Libraries中点击 + 按钮,在弹出的对话框中单击Add Other按钮,找到Build目录中的framework文件,添加依赖框架。

添加成功后的目录结构:

2.第三方库添加完成,还需要运行脚本(Run Script)。运行脚本,就是在编译时执行命令。Carthage提供的运行脚本可以将框架复制到运行环境目录下。在Xcode工程中打开TARGETS ——> CarthagePlay ——>Build Phases,如果没有Run Script部分,可以通过菜单Editor ——> Add Build Phase ——> Add Run Script Build Phases菜单项添加。 在Run Script部分的脚本区域输入:

3.尝试进行编译,如果报错如下,可以command+shift+k清空编译缓存重新编译。
4.在项目中引入第三方库的头文件,如果报错如下:
可以尝试在TARGETS——>Build Setting——>Search Paths——>Header Search Paths中将第三方库的头文件文件夹拖入其中。
至此,可以导入第三方库并使用

转载于:https://juejin.im/post/5cfb7ccbf265da1b7a4b6649

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值