2016-02-23 21 views
5

Ich arbeite an Pods Entwicklung für ein iOS-Entwicklerteam (auf private Repo). Mein Low-Level-C/Obj-C-Core-Pod enthält eine statische Bibliothek mit einigen Headern und wird als Abhängigkeit in anderen Pods verwendet (Push mit --use-libraries).Private Pod mit statischen Bibliothek in zusammen mit swift pod

Jetzt, da das iOS-Team Swift-Pods integrieren möchte, mussten sie die Option use_framework! in die Poddatei ihrer Projekte einfügen. Natürlich erhalten sie die folgende Fehlermeldung während pod install:

Die transitive Abhängigkeiten ‚XXX‘ Ziel hat, die statische Binärdateien

ich nach einer Möglichkeit, einen halben Tag auf der Bahn verbracht zu machen meine Pods kompatibel mit der use_framework! Option, vergeblich. Dies ist sehr frustrierend, da die Pods von Google Services belegen, dass dieses Problem sauber umgangen werden kann (nicht mit dem Trick verify_no_static_framework_transitive_dependencies): Der Haupt-Pod und fast alle Abhängigkeiten enthalten statische Bibliotheken und alles funktioniert perfekt zusammen mit Swift-Pods . Beispiel mit Google/SignIn, die von Google/Core (vendored_libraries: Libraries/libGGLCore.a) und GoogleSignIn (vendored_libraries: Libraries/libSignIn.a) abhängig ist.

Haben Sie eine Idee, was ich tun kann, um meine Pods mit der Option use_framework! kompatibel zu machen?

Vielen Dank an alle,

Cheers,

Tom

+0

Hey Tom, Ich kämpfe auch mit ... Und ehrlich gesagt habe ich jetzt keine Ahnung. Worüber ich mich gefragt habe: Sind Sie sicher, dass Google den Trick gemacht hat? Ich nehme an, dass GoogleSignIn eine statische Bibliothek ist, die in Objective-C geschrieben wurde. Also - korrigieren sie mich, wenn ich das falsch verstanden habe - müssen Sie nicht "use_framework" verwenden! überhaupt ... – niggeulimann

+0

Ja, aber ich nehme an, dass GoogleSignIn auch statisch ist ... – niggeulimann

+0

Google/SignIn pod hängt von Google/Core pod und GoogleSignIn pod ab, die beide nur statische Bibliotheken (.a ausführbare Dateien) und Header enthalten. Im Grunde wie meine Schoten. Wenn Sie eine Poddatei mit dem Google/SignIn-Pod, einem schnellen Pod (z. B. Alamofire) und der Option "use_framework!" Erstellen, funktioniert die _pod install_ einwandfrei. Wenn ich dasselbe mit meinem Pod anstelle von Google/SignIn mache, habe ich den "transitive Abhängigkeiten" -Fehler ... Kann nicht herausfinden, was sie getan haben:/ – LeT0C

Antwort

3

Ich glaube, ich einen Hack für mein Problem gefunden. Das ist ziemlich seltsam, aber ich würde sagen, es ist sauber genug, um es in der Produktion zu verwenden;)

Ich fand es here. Die Idee ist einfach, eine Quelldatei (auch eine leere) in Ihre Quelldatei in Ihrer Podspec aufzunehmen.

Grundsätzlich sieht die Quelle Abschnitt meines podspec wie folgt aus:

s.source_files = "myLib/Empty.m", "myLib/Headers/*.h" 
s.vendored_libraries = "myLib/myLib.a" 

Die einzige Änderung vorgenommen I „MyLib/Empty.m“ in den Quelldateien (Empty.m ist streng leer) . Ohne es habe ich systematisch die transitiven Abhängigkeiten Fehler, wenn ich Pod installieren. Mit ihm pod installieren funktioniert gut. Es funktionierte für mich mit beiden Cocoapods 0.0.39 und 1.0.0 β4.

Nun, sieht aus wie es ist ein nicht so schmutzig Lösung, aber ich bin mir nicht sicher, es wird in jedem Fall funktionieren. Und es gibt keine guten Nachrichten über die Sauberkeit von Cocoapods ...

Wie ich schon früher in Kommentaren erwähnt habe, scheint Google eine sauberere Lösung gefunden zu haben. Also, wenn jemand eine Idee von der wirklich sauberen Lösung haben, bitte teilen!

Cheers,

Tom

PS: Ich denke, ich werde die Datei DirtyCocoapodHack.m statt Leere nennen.m, sicher, dass sie es im Dev-Team lieben werden;)