Свяжите атрибуты POD Spec с различными настройками сборки из их конфигурации Xcode (например, Release, Debug)

Я пытаюсь создать спецификацию POD для существующего проекта библиотеки.

В проекте Xcode настройки сборки определяют разные макросы препроцессора для разных конфигураций сборки (например: «Отладка» и «Выпуск»).

Например:

Для конфигурации «Отладка»:

GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 

Для конфигурации «Выпуск»:

GCC_PREPROCESSOR_DEFINITIONS = NDEBUG NS_BLOCK_ASSERTIONS

Как сопоставить эти настройки с соответствующей спецификацией POD?

Например:

spec.compiler_flags = '-DDEBUG=1'

и

spec.compiler_flags = '-DNDEBUG -DNS_BLOCK_ASSERTIONS'

К сожалению, официальная документация в целом более запутанная и неясная, чем действительно полезная:

Настройки сборки

Настройки сборки

В этой группе перечислены атрибуты, связанные с конфигурацией среды сборки, которая должна использоваться для сборки библиотеки.

Если не определено в подспецификации, атрибуты этой группы наследуют значение родителя.

Примеры:

spec.compiler_flags = '-DOS_OBJECT_USE_OBJC = 0', '-Wno-format'

Интуитивно я бы сделал что-то вроде этого:

configuration :Debug do
    spec.compiler_flags = '-DDEBUG=1'
end

configuration :Release do
    spec.compiler_flags = '-DNDEBUG -DNS_BLOCK_ASSERTIONS'
end

Однако это предположение.


person CouchDeveloper    schedule 01.03.2014    source источник
comment
Я ищу ответ на этот точный вопрос, есть ли у вас обновления?   -  person Muhammad Arafat    schedule 10.10.2015


Ответы (1)


Обновить

Я слишком быстро перешел к этому решению, и на самом деле это не работает.

Хотя Условное присвоение переменных синтаксиса xcconfig устанавливает значение условно для архитектуры и платформы, оно работает по-разному для конфигурации. Из-за этой разницы это решение не работает с механикой наследования xcconfig CocoaPods.

OP этот вопрос SO, по-видимому, и я также не мог успешно использовать Conditional Назначение переменной для конфигурации в podspec.


Использование Условное присвоение переменных синтаксиса xcconfig , вы можете добиться этого:

s.pod_target_xcconfig = {
    'GCC_PREPROCESSOR_DEFINITIONS[config=Debug]' => '-DDEBUG=1',
    'GCC_PREPROCESSOR_DEFINITIONS[config=Release]' => '-DNDEBUG -DNS_BLOCK_ASSERTIONS'
}

Тем не менее, есть небольшой побочный эффект, как упоминалось в еще один вопрос SO, в результате чего настройки сборки будут каким-то образом определены в Pod.xcconfig несколько раз.

person Shigerello    schedule 10.12.2015