2013-10-04 10 views
5

Ich habe gerade Code überarbeitet und eine statische Bibliothek erstellt, die ich jetzt in einem Framework verwende, das in einigen Apps verwendet wird. Ich benutze Cocoapoden und habe Probleme, meine neue statische Bibliothek richtig in die podspec zu integrieren.Cocoapods podspec issue

Ich stelle fest, dass Builds fehlschlagen, da die statische Bibliothek im Build fehlt. Wenn ich die statische Bibliothek der endgültigen App manuell hinzufüge, funktionieren das Framework und die App einwandfrei. Ein Build-Team erstellt die endgültigen Versionen der Apps, und aus diesem Grund war ich nur dafür verantwortlich, podspec nur für das Framework zu aktualisieren.

Kann ich die Pod-Spezifikation ändern, um die statische Bibliothek als verknüpfte Bibliothek festzulegen, die in den Build-Phasen der endgültigen App angezeigt wird?

UPDATE:

Wenn zum framework.library Attribut meiner Unter spec die statische lib Hinzufügen Ich erhalte library not found for -lMyStaticLib

subspec REFERENZ:

s.subspec 'MyStaticLibrary' do |msl| 
    mss.source_files = 'FrameworkSource/My-Static-Library/*.{h,a}' 
    msl.library = 'MyStaticLib' 
    msl.xcconfig = { 'HEADER_SEARCH_PATHS' => '"$(SRCROOT)/Pods/My-Framework-Name/FrameworkSource/My-Static-Library"/**', 'LIBRARY_SEARCH_PATHS' => '"$(SRCROOT)/Pods/My-Framework-Name/FrameworkSource/My-Static-Library"/**' } 
    #msl.frameworks = 'MyStaticLib' 
    end 

UPDATE 2: I Das Attribut wurde in msl.vendored_libraries = 'MyStaticLib' geändert. Außerdem wurden Pfade in podspec validiert. Alles scheint zu "scheinen". Ich bekomme immer noch Buildfehler. Wenn ich für ein Gerät gebaut (I gleichen Fehler, aber für i386, wenn ich bauen für Simulator):

Undefined symbols for architecture armv7: 
    "_OBJC_CLASS_$_MyStaticLibrary", referenced from: 
     objc-class-ref in MyFramework(FileInFramework.o) 
ld: symbol(s) not found for architecture armv7 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

ich auch wieder bestätigt, dass, wenn ich gehen Sie einfach auf die Build-Phasen App und durchqueren die Pods Ordner und manuell Fügen Sie die MyStaticLibrary.a-Datei zu dem Projekt hinzu, das ohne Problem erstellt wird.

+0

Immer noch keine Lösung dafür? Ich stoße auf ein ähnliches Problem und würde Ihre Weisheit schätzen, falls Sie es geschafft haben, es zu beheben. – brainray

Antwort

3

Sie können das Framework in Ihrem podspec definitiv hinzufügen. Schauen Sie sich die wiki entry on the Podspec format.


Edit: Ah, was Sie suchen ist vendored_frameworks oder vendored_libraries, die in 0.23.0 aufgenommen. Sieht so aus, als ob diese noch nicht zum Wiki hinzugefügt wurden. Wird das jetzt aktualisieren!

+0

Ich denke, der Link, den Sie meinten, war https://github.com/CocoaPods/CocoaPods/wiki/The-podspec-format Ihre Links zu Steelcase ;-) Ich habe meinen Beitrag mit weiteren Informationen aktualisiert. – propstm

+0

Hoppla! Das Problem behoben und meine Antwort aktualisiert. – MishieMoo

+0

Ich habe meinen Beitrag mit mehr Informationen aktualisiert. Jetzt bekomme ich undefinierte Architekturfehler. Es ist, als ob das Projekt die Bibliothek sieht, aber auf nichts darin zugreifen kann. – propstm

2

Versuchen Sie, Ihre MyStaticLib.a Datei in libMyStaticLib.a umzubenennen. Ich bekam auch den library not found for -lMyStaticLib Fehler und reparierte ihn, indem ich einen lib Präfix dem Dateinamen hinzufügte.

+0

Das war auch mein Problem, danke –

1

Für den Fehler Library not found for -lxxxxxxx, wenn Sie statische Bibliothek Name MyStaticLib.a ist, versuchen zu libMyStaticLib.a Umbenennung und es in perserve_paths Eigenschaft setzen, so dass Ihre statische Bibliothek wird nicht nach dem Download entfernt werden,:

msl.libraries = 'MyStaticLib' 
msl.perserve_paths = 'libMyStaticLib.a' 

Dann Gehe zur Build-Einstellung deines Projekts: stelle sicher, dass du den Parameter -lMyStaticLib in 'Other Linker Flags' hast.

Für die ARM und i386 Architektur Probleme, ARM bedeutet iOS-Gerät, und i386 bedeutet Simulator, besser, um Ihre statische Bibliothek Universal, dann wird es auf beiden Architekturen arbeiten.

+0

Warum brauche ich '' Andere Linker Flags''? Ist es nicht ausreichend, es in '' LIBRARY_SEARCH_PATHS'' zu setzen? – confile

0

ändern Sie die:

msl.vendored_libraries = 'MyStaticLib'

zu:

msl.vendored_libraries = 'FrameworkSource/My-Static-Library/libMyStaticLib.a'

und cocoapods einen Suchpfad hinzufügen.

Verwandte Themen