Подтвердить что ты не робот

Как добавить пользовательские конфигурации проектов в Xcode при использовании CocoaPods?

У меня есть проекты iOS/OS X Xcode, где я использую CocoaPods, и я не могу понять, как добавить свои собственные конфигурации проектов (в дополнение к Debug и Release) без полного взрыва сборки.

В проекте у меня есть ряд целей для приложений на обеих платформах и расширениях приложений. Разумеется, в рабочем пространстве Xcode также есть проект Pods.

Поскольку проект создает цели для iOS и Mac, я использую "цели" CocoaPods для группировки своих модулей. Мой подфайл выглядит примерно так:

source 'https://github.com/CocoaPods/Specs.git'

target :iOS do
  platform :ios, '7.1'
  link_with 'iOS', 'NozbeToday', 'NozbeShare', 'NozbeWatch'

  # pods...
end

target :Mac do
  platform :osx, '10.9'
  link_with 'Mac'

  # pods...
end

Теперь, когда у меня есть проблема. До сих пор у меня были только настройки "Debug" и "Release" по умолчанию в моем проекте. Я хотел изменить их и добавить новые для различной конфигурации профиля/пакета ID.

... и я застрял. Я не могу понять, как это сделать.

Первым признаком проблемы было предупреждение pod install, израсходованное для каждой комбинации цели/конфигурации:

[!] CocoaPods не установили базовую конфигурацию вашего проекта потому что у вашего проекта уже есть собственный набор настроек. Для того чтобы CocoaPods интеграция для работы вообще, пожалуйста, либо установите базу конфигурации цели NozbeToday до Pods/Target Support Files/Pods-iOS/Pods-iOS.dev debug.xcconfig или включить Pods/Target Support Files/Pods-iOS/Pods-iOS.dev debug.xcconfig в вашей конфигурации сборки.

Я не мог понять, что это значит и как это исправить. В любом случае проект не будет построен - в лучшем случае я бы получил ошибку компоновщика, заявив, что не может найти Pods-something.a...

4b9b3361

Ответ 1

Хорошо, поэтому на полпути, написав этот вопрос, я сам это понял (yay rubber ducking). Здесь решение для следующих поколений:

По существу, вам нужно добавить явную зависимость от цели Pods к вашей схеме приложения.

Как вы это делаете, выполните следующие действия: отредактируйте схему своего приложения, перейдите в раздел "Сборка" и добавьте целевой объект "Под" выше. Вы должны увидеть что-то вроде этого:

enter image description here

И он будет работать.


Что касается предупреждений CocoaPods на pod install, вам нужно использовать файлы xcconfig, созданные CP для каждой из ваших конфигураций Xcode. Как вы это делаете:

  • найдите файлы .xcconfig в Pods/Target Support Files
  • перетащите их в группу "Pods" в вашем проекте Xcode (добавьте только ссылку). Не копируйте цель или добавьте в сборку)
  • Нажмите на проект в навигаторе проекта и выберите сам проект (а не одну из целей). Перейдите в раздел "Информация", а в разделе "Конфигурации" установите правильные .xcconfigs для каждой конфигурации и цели в столбце "На основе конфигурации".

Вам также понадобится что-то подобное в вашем подфайле, чтобы CocoaPods знали, какие из ваших конфигураций Xcode "отлаживаются" (неоптимизированы), которые являются "выпуском":

xcodeproj '1Nozbe', {
  'iOS 1 Dev Debug' => :debug,
  'iOS 2 Dev AdHoc' => :release,
  'iOS 3 Release Debug' => :debug,
  'iOS 4 Release AdHoc' => :release,
  'iOS 5 Release AppStore' => :release,
}

Не точно связано с CocoaPods, но если у вас есть другие (подпроекты) зависимости, отличные от CP, вам также нужно сделать две вещи:

  • добавить явные зависимости от целевой подпроекта (например, на скриншоте выше)
  • переименовать/добавить конфигурации в ваш подпроект, чтобы они были такими же, как ваш основной проект. (В противном случае Xcode просто не знает, какую конфигурацию использовать с вашим подпроектом)

Ответ 2

Добавьте эту строку в свой файл конфигурации, так же как импортируйте файл заголовка:

#include "Pods/Target Support Files/Pods/Pods.debug.xcconfig"

ПРИМЕЧАНИЕ: #include, а не #import