美文网首页iOS学习ios
Carthage Build文件夹中没有生成的动态库

Carthage Build文件夹中没有生成的动态库

作者: 爱薄荷 | 来源:发表于2018-01-09 16:43 被阅读188次

    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
    
    如图所示: RunScript.png

    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 文件,可能造成冲突。

    相关文章

      网友评论

      • BetterComingDay:老铁 可以的,很强弄完之后framework就出来了。
      • Hello_kid:build没有framework,看标题进来的;
      • SuperMarioGG:你这种方式,打包的时候没遇到说不支持x86架构的问题?
        爱薄荷:我之前没有出现过这样的问题呀,你看看你有没有在Run Script里添加对应的设置,或者Run Script里的路径对不对。

      本文标题:Carthage Build文件夹中没有生成的动态库

      本文链接:https://www.haomeiwen.com/subject/atnwnxtx.html