web-dev-qa-db-fra.com

Comment créer un ensemble d'actifs iOS?

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. 

53
michael

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"

89
michael

Comment créer un paquet

  1. Créez un dossier dans le Finder.
  2. Ajouter des fichiers au dossier
  3. Renommez le dossier de manière à ce que son extension soit .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

  1. Faites-le glisser dans 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)

34
hfossli

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.

25
Hari Karam Singh

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]; 
10
LandedGently

Mes notes sur le regroupement et la lecture de fichiers dans un projet XCode 

Pas:

  1. Créez un fichier test.txt et ajoutez-y le texte "testing", puis placez-le dans un dossier nommé test.bundle
  2. Glissez-le et déposez-le à côté de votre fichier .app dans xcode (copie)
  3. print(Bundle.main.resourcePath!+"/temp.bundle/test.txt") Output: /Users/James/Library/Developer/Xcode/DerivedData/GitSyncMac-heiwpdjbtaxjhicuckgugu/guid/Products/Debug/GitSyncMacApp.app/Contents/Resources/Resources

Exemple:

print(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
    }
}
0
eonist

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.

  1. Appuyez sur Fichier -> Nouveau -> Cible dans Xcode
  2. Sélectionnez l'onglet "macOS", recherchez "Bundle"
  3. Appuyez sur "Bundle" -> cliquez sur "Suivant" -> tapez le nom du produit "MyResources" -> appuyez sur "Terminer"
  4. Aller à "Paramètres de construction" pour le Bundle nouvellement créé. Remplacez "Kit de développement logiciel de base" (SDKROOT) par "iOS '
  5. Allez à "Build Phases" pour le Bundle nouvellement créé. Supprimer "Compiler les sources" et "Lier les fichiers binaires avec les bibliothèques" (cela supprimera l'exécutable de l'ensemble, ce qui pourrait causer toutes sortes d'erreurs de création et de soumission d'applications)
0
kgaidis