使用Carthage管理iOS第三方依赖库

Carthage是什么?

Carthage创建的是去中心化的依赖管理器。

说到Carthage,就要先说swift,2014年苹果发布swift初期,用swift编写的第三方库就只能通过拖动源代码到自己的项目中才能被调用, 由于当时只有寥寥无几的开源库,且不能打包,加上swift1.0并不是那么好用,许多人对swift持着观望的态度。随着swift逐步趋于稳定,并且从ios8.0开始支持将自己写的swift打包成framework,越来越多的纯swift编写框架开始出现,就在这时候carthage突然出现在人们的视野中,而且陆陆续续几乎所有的开源框架都开始支持carthage。

Carthage的目标是用最简单的方式来管理Cocoa第三方框架。

Carthage也是一个比较好用的三方框架管理工具,原理是自动帮你把工程编译为Dynamic framework(动态库),仅支持iOS8以上,相比Cocoa pods对项目更无侵入性。

更多Carthage详细请见:https://github.com/Carthage/Carthage.git

Carthage与CocoaPods的区别

CocoaPods是已存在很长时间的Cocoa依赖管理器,那么为什么要创建Carthage呢?

首先,CocoaPods默认会自动创建并更新你的应用程序和所有依赖的Xcode workspace。Carthage使用xcodebuild来编译框架的二进制文件,但如何集成它们将交由用户自己判断。CocoaPods的方法更易于使用,但Carthage更灵活并且是非侵入性的。

个人觉得,配置更是简单,使用的时候项目干干净净,所有的第三方库就像苹果原生的framework一样美好,从此你不再需要担新CocoaPods的库用不了,不用花大量时间去修复用CocoaPods打包时出现的各种问题,如果你用过CocoaPods,当你开始用Carthage的时候,你很有可能会爱上它。

安装Carthage

安装方式:

  • 方式一:可以使用Homebrew来安装Carthage,比较快捷一些

安装Carthage之前,需要先安装Homebrew,在终端输入命令如下:

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装完homebrew后,执行下面命令

$ brew update
$ brew install carthage

当你安装好Carthage后,在终端执行:

kinglydeMacBook-Pro:~ kingly$ carthage version
0.26.2
kinglydeMacBook-Pro:~ kingly$ 

即可看到当前的carthage版本,我的Carthage的版本为0.26.2。

现在,你已经安装好了Carthage,接下来就是在你的项目中使用carthage了。

使用Carthage

使用步骤:

  1. 创建一个Cartfile,将你想要使用的框架列在里面。
  2. 运行carthage update --platform iOS,将获取依赖文件到一个Carthage.checkout文件夹,然后编译每个依赖。
  3. 在你的应用程序target的“General”设置标签中的“Embedded Binaries”区域,将框架从Carthage.build文件夹拖拽进去。

创建一个Cartfile,添加框架

首先,切换你的项目所在的路径。执行如下命令:

$ vi  Cartfile

加入你想要使用的框架,如下:

github "SwiftyJSON/SwiftyJSON"  ~> 3.0
github "kingly09/KYMenu" == 0.0.6 

~> 3.0 表示使用版本3.0以上但是低于4.0的最新版本,如3.5, 3.9

== 3.0 表示使用3.0版本

= 3.0表示使用3.0或更高的版本

如果你没有指明版本号,则会自动使用最新的版本

使用 :wq! 保存Cartfile成功,

此时你的项目文件夹里会创建一个名为Cartfile的文件

运行 carthage update --platform iOS 下载和编译所需要的第三方库

$  carthage update --platform iOS

Carthage会为你下载和编译所需要的第三方库,当命令执行完毕,在你的项目文件夹中会创建一个名为Carthage的文件夹和Cartfile.resolved,如下所示。

kinglydeMacBook-Pro:MenuDemo kingly$ carthage update --platform iOS
*** Fetching SwiftyJSON
*** Fetching KYMenu
*** Checking out SwiftyJSON at "3.1.4"
*** Checking out KYMenu at "0.0.6"
*** xcodebuild output can be found in /var/folders/lz/1g92dn0x7w98kpc4yt8f2qrc0000gn/T/carthage-xcodebuild.8NQpHy.log
*** Building scheme "KYMenu" in KYMenuDemo.xcodeproj
*** Building scheme "SwiftyJSON iOS" in SwiftyJSON.xcworkspace
kinglydeMacBook-Pro:MenuDemo kingly$ 
kinglydeMacBook-Pro:MenuDemo kingly$ ls -l
total 16
-rw-r--r--   1 kingly  staff   26 11  3 14:49 Cartfile
-rw-r--r--@  1 kingly  staff   33 11  3 14:49 Cartfile.resolved
drwxr-xr-x   5 kingly  staff  170 11  3 14:50 Carthage
drwxr-xr-x  10 kingly  staff  340 11  3 14:56 MenuDemo
drwxr-xr-x   6 kingly  staff  204 11  3 14:55 MenuDemo.xcodeproj
drwxr-xr-x   4 kingly  staff  136 11  3 12:45 MenuDemoTests
drwxr-xr-x   4 kingly  staff  136 11  3 12:45 MenuDemoUITests
kinglydeMacBook-Pro:MenuDemo kingly$ 

在 /Users/kingly/Documents/项目/demo/MenuDemo/Carthage/Build/iOS 里会出现xxx.framework文件已经为你创建好了。

注意Carthage只支持动态框架,而后者只存在于iOS 8以上(以及任意版本的OS X)。

设置标签中的“Embedded Binaries”区域

如果是 OC

安装好后只需要在对应 Target 中的 Build Setting 中的 Framework Search Path 项加入以下路径

$(SRCROOT)/Carthage/Build/iOS

即可。

如果是 swift,必须导入
现在打开你的项目,点击project,选择target, 再选择上方的General,将需要的framework文件拖到 Linked frameworks and Binaries内

如下所示:

目的是告诉Xcode链接你的app到这个framework,允许你在代码中使用。

点击Build Phrase tab选项,添加相应的run script

并添加以下命令:

/usr/local/bin/carthage copy-frameworks

carthage copy-frameworks命令剔除了额外的框架。

点击Input Files下面的+号为每一个framework添加条目。

$(SRCROOT)/Carthage/Build/iOS/SwiftyJSON.framework
$(SRCROOT)/Carthage/Build/iOS/KYMenu.framework

编译项目

在需要使用框架的地方导入对应的框架, command + B 编译项目即可

严格来讲,build phase对项目运行来说不是必须的,但是,这巧妙的解决了APP因为使用的frameworks包含二进制图像的iOS模拟器在提交APP Store时会被自动拒绝的问题。

更新 Carthage

使用如下命令即可:

carthage update --platform iOS

如果只更新某一个框架,使用命令

carthage update KYMenu --platform iOS

现在,就开始享受Carthage了

常见问题

1)出现 Reason: image not found
dyld: Library not loaded: @rpath/KYMenu.framework/KYMenu

Referenced from: /var/containers/Bundle/Application/C3E607DA-217A-4432-A035-F14FE1C79D45/MyTest.app/MyTestApp

Reason: image not found

第一种解决方法:

1、在Xcode中的Build Phases中的Copy Files项中,将你要引用的framework拖到“Linked

Frameworks and Libraries“中【如果已经添加了,跳过这一步】

2、把Build Phases 里Social.framework后边的选项修改成为Optional就可以了。

注意:第一种方式可以解决编译时的报错,但有时候我们在使用库里的方法时不能正确的执行。

第二种解决方法:

在你的应用程序target的“General”设置标签中的“Embedded Binaries”区域,点击“+”号,把动态库添加进来。

如图所示:

2) 加快 Carthage Copy Framework 的速度

加速的过程很简单,只需要在原有的 Xcode 的 Carthage Copy Framework 里面,在原本空白的 Output Files 处,加入对应的 $(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/XXX.framework 就可以了。

更多Carthage

请见 https://github.com/Carthage/Carthage

转载于:https://my.oschina.net/kinglyphp/blog/1560525

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值