1.问题描述及解决
用Carthage来管理项目的第三方库时,在描述文件中添加完第三方库,在终端执行更新命令,显示获取完第三方库后,返回error: unable to find utility "xcodebuild", not a developer tool or in PATH
,并且Carthage的Build文件夹中什么也没有,根本没有动态库可以拖到项目中。
在Stack Overflow中找到答案,见问答地址。
即大概因为Carthage是先将第三方框架编译成动态库(.framework的二进制文件),所以需要先指定一个编译工具。在Xcode > Preferences > Locations
中的下拉菜单里选择命令行工具。如果只安装了Xcode的一个版本,那么应该只有一个选项。如果有几个版本的Xcode,那么选择需要的版本。
2.Carthage的安装和使用
相对于CocoaPods,Carthage是一个非常轻量级的包管理工具,在使用后,不得不感叹它的便捷和干净。
(1).通过Homebrew可以很方便的安装Carthage。输入以下命令即可:
$ brew update
$ brew install carthage
(2).安装完成后,和CocoaPods类似,可以通过在终端中输入以下命令创建描述文件和执行下载(#表示注释,不用输入)。
# ...为项目路径,可以在输入cd后,直接将项目文件夹拖到终端内
$ cd ...
# 创建并打开描述文件
$ touch Cartfile
$ open Cartfile
在Cartfile里添加需要的第三方
# /前为作者名,/后为第三方名
github ".../..." "master"
(3).回到终端中添加更新指令
$ carthage update
以上,我们就可以在项目的Carthage
文件夹下Checkouts
目录,看到从github获取的第三方源代码,并且在Build
目录,看到生成的.framework
库。
(4).然后在项目里的Target
->Build Phases
-> Link Binary with Libraries
里导入刚才生成在Build
文件夹里的framework库即可使用了。
(5).最后我们需要在Target
->Build Phases
-> Run Script
里(如果没有Run Script
,可以点击'+'号创建一个),添加一个脚本,防止项目在运行的时候可能会因为找不到这个动态库而在启动时崩溃。
在脚本区域输入:
/usr/local/bin/carthage copy-frameworks
将 .framework库
的路径添加到 Input Files 中(#后为注释,不需要输入)。
# ***为库名
$(SRCROOT)/Carthage/Build/iOS/***.framework
如图所示:
3.备注
(1).更新第三方框架
a.更新指定框架时
# ...为具体的框架名称,不用加引号,如`CocoaAsyncSocket`
$ Carthage update ... -- platform iOS
b.更新多个框架时
可以先将Carfile文件里不需要更新的库用 #
注释掉,然后用 $ carthage update
进行更新,这种方法也可以用于更新单个指定框架。
(2).不要改变 Checkouts
文件夹中的内容
使用carthage update 或者 carthage checkout命令,这个文件夹中的内容可以随时被复写,改动也就没有意义。
(3).carthage bootstrap命令
多人协作时,往往用到的.framework
库不会上传,在check out工程后,可以通过执行$ carthage bootstrap
命令,来根据 Cartfile.resolved
文件下载和编译依赖库的精确版本。而不应该用 carthage update
命令,这会更新项目中的第三方库的最新的编译版本,改变Cartfile.resolved
文件,可能造成冲突。