J'ai évalué un ensemble d'actifs personnalisés dans un projet iOS que j'ai évalué, donc je sais au moins que c'est possible.
Mon problème est que j'utilise un CATiledLayer avec environ 22 000 tuiles pour une image donnée et qu'il faut beaucoup de temps pour compiler (une compilation d'une demi-heure, 5-10 minutes pour une construction régulière). Donc, je veux prendre toutes les images et créer un bundle personnalisé pour le rendre portable et, espérons-le, pas recompiler dans le bundle d'applications à chaque fois.
Comment puis-je m'y prendre? J'ai vérifié la documentation, mais je n'ai pas vu d'explication sur la manière de créer réellement le paquet.
La réponse est bêtement simple
Créez un dossier dans le Finder, ajoutez-y des fichiers, renommez-le en bundlename.bundle
glisser dans Xcode - succès!
pour y accéder, utilisez le formulaire PathToMainBundle + "/ bundlename.bundle"
Comment créer un paquet
.bundle
(par exemple, "Nouveau dossier" -> "BundleName.bundle").PS: Vous pouvez à tout moment faire un clic droit sur le dossier et cliquer sur "Afficher le contenu du paquet" afin d’ajouter, de supprimer ou de modifier n’importe quel fichier.
Comment ajouter le paquet à Xcode
Comment utiliser le paquet
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
NSString *resource = [bundle pathForResource:@"fileName" ofType:@"fileType"];
(Remplacez BundleName
, fileName
et fileType
par les noms appropriés)
Deux autres conseils utiles:
Tout d'abord, pour voir le contenu de l'ensemble dans XCode, vous devez définir son type dans le volet Utilitaire de l'inspecteur de fichier, sur "Ensemble d'application". Vous ne pourrez toujours pas copier vers et depuis via XCode. Vous devrez utiliser Terminal, mais XCode le mettra à jour immédiatement.
Deuxièmement, pour utiliser les ressources du lot, voici un extrait utile ...
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"AquarianHarp" ofType:@"bundle"];
NSString *imageName = [[NSBundle bundleWithPath:bundlePath] pathForResource:@"trebleclef2" ofType:@"png"];
UIImage *myImage = [[UIImage alloc] initWithContentsOfFile:imageName];
Comme mentionné dans mon commentaire ci-dessus, vous n'avez pas besoin de charger le paquet (vous ne pouvez pas, car ce n'est pas un exécutable) et la variable ofType
doit correspondre à la casse de votre fichier réel pour qu'il fonctionne sur le périphérique . Cela fonctionnera de toute façon dans le simulateur, alors ne vous laissez pas berner par ce fil rouge!
Enfin, vous n'avez pas besoin de placer vos ressources dans le sous-dossier "Ressources" du paquet. Il semble que vous puissiez utiliser une disposition arbitraire, mais il peut y avoir des conséquences inconnues sur les performances.
Voici comment cela fonctionne: Dans XCode, créez un nouveau fichier | Ressource | Ensemble de paramètres. Ensuite, dans le Finder, sélectionnez cet ensemble, choisissez Afficher le contenu du paquet et ajoutez les fichiers image.
Ensuite, dans le code, référencez une image de cette façon:
NSString *imgName = @"bundlename.bundle/my-image.png";
UIImage *myImage = [UIImage imageNamed:imgName];
Mes notes sur le regroupement et la lecture de fichiers dans un projet XCode
print(Bundle.main.resourcePath!+"/temp.bundle/test.txt")
Output: /Users/James/Library/Developer/Xcode/DerivedData/GitSyncMac-heiwpdjbtaxjhicuckgugu/guid/Products/Debug/GitSyncMacApp.app/Contents/Resources/Resourcesprint(content(Bundle.main.resourcePath!+"/temp.bundle/test.txt"))// testing✌️
static func content(_ path:String)->String?{
do {
let content = try String(contentsOfFile:path, encoding:String.Encoding.utf8) as String//encoding: NSUTF8StringEncoding
return content
} catch {
return nil
}
}
Voici les étapes à suivre pour créer un ensemble d’actifs ou de ressources (par exemple, FrameworkResources.bundle
). C’est étonnamment peu évident. Ceci est particulièrement utile si vous créez des cadres statiques.
SDKROOT
) par "iOS '