前言
很多ios开发者大概对CocoaPods并不陌生,我们几乎已经习惯了在pod文件中添加一行即可将一个库导入到自己的工程中,不得不说,在ios开发的历史中CocoaPods功不可没,即便在未来它也会在开发者中占据半壁江山。但是在这里我向大家介绍一个新的第三方库管理工具-Carthage,不管你是菜鸟还是老鸟,都希望这篇文章能为你打开一个新的世界。
很多人会问了,自己用CocoaPods意境习惯了,并没有发现什么不妥,为什么要使用carthage呢? 所以为了解开大家的疑问,我会首先介绍这两个第三方库管理工具的不同,让大家对这颗刚刚崛起的新星有一个初步的了解。
说到Carthage,就要先说swift,2014年苹果发布swift初期,用swift编写的第三方库就只能通过拖动源代码到自己的项目中才能被调用, 由于当时只有寥寥无几的开源库,且不能打包,加上swift1.0并不是那么好用,许多人对swift持着观望的态度。随着swift逐步趋于稳定,并且从ios8.0开始支持将自己写的swift打包成framework,越来越多的纯swift编写框架开始出现,就在这时候carthage突然出现在人们的视野中,而且陆陆续续几乎所有的开源框架都开始支持carthage。
Carthage的github主页为 https://github.com/Carthage/Carthage.git 里面其实对大家的疑问都有着详尽的解答,介于一些朋友英文不太好,这里我就用中文介绍一下Carthage和CocoaPods的不同:
首先,CocoaPods会直接创建和修改项目的workspace配置,一切都是为了便捷,我们只需要修改pod文件并不需要过多的关心其他事情,CocoaPods创建的是高度集成的项目。 而Carthage的特点是灵活,耦合度不高,集成时不需要集成相应的project,不需要创建workspace,而仅仅需要依赖打包好的framework文件即可。
其次,CocoaPods相对来说功能要比Carthage多很多,在国内由于墙的原因,我们都改成了淘宝的源来更新CocoaPods,相信我,如果你不翻墙,很多东西还是不能用,更新不下来,版本错误等一系列原因会让你不得不放弃一些看起来非常好用的第三方库。而Carthage似乎只需要从github上下载项目即可,配置更是简单,使用的时候项目干干净净,所有的第三方库就像苹果原生的framework一样美好,从此你不再需要担新CocoaPods的库用不了,不用花大量时间去修复用CocoaPods打包时出现的各种问题,如果你用过CocoaPods,当你开始用Carthage的时候,你会爱上这个工具的。
安装使用Carthage
好了,说了这么多,下面我就开始介绍如何使用Carthage.
安装Carthage只需要打开终端,输入如下指令:
$ brew update
$ brew install carthage
如果你不喜欢使用终端,也可以从网站https://github.com/Carthage/Carthage/releases下载最新版的Carthage.pkg来更新。
当你安装好Carthage后,在终端执行
$ carthage version
即可看到当前的carthage版本, 当我写这篇文章的时候,Carthage的版本为0.11.0 。
现在,你已经安装好了Carthage,接下来就是在你的项目中使用carthage了:
1、通过终端进入到项目所在的文件夹:
$ cd ~/Path/Project
后面的路径替换成你的项目所在的路径即可
2、创建一个空的carthage文件:
$ touch Cartfile
此时你的项目文件夹里会创建一个名为Cartfile的文件。
3、使用xcode打开cartfile文件
$ open -a Xcode Cartfile
并在打开的文件中加入以下内容
github "Alamofire/Alamofire" ~> 3.0
github "SwiftyJSON/SwiftyJSON"
版本的含义
~> 3.0 表示使用版本3.0以上但是低于4.0的最新版本,如3.5, 3.9
== 3.0 表示使用3.0版本
>= 3.0表示使用3.0或更高的版本
如果你没有指明版本号,则会自动使用最新的版本
4、保存并关闭cart file文件,在终端执行命令
$ carthage update --platform iOS
carthage会为你下载和编译所需要的第三方库,当命令执行完毕,在你的项目文件夹中会创建一个名为Carthage的文件夹
在 ~/Carthage/Build/iOS里会出现xxx.framework文件已经为你创建好了。
当然,你也可以通过命令行进入此文件夹:
$ open Carthage
5、现在打开你的项目,点击project,选择target, 再选择上方的General,将需要的framework文件拖到 Linked frameworks and Binaries内
6、点击Build Phrase tab选项,添加相应的run script
(感谢@TommyYaphetS指出新版本的问题,如果文章有误或者大家使用时有任何问题可以给我留言)
如果你使用的是0.11之后的版本,可能会报错:
/bin/sh failed with exit code 1
你需要使用下面的方式来配置即可:
此时,你已经可以使用导入的第三方库了
如需要使用Alamofire和SwiftyJSON,就在相应的类前添加
import Alamofire
import SwiftyJSON
即可。
现在,就开始享受Carthage吧。
如有疑问可以给我发邮件: lichunyu@vip.qq.com
另外推荐我开发的纯swift coredata库 https://github.com/leacode/LCYCoreDataHelper.git , 已支持使用Carthage, 喜欢的话给个❤️吧。
网友评论
http://www.cocoachina.com/bbs/read.php?tid-1735403.html
http://liteavsdk-1252463788.cosgz.myqcloud.com/4.5/TXLiteAVSDK_Professional_Rename_iOS_4.5.4018.zip?_ga=1.181701732.296073329.1519955132
Swift Language Version” (SWIFT_VERSION) is required to be configured correctly for targets which use Swift. Use the [Edit > Convert > To Current Swift Syntax…] menu to choose a Swift version or use the Build Settings editor to configure the build setting directly.
现在我用Carthage导入了framework 但是一直运行不起来
一直报这个错
dyld: Library not loaded: @rpath/TextToSpeechV1.framework/TextToSpeechV1
Referenced from: /Users/liyangyang/Library/Developer/CoreSimulator/Devices/348149D2-67A8-4168-93E4-46319B01255F/data/Containers/Bundle/Application/1DC11688-D3E3-43E2-945B-44468001B0AA/buliceliTest.app/buliceliTest
Reason: image not found
(lldb)
请大神指导🙏
The application /Users/lidashen/Library/Developer/Xcode/DerivedData/xcode-caeknqrhahnnxefhvzvwllqrcewi/Build/Products/Debug-iphoneos/xcode.app cannot be opened because it has an incorrect executable format.
Failed to load Info.plist from bundle at path /Users/lyonse/Library/Developer/CoreSimulator/Devices/F05EED10-6506-4CDB-9C46-7C80F9C407D1/data/Library/Caches/com.apple.mobile.installd.staging/temp.3ZWJYO/extracted/Payload/AutoAlliance.app/Frameworks/AEXML.framework
Dependency "MJRefresh" has no shared framework schemes for any of the platforms: iOS
这个库不能编译成功啊!