Ошибка связи с созданием приложения с помощью Cocoapods с использованием xcodebuild на Jenkins

Я пытаюсь создать экземпляр 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.

Я искал похожие проблемы и пытался/проверял кучу вещей:

  • Я использую рабочее пространство.
  • Я выполняю pod install до этапа xcodebuild.
  • Я проверил эти архитектуры на самом проекте, цель и Pods одинаковы - стандартный (armv7, armv7s) - как было предложено этим ответом
  • Я пробовал различные решения от этот поток GitHub
  • Я пробовал различные настройки для данных Derived Data в соответствии с этим ответом и схожими
  • Подкаст задает platform :ios, :deployment_target => "6.0"

В этот момент я не понимаю, что еще нужно попробовать.

Ответы

Ответ 1

Параметр "Build Output Directory" также может вызывать это.

Изменение значения "Build Output Directory" из относительного пути к полностью определенному пути исправлено для меня.

например. вместо "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 для Release и 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'

Также, если у вас есть такие вещи, как config.build_settings['ARCHS'] = 'armv7' в вашем подпикселе, не забудьте избавиться от него, вам тоже понадобится armv7.

Надеюсь, это поможет, потому что это спасло меня несколько дней кошмара.