【问题标题】:CocoaPods intermediate files build failure with xcodebuild [duplicate]CocoaPods 中间文件使用 xcodebuild 构建失败
【发布时间】:2014-06-01 22:10:55
【问题描述】:

我正在尝试让 xcodebuild 与 CocoaPods 项目一起工作,但遇到了问题。我在跑步:

xcodebuild -workspace 'MyWorkspace.xcworkspace' -scheme DefaultScheme -configuration Release CODE_SIGN_IDENTITY="Distribution Profile" PRODUCT_NAME="MyProduct"

我收到以下错误:

The following build commands failed:
    Libtool /Users/myuser/repos/MyProjectDir/Build/Intermediates/Pods.build/Release-iphoneos/Pods.build/Objects-normal/armv7s/libsupport.a normal armv7s
    Libtool /Users/myuser/repos/MyProjectDir/Build/Intermediates/Pods.build/Release-iphoneos/Pods.build/Objects-normal/arm64/libsupport.a normal arm64
    Libtool /Users/myuser/repos/MyProjectDir/Build/Intermediates/Pods.build/Release-iphoneos/Pods.build/Objects-normal/armv7/libsupport.a normal armv7

构建在 xcode 中运行良好。我已经用谷歌搜索死了,还没有找到解决方案。有人有什么想法吗?

编辑:对于每个 pod,我还得到如下两行。

error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't locate file for: -lPods-AFNetworking
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: -lPods-AFNetworking is not an object file (not allowed in a library)

第二次编辑:如果我省略 PRODUCT_NAME 参数,它会完美运行。这是怎么回事?

【问题讨论】:

    标签: objective-c xcode5 cocoapods xcodebuild libtool


    【解决方案1】:

    不幸的是,xcodebuild 是我用过的记录最差的工具之一。可能提到的字符是问题,但从不知道:/我可以补充的是,一般来说,您应该避免通过命令行传递诸如PRODUCT_NAME 之类的参数。创建多个配置并在构建工件时切换它们要好得多。根据我的经验,我知道这些论点有时会导致奇怪的行为。

    【讨论】:

      【解决方案2】:

      事实证明,xcodebuild 不喜欢将 PRODUCT_NAME 参数放在最后。我完全删除了这个论点,一切都建立起来了。然后我将PRODUCT_NAME 移到CODE_SIGN_IDENTITY 之前,它起作用了。所以,我认为它可能是第二次构建的,因为 pod 资源是构建并存在于派生数据文件夹中的。为了检查这一点,我删除了派生数据并再次构建(最后使用 PRODUCT_NAME 参数),它构建得很好。

      老实说,我不确定到底是什么问题。也许这将在未来帮助某人。如果有人有真正的解决方案,我很想听听。

      【讨论】:

        【解决方案3】:

        我有同样的问题,并找到了问题的根本原因。

        环境:Xcode 6.1 (6A1052c)、OSX 10.10 (14A389) 并为 CocoaLumberjack 使用 CocoaPods。

        问题

        原因是 PRODUCT_NAME 属性不仅会影响构建的 *.app,还会影响 CocoaPods 的库 *.a 文件。

        在我的场景中,我需要构建许多 *.app 文件,这些文件具有不同的产品名称以及图像资源和设置的一些细微差别。因此,我想在构建脚本中构建不同的 *.app 文件,只需单击即可触发该过程。

        如果我们在以下命令中使用 *.xcworkspace 在 xcodebuild 的选项中设置 PRODUCT_NAME,会发生以下情况:

        xcodebuild -workspace $PROJECT_NAME.xcworkspace \
                   -scheme $PROJECT_NAME \
                   -configuration Distribution \
                   CONFIGURATION_BUILD_DIR=$PROJECT_SRC/build \
                   PRODUCT_NAME=$NEW_PRODUCT_NAME build
        
        1. xcodebuild 构建 $NEW_PRODUCT_NAME.app
        2. xcodebuild 构建名为 $NEW_PRODUCT_NAME.a 的 CocoaPods 的 *.a 库文件,应该是 libPods-CocoaLumberjack.alibPods.a
        3. 在链接器步骤中,项目设置要求通过属性 -lPods-lPods-CocoaLumberjack 与库链接strong>(在您的场景中,它无法链接 -lPods-AFNetworking)。 由于库文件也受 PRODUCT_NAME 属性的影响,链接器无法找到 find *.a 文件。
        4. 构建失败

        我的解决方案

        最后,我的解决方案是分别构建项目和 CocoaPods 库

        1. 在项目的 src 文件夹中
        2. 使用以下命令构建 CocoaPods 库

          xcodebuild -project Pods/Pods.xcodeproj build
          
        3. 使用以下命令构建项目并在搜索路径中添加 CocoaPods 和其他必要的库(不要忘记包含所有必要的库

          xcodebuild -project $(TARGET_PROJ) \
                     -configuration Distribution \
                     -target $(TARGET_TAR) \
                     PRODUCT_NAME=$(NEW_PRODUCT_NAME) \
                     LIBRARY_SEARCH_PATHS="./Pods/build/Release-iphoneos $OTHER_PATH" 
          
        4. 构建!

        这些对我有用,可以为相同的二进制文件提供一键式构建脚本,但有一些不同的 图像和设置。希望这能帮助遇到同样问题的人。

        【讨论】:

        • 我现在面临同样的问题。当我单独构建 pods 项目时,我的根项目的构建失败,因为找不到 pod 依赖项,就像您在“(不要忘记包含所有必要的库)”中提到的那样。但是,我无法将其用于工作。我必须在哪里包含它们?
        • 什么是 $OTHER_PATH" ?
        猜你喜欢
        • 2014-06-14
        • 2014-10-30
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 2012-08-13
        • 1970-01-01
        • 1970-01-01
        • 2014-03-03
        相关资源
        最近更新 更多