CocoaPods中间文件使用xcodebuild构建失败

时间:2014-04-17 14:53:40

标签: objective-c xcode5 cocoapods xcodebuild libtool

我试图让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参数,它会完美运行。那是什么?

3 个答案:

答案 0 :(得分:4)

事实证明,xcodebuild不喜欢最后的PRODUCT_NAME参数。我完全删除了这个论点,并且构建了所有内容。然后我将PRODUCT_NAME移到CODE_SIGN_IDENTITY之前,然后就可以了。因此,我认为它可能是第二次构建,因为pods资源已构建并存在于派生数据文件夹中。为了检查出来,我吹走了派生数据并再次构建(最后使用PRODUCT_NAME参数)并且它构建得很好。

老实说,我不确定问题是什么。也许这将有助于将来的某些人。如果有人有真正的解决方案,我很乐意听到。

答案 1 :(得分:4)

不幸的是xcodebuild是我曾经使用过的最糟糕的文档工具之一。可能提到的字符是问题,但永远不知道:/我可以添加的是,一般情况下,您应该避免通过命令行传递PRODUCT_NAME等参数。创建多个配置并在构建工件时切换它们要好得多。根据我的经验,我知道这些论点有时会引起奇怪的行为。

答案 2 :(得分:3)

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

环境:Xcode 6.1(6A1052c),OSX 10.10(14A389)和CocoaPods用于CocoaLumberjack。

问题

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

在我的场景中,我需要构建许多具有不同产品名称的* .app文件,并且在图像资源和设置方面略有不同。因此,我想在构建脚本中构建不同的* .app文件,只需单击即可触发该过程。

如果我们在xcodebuild的选项中使用* .xcworkspace在以下命令中设置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构建* .a名为$ NEW_PRODUCT_NAME.a 的CocoaPods的libray文件,该文件应为 libPods-CocoaLumberjack.a 和<强> libPods.a enter image description here
  3. 在链接器步骤中,项目设置要求通过属性 -lPods -lPods-CocoaLumberjack (在您的方案中,它无法链接 -lPods-AFNetworking )。 由于库文件也受PRODUCT_NAME属性的影响,因此链接器无法找到find * .a文件。 enter image description here
  4. 构建失败
  5. 我的解决方案

    最后,我的解决方案是单独构建项目和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. 构建<!/ p>

    5. 这些对我来说有一个单击构建脚本用于相同的二进制文件,但有一些不同 图像和设置。希望这能帮助那些遇到同样问题的人。