Qualche giorno fa ho scritto un articolo per illustrare l'integrazione della mia libreria DownPicker su CocoaPods. Come diretta conseguenza del refactoring effettuato per rendere il codice compatibile con i requirements del dependency manager più usato dagli sviluppatori XCode, alcuni utilizzatori della libreria mi hanno immediatamente fatto notare che la nuova versione, se installata tramite CocoaPods, non visualizzava più le immagini integrate, nonostante fossero presenti nelle directory /Assets/ , quest'ultima regolarmente inclusa nelle wildcard presenti nel percorso indicato come resource_bundle nel file .podspec relativo al progetto.
1 2 3 |
s.resource_bundles = { 'DownPicker' => ['DownPicker/**/*.*'] } |
Il problema era legato al fatto che il codice non conteneva alcun riferimento al bundle in questione, continuando a cercare l'immagine nella cartella principale del progetto: una pratica che funziona benissimo per un componente esterno inserito manualmente all'interno di un progetto XCode, ma sostanzialmente inadatta per un CocoaPod.
1 |
[self setArrowImage:[UIImage imageNamed:@"downArrow"]]; |
La soluzione è stata molto semplice, è bastato aggiungere un riferimento al bundle relativo al progetto sfruttando un overload aggiuntivo del metodo imageNamed:
1 2 |
NSBundle *bundle = [NSBundle bundleForClass:[self class]]; [self setArrowImage:[UIImage imageNamed:@"downArrow" inBundle:bundle compatibleWithTraitCollection:nil]]; |
Inutile dire che la medesima soluzione si adatta a qualsiasi altro tipo di asset o resource file non trovato. Nel caso in cui siate alle prese con un problema simile, adesso sapete come fare.
Felice sviluppo!