2014-09-12 21 views
13

Vorrei includere le risorse immagine in una libreria cocoapod, ma ho problemi ad accedervi. Ho letto queste risorse per un aiuto:Accesso alle risorse nel pod

Cocoapods Resources

Cocoapods Resource Bundles

Mokacoding Resource Bundles

David Potter Resource Bundles

Tuttavia, nessuno mi punto nella direzione di accesso alle risorse. Ho provato il seguente:

[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle bundleWithIdentifier:@"Assets"] URLForResource:@"[email protected]" withExtension:@"png"]]] 
[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle bundleWithIdentifier:@"Assets"] URLForResource:@"my-image" withExtension:@"png"]]] 
[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle bundleWithIdentifier:@"Assets.bundle"] URLForResource:@"my-image" withExtension:@"png"]]] 
[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle mainBundle] URLForResource:@"my-image" withExtension:@"png"]]] 
[[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle mainBundle] URLForResource:@"[email protected]" withExtension:@"png"]]] 
[UIImage imageNamed:@"my-asset"] 
[UIImage imageNamed:@"[email protected]"] 

Ma nessuno di loro funziona.

Ho installato il mio podspec con queste alternative e né lavoro con quanto sopra:

s.resources = ['Pod/Assets/*.{png, jpg}', 'Pod/Assets/**/*.{png, jpg}'] 
s.resource_bundles = { 
    'Assets' => ['Pod/Assets/*.{png, jpg}', 'Pod/Assets/**/*.{png, jpg}'] 
} 

Le risorse appaiono in 'Sviluppo Pods/My App/Resources' dopo un pod update, ma non posso accedere per la vita di me. Non ci sono pacchetti e non c'è nulla chiamato "Risorse".

Qualsiasi aiuto o guida sarebbe apprezzato.

+0

fai sia '' s.resources' e s.resource_bundles' o provato separatamente? Forse c'è qualche scontro. –

+0

@NiklasBerglund Entrambi separatamente. – RileyE

risposta

5

Anche questo mi ha fatto inciampare. Forse sto fraintendendo lo +bundleWithIdentifier:, ma non penso che tu possa usarlo per ottenere un pacchetto di risorse all'interno del tuo pacchetto di app iOS. Vedi la sezione "Getting Bundles by Identifier" dei documenti bundle per maggiori dettagli.

Nei funziona è +bundleWithPath:, es .:

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"MyResourceBundle" ofType:@"bundle"]; 
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 

Ho avvolto che all'interno di un blocco dispatch_once e chiamo ogni volta ho bisogno di accedere a questo pacchetto.

Sto usando anche la sintassi s.resource_bundles nel mio podspec e questo funziona perfettamente.

9

Dipende dalla versione di Cocoapod che si utilizza. Con le versioni precedenti di cocoapods, si potrebbe ottenere via con l'utilizzo di [NSBundle mainBundle]: pathForResource: OfType:

NSString *bundlePath = [[NSBundle mainBundle] 
    pathForResource:@"MyResourceBundle" ofType:@"bundle"]; 
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 

Se si utilizza più recenti Cocoapods e utilizzando spec.resource_bundles invece di spec.resources nel file podspec, è dovrà evitare mainBundle e sostituirlo con NSBundle bundleForClass, che "Returns the NSBundle object with which the specified class is associated"

Esempio:

NSString *bundlePath = [[NSBundle bundleForClass:[MyFrameworkClass class]] 
    pathForResource:@"MyResourceBundle" ofType:@"bundle"]; 
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 
+0

Grazie - guarderò a questo – RileyE

+0

Come estensione di questo, ho trovato che questo non funziona per il caricamento di immagini da cataloghi di risorse situati in un Cocapod. Maggiori informazioni qui: http://stackoverflow.com/a/23903860/235290 Ho confermato questo con i miei colleghi che hanno anche verificato che non esiste un modo noto per farlo. Quindi devi usare file di immagine standalone e non cataloghi di risorse. – Hugh

Problemi correlati