2016-03-10 10 views
20

Ich erstelle ein neues Cocoa Touch Framework (MyFramework.framework), das von Alamofire abhängig sein wird. Dieser Rahmen wird in Swift geschrieben. Als Test habe ich eine neue Cocoa Touch Framework-Projekt gestartet:Kann ich CocoaPods beim Erstellen eines Cocoa Touch Framework verwenden?

File > New > Project > Framework & Library > Cocoa Touch Framework 

Dann im Terminal durchgeführt I:

pod init 

unter dieser Projekte Verzeichnis. In der neu geschaffenen Podfile habe ich folgendes:

source 'https://github.com/CocoaPods/Specs.git' 
# Uncomment this line to define a global platform for your project 
platform :ios, '8.0' 
# Uncomment this line if you're using Swift 
use_frameworks! 

pod 'Alamofire', '~> 3.0' 

erneut im Terminal I ausgeführt:

pod install 

und begann Codierung entfernt.

Alles schien gut und gut, bis ich das MyFramework.framework Produkt in einem Einzelansicht-Projekt verwendet. Wenn ich versuche, das Projekt, das ich das folgende Problem bekommen auszuführen:

dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire 
Referenced from: /Users/me/Library/Developer/CoreSimulator/Devices/87DA70B6-49BF-441E-BD81-F4A80B0792CF/data/Containers/Bundle/Application/2E414EA8-7E54-4D71-9295-566D4FAAADE2/test.app/Frameworks/MyFramework.framework/MyFramework 
Reason: image not found 

dachte ich, dass Cocoa Touch Framework-Projekte von Natur aus Dynamische waren, und daher würden alle Abhängigkeiten enthalten.

Kann mir jemand sagen, warum das passiert und wie ich es beheben kann? Ist das ein Problem mit CocoaPods oder fehlt mir etwas?

Ich bin ein Noob zu Stack Overflow, also lassen Sie mich bitte wissen, wenn Sie weitere Informationen von mir benötigen.

Danke!

Antwort

16

Leider CocoaPods unterstützt nicht die Verwendung mit Cocoa Touch Framework Ziel. Ich fand einige Hinweise auf diese, während sie durch ihre Probleme auf GitHub Graben:

Wir wirklich nicht unterstützen Pods in Rahmen Ziele zu integrieren ...
- neonichu am 4. Nov., 2015

und

..., um diese „einfach funktionieren“, CP müßte eine rekursive Analyse von Abhängigkeiten in Ihrem Xcode-Projekt zu tun und auch irgendwie dafür sorgen, dass Sie nie das Build Produkt in einem anderen contex verwenden t.
- neonichu am Jul 7, 2015


Bisher habe ich zwei Wege gefunden, mit dem Thema zu befassen:

Der richtige Weg ist eine neue pod spec für Ihren Rahmen zu schaffen, und bringe es über CocoaPods in dein Hauptprojekt ein. Dies löst alle Probleme, die CocacaPods mit dem Abhängigkeitsgraphen hat und ist die empfohlene Lösung von den CocoaPods-Entwicklern.

Der einfache Weg ist, die Pods aus Ihrem Framework in Ihr Hauptprojekt aufzunehmen. Das scheint zu funktionieren, aber ehrlich gesagt weiß ich nicht warum.Dies ist der Podfile von meinem Testprojekt:

platform :ios, '9.0' 
use_frameworks! 

def myfirstframework_pods 
    pod 'Alamofire', '~> 3.0' 
end 

target 'MyApp' do 
    pod 'SwiftKeychainWrapper', '~>1.0' 
    myfirstframework_pods 
end 

target 'MyFirstFramework' do 
    myfirstframework_pods 
end 
+0

Der Grund, warum dies funktioniert, ist, dass das Framework, das Sie bauen, glücklich ist, solange seine Abhängigkeiten in der App eingebettet sind (verbinden Sie sie einfach, und sie werden von der App eingebettet). Apple scheint sehr wählerisch zu sein, Frameworks zu integrieren - der einzige Ort, an dem sie hinzugefügt werden sollten, ist in der App. Dies dient dazu, viele verschiedene Frameworks zu vermeiden, die verschiedene Versionen von Frameworks hinzufügen, die Chaos verursachen könnten. Ich muss nur "Java Classpath" erwähnen, um ein Bild des anderen Extrems zu geben. Also ja, Frameworks in Frameworks zu verwenden, ist sehr schwierig, aber kann mit so genannten Regenschirm-Header getan werden. –

+1

Der "einfache Weg" gibt Ihnen ein "[!] Das 'Pods-MyApp' Ziel hat Frameworks mit widersprüchlichen Namen: googeltoolboxformac" für bestimmte Bibliotheken wie Firebase. –

+0

Sehr hilfreiche Post! – VaporwareWolf

-1

einfach die Alamofire.framework das „Embedded Binärdateien“ Abschnitt im Ziel „Allgemein“ Registerkarte Ihrer Anwendung hinzufügen.

+2

Es gibt keinen Abschnitt "Embedded Binaries" für Cocoa Touch Framework-Ziele, nur die "Verknüpften Frameworks und Bibliotheken". – xZenon

+0

Es gibt auch eine Option für Cocoa Touch Framework – Donal

Verwandte Themen