Définition et Propriétés des Bundles
Un bundle iOS est un paquet de ressources statiques utilisé pour regrouper des fichiers tels que des images, des fichiers XIB et des documents texte. Il ne participe pas à la compilation du projet et ne peut contenir de code exécutable ; il sert uniquement de conteneur pour des données binaires interprétées lors de l'exécution.
Processus de Création d'un Bundle
- Initailiser un nouveau projet bundle via Xcode en sélectionnant Fichier > Nouveau > Projet.
- Inclure les fichiers ressources souhaités, comme des images ou des fichiers XIB, dans le projet.
- Configruer les options de compilation : désactiver l'installation, supprimer les chemins d'installlation, cibler le système iOS, et appliquer des paramètres spécifiques pour éviter que les images ne soient au format TIFF.
- Compiler le bundle pour les appareils génériques iOS et un simulateur, puis vérifier que le fichier .bundle apparaît en noir dans le dossier Produits de l'explorateur de projets.
Intégration du Bundle dans un Projet Cible
Ajouter directement le fichier .bundle compilé, par exemple MonBundle.bundle, au projet iOS où il sera utilisé.
Accès aux Ressources du Bundle
Chargement d'un Nib pour un ViewController
Pour instancier un contrôleur de vue depuis le bundle :
NSString *cheminBundle = [[NSBundle mainBundle] pathForResource:@"MonBundle" ofType:@"bundle"];
NSBundle *bundleRessource = [NSBundle bundleWithPath:cheminBundle];
UIViewController *ctrlVue = [[UIViewController alloc] initWithNibName:@"nom_nib" bundle:bundleRessource];
Chargement d'Images
Première méthode avec imageNamed :
UIImageView *vueImage = [[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 50, 50)];
UIImage *imageBundle = [UIImage imageNamed:@"MonBundle.bundle/ressource_image"];
[vueImage setImage:imageBundle];
Seconde méthode avec imageWithContentsOfFile :
UIImageView *vueImage = [[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 50, 50)];
NSString *cheminImage = [cheminBundle stringByAppendingPathComponent:@"ressource_image.png"];
UIImage *imageFichier = [UIImage imageWithContentsOfFile:cheminImage];
[vueImage setImage:imageFichier];
Utilisation de Macros Précompilées
Pour simplifier les références au bundle dans le code :
#define NOM_BUNDLE @"MonBundle.bundle"
#define CHEMIN_BUNDLE [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: NOM_BUNDLE]
#define BUNDLE_RESSOURCES [NSBundle bundleWithPath: CHEMIN_BUNDLE]