2014-10-19 13 views
5

Um Code und Ressourcen zwischen meiner App und Erweiterungen zu teilen, bette ich ein Cocoa Touch Framework in meinem Projekt, dieses Framework enthält einige Ressourcen wie Bild und XIB-Dateien.iOS 8: Ressource von Cocoa Touch Framework erhalten

Meine Frage ist: Wie greife ich auf diese Ressourcen von May Main App und Erweiterungen?

ich verwenden, um dieses Verfahren zu verwenden: iOS 8 Extension: how to use xib inside Cocoa Touch Framework in extensions?

aber dies wird eine Kopie an alle Ressourcen in App-Bündel und Bündel Erweiterungen, das ist keine gute Wiederholung ist.

Gibt es einen besseren Weg?

Update:

Jetzt ist meine Haupt App Code verwenden können Ressource in Frameworks zuzugreifen:

+(NSBundle*)frameworkBundle 
{ 
    NSString *frameworkDirPath = [[NSBundle mainBundle] privateFrameworksPath]; 
    NSString *frameworkBundlePath = [frameworkDirPath stringByAppendingPathComponent:@"MyFramework.framework"]; 
    NSBundle *frameworkBundle = [NSBundle bundleWithPath:frameworkBundlePath]; 

    return frameworkBundle; 
} 

aber das funktioniert nicht für Erweiterungen.

Antwort

15

Try this:

NSBundle *frameworkBundle = [NSBundle bundleForClass:[AnyClassFromFramework class]]; 
+0

Es wirft einen anderen Weg als der Code, der ist in der Frage, warum? Was sollen wir verwenden? – Gabox

+0

Das Erstellen von Bundles mit bundleForClass ist besser als das Erstellen aus dem Pfad. Ich konfrontiert dieses Problem während der Entwicklung, in der wir coredata momd Datei von Test-App zu verbrauchen, danach haben wir die App in ein Framework konvertiert und momd als Ressource hinzugefügt. Jetzt suchte die Test-App, die die momd-Datei konsumierte, in mainBundle, während sie jetzt falsch ist. Die momd-Datei wird in das Framework verschoben. Verwenden Sie also immer bundleForClass und geben Sie die Klasse an, die der Ressource am nächsten ist/direkt verwendet. – Omkar

5

Das ist für mich gearbeitet:

NSBundle * frameworkBundle = [NSBundle bundleWithIdentifier:@"<framework-bundle-identifier>"]; 
+0

Dies funktioniert nur für die dynamische Bibliothek, für die statische Bibliothek gibt es null zurück. – njuxjy

0

Für rasche, in Betracht ziehen:

let bundle = NSBundle(forClass: self.dynamicType) 
+0

Dies ist nur für Swift 3+. – emrekyv

Verwandte Themen