8 Stimmen

Ordnen Sie POD-Spezifikationsattribute verschiedenen Build-Einstellungen in ihrer Xcode-Konfiguration (z. B. Release, Debug) zu.

Ich versuche, eine POD-Spezifikation für ein vorhandenes Bibliotheksprojekt zu erstellen.

In dem Xcode-Projekt definieren die Build-Einstellungen verschiedene Präprozessormakros für verschiedene Build-Konfigurationen (z. B.: "Debug" und "Release")

Zum Beispiel:

Für die "Debug" Konfiguration:

GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 

Für die "Release" Konfiguration:

GCC_PREPROCESSOR_DEFINITIONS = NDEBUG NS_BLOCK_ASSERTIONS

Wie kann ich diese Einstellungen der entsprechenden POD-Spezifikation zuordnen?

Zum Beispiel:

spec.compiler_flags = '-DDEBUG=1'

und

spec.compiler_flags = '-DNDEBUG -DNS_BLOCK_ASSERTIONS'

Leider ist die offizielle Dokumentation im Allgemeinen meist verwirrender und unklarer, als wirklich hilfreich:

Build-Einstellungen

Build-Einstellungen

In dieser Gruppe werden die Attribute aufgeführt, die sich auf die Konfiguration der Build-Umgebung beziehen, die zum Erstellen der Bibliothek verwendet werden sollte.

Wenn in einem Subspec nicht definiert, erben die Attribute dieser Gruppe den Wert des Elternelements.

Beispiele:

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

Intuitiv würde ich etwas wie folgt machen:

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

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

Aber das ist nur geraten.

6voto

Shigerello Punkte 1854

Aktualisierung

Ich war zu schnell mit dieser Lösung und tatsächlich funktioniert diese nicht.

Obwohl Bedingte Variablendefinition der xcconfig-Syntax einen Wert bedingt für Architektur und Plattform festlegt, funktioniert es anders für Konfigurationen. Aufgrund dieses Unterschieds funktioniert diese Lösung nicht mit CocoaPods' xcconfig-Vererbungsmechanismus.

Der Ersteller von dieser SO-Frage anscheinend, und auch ich, konnte Conditional Variable Assignment für Konfigurationen in der Podspec nicht erfolgreich nutzen.


Mit Bedingter Variablendefinition der xcconfig-Syntax kannst du es erreichen:

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

Doch es gibt eine kleine Nebenwirkung, wie in einer anderen SO-Frage erwähnt, wo die resultierenden Build-Einstellungen in Pod.xcconfig auf irgendeine Weise mehrfach definiert werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X