使用Cocoapods在Jenkins上使用xcodebuild构建应用时出现链接错误

14

我正在为我们的应用程序开发项目设置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),如此答案所建议的。
  • 我尝试了这个GitHub线程中的各种解决方案。
  • 我按照此答案和类似答案中的各种设置为派生数据位置尝试过各种解决方案。
  • Podfile指定了platform:ios,:deployment_target=>"6.0"

到那时,我不知道还能尝试什么。


你确定你正在编译工作区而不是项目吗?如果还没有尝试使用Jenkins Xcode插件并指定“Xcode工作区文件”。Xcode插件还可以帮助消除任何其他可能的偏差。上周我也遇到了同样的问题,花了数小时才意识到Jenkins正在编译Xcode项目,而不是Xcode工作区。此外,转到Jenkins正在编译的项目实际目录,在Xcode中打开它,看看自己能否编译 - 这也将更容易让您通过Xcode进行调试。 - cohen72
是的,肯定使用工作区而不是项目。正如我所说,我有一个非常类似的配置可用于运行逻辑和应用程序测试。 - Rob Fletcher
我了解,我知道,这很恼人……如果你还没有尝试过,也许这个页面(FAQ 中的第 4 页)可以帮助你 - https://github.com/CocoaPods/CocoaPods/wiki/Creating-a-project-that-uses-CocoaPods - cohen72
你使用哪个版本的Xcode来构建?Xcode5和Jenkins之间存在一些奇怪的问题。 - MishieMoo
自从升级到Xcode5以后,我这里也遇到了同样的问题。在Xcode中运行正常,但是使用xcodebuild时失败了。 - Dirty Henry
你解决了吗?我也遇到了同样的问题! - DemianArdus
5个回答

3

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

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

例如,使用“/Users/Shared/Jenkins/home/jobs/JenkinsProject/workspace/MyOutputDirectory”而不是“MyOutputDirectory”。


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

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

请将以下搜索路径添加到“库搜索路径”中(适用于所有配置)。
$(SYMROOT)/Release$(EFFECTIVE_PLATFORM_NAME)

0

我不太了解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 插件允许您声明额外的编译参数,请尝试使用它们。


0

你可以尝试选择你的Pods项目,并在Build Settings中设置Build Active Architectures Only为NO,分别对Release和Debug进行操作,再针对每个Pods目标重复此操作。


-2
如果您正在使用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。

希望这能帮到你,因为它让我省下了几天的噩梦。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接