ios xcode uiimage cocoapods resourcebundle

ios - Acceda a los recursos en pod



xcode uiimage (2)

Me gustaría incluir elementos de imagen en una biblioteca de cocoapod, pero tengo problemas para acceder a ellos. He leído estos recursos para obtener ayuda:

Recursos de Cocoapods

Paquetes de recursos de Cocoapods

Paquetes de recursos Mokacoding

Paquetes de recursos de David Potter

Sin embargo, ninguno me señala en el sentido de acceder a los recursos. He intentado lo siguiente:

[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle bundleWithIdentifier:@"Assets"] URLForResource:@"my-image@2x" 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:@"my-image@2x" withExtension:@"png"]]] [UIImage imageNamed:@"my-asset"] [UIImage imageNamed:@"[email protected]"]

Pero ninguno de ellos funciona.

Configuré mi podspec con estas alternativas y tampoco trabajo con lo anterior:

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

Los recursos aparecen en ''Pods de desarrollo / Mi aplicación / Recursos'' después de una pod update , pero no puedo acceder a ellos durante toda la vida. No hay paquetes y no hay nada llamado ''Activos''.

Cualquier ayuda o guía sería apreciada.


Esto me hizo tropezar también. Tal vez estoy malinterpretando +bundleWithIdentifier: pero no creo que pueda usarlo para acceder a un paquete de recursos dentro de su paquete de aplicaciones de iOS. Consulte la sección "Obtención de paquetes por identificador" de los documentos del paquete para obtener más detalles.

Lo que sí funciona es +bundleWithPath: por ejemplo:

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

Envolví eso dentro de un bloque dispatch_once y lo llamé en cualquier momento que necesite acceder a este paquete.

También estoy usando la sintaxis s.resource_bundles en mi podspec y esto funciona bien con ella.


Depende de la versión de Cocoapods que use. Con versiones anteriores de cocoapods, podría salirse con la suya usando [NSBundle mainBundle]: pathForResource: ofType:

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

Si está utilizando Cocoapods más nuevos y está usando spec.resource_bundles en lugar de spec.resources en su archivo podspec, debe evitar mainBundle y reemplazarlo con NSBundle bundleForClass, que " Devuelve el objeto NSBundle con el que está asociada la clase especificada "

Ejemplo:

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