【问题标题】:Link error attempting to build app with Cocoapods using xcodebuild on Jenkins尝试在 Jenkins 上使用 xcodebuild 使用 Cocoapods 构建应用程序时出现链接错误
【发布时间】:2013-08-06 02:20:28
【问题描述】:

我正在尝试为我们的应用开发项目设置一个 Jenkins CI 实例。我的工作使用 Debug 配置运行逻辑和应用程序测试,但由于在编译期间出现链接错误,我正在努力构建 IPA。

ld: library not found for -lPods
clang: error: linker command failed with exit code 1 (use -v to see invocation)

该应用使用 Cocoapods,我正在使用 Jenkins XCode 插件进行构建。

我搜索了类似的问题并尝试/验证了一堆东西:

  • 我正在使用工作区。
  • 我在 xcodebuild 步骤之前运行 pod install
  • 我检查了项目本身的架构、目标和 Pod 是否相同——标准(armv7、armv7s)——正如this answer 所建议的那样
  • 我尝试了this GitHub thread的各种解决方案
  • 我根据this answer 和类似设置尝试了派生数据位置的各种设置
  • Podfile 指定platform :ios, :deployment_target => "6.0"

那时我不知道还有什么可以尝试的。

【问题讨论】:

  • 您确定要编译工作区而不是项目吗?如果您还没有,请尝试使用 Jenkins Xcode 插件并指定“Xcode 工作区文件”。 Xcode 插件也可以帮助清除任何其他可能的误导。上周我遇到了同样的问题,花了几个小时才意识到我让 Jenkins 编译了 Xcode 项目,而不是 Xcode 工作区。另外,直接到 Jenkins 正在编译的项目的实际,在 Xcode 中打开它,看看你是否可以自己编译它 - 通过 Xcode 调试它也会更容易。
  • 是的,绝对是使用工作区而不是项目。正如我所说,我有一个非常相似的配置,可以很好地运行逻辑和应用程序测试。
  • 我知道,我知道,这很烦人......如果你也没有尝试过,也许这个页面(FAQ 中的#4)可能会有所帮助 - github.com/CocoaPods/CocoaPods/wiki/…
  • 您使用什么版本的 Xcode 构建? Xcode5 和 Jenkins 有一些奇怪之处。
  • 自从升级到 Xcode5 后,我在这里遇到了同样的问题。在 Xcode 中工作正常,但在 xcodebuild 时失败。

标签: xcode jenkins cocoapods


【解决方案1】:

“构建输出目录”设置也可能导致此问题。

将“构建输出目录”的值从相对路径更改为完全指定的路径为我修复了它。

例如而不是 'MyOutputDirectory' 使用 '/Users/Shared/Jenkins/home/jobs/JenkinsProject/workspace/MyOutputDirectory'

【讨论】:

    【解决方案2】:

    问题可能是因为您有不同的(自定义)构建配置。

    看看这个:

    https://github.com/CocoaPods/CocoaPods/issues/121

    尝试将以下搜索路径添加到“库搜索路径”(适用于所有配置)

    $(SYMROOT)/Release$(EFFECTIVE_PLATFORM_NAME)
    

    【讨论】:

      【解决方案3】:

      您可以尝试选择您的 Pods 项目并设置 Build Settings->Build Active Architectures Only->NO for Release and Debug,对 Pods 中的每个目标重复此操作。

      【讨论】:

        【解决方案4】:

        我无法与 XCode 插件交谈,因此我的回答可能会被认为有些反应迟钝,但这是我的工作方式。

        我添加了一个如下所示的构建步骤:

        export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer/
        echo $WORKSPACE
        cd "/Users/[jenkins-accountname]/.jenkins/jobs/[jobname]/workspace/[xcode project name]"
        pod install
        xcrun xcodebuild -workspace [your workspace (not project) name] -scheme [the build scheme to build] clean build -destination "platform=iOS,name=CurtsiPhone" -destination-timeout 120
        

        -destination-destination-timeout 是成功的关键构建参数。我的项目只能在手机上构建,因为它使用了专门的库,所以我的手机必须插上电源才能让 XCode 找到它。如果您的项目将在模拟器中构建,您可能不需要它,但是我只有在明确指定目的地时才让它工作。

        如果 XCode 插件允许您声明额外的编译参数,您应该尝试这些。

        【讨论】:

          【解决方案5】:

          如果您使用的是 XCode 5,那么我认为 this 应该会有所帮助

          基本上更新您的 Gemfile(如果不存在,则创建一个)并添加:

          gem 'cocoapods', :git => 'http://github.com/CocoaPods/CocoaPods', :branch => 'xcode-5-support'
          gem 'xcodeproj', :git => 'http://github.com/CocoaPods/Xcodeproj', :branch => 'redacted-support'
          

          另外,如果你的 Podfile 中有 config.build_settings['ARCHS'] = 'armv7' 之类的东西,别忘了去掉它,你也需要有 armv7s。

          希望这会有所帮助,因为它让我避免了几天的噩梦。

          【讨论】:

            猜你喜欢
            • 2017-11-09
            • 1970-01-01
            • 2021-04-10
            • 1970-01-01
            • 2018-08-12
            • 1970-01-01
            • 1970-01-01
            • 2014-07-06
            • 1970-01-01
            相关资源
            最近更新 更多