Question

J'ai créé une bibliothèque statique dans Xcode, que je suis en mesure d'utiliser avec succès dans d'autres projets. Cependant, avec des ressources comme plists, je trouve que je dois inclure tous les plists référencés dans ma bibliothèque dans le projet principal où le projet est utilisé.

Dans mon projet de bibliothèque statique, j'ai mon plist inclus dans la phase « Ressources Bundle copie » de la cible. Dans mon code, voici ce que je fais:

NSBundle *mainBundle = [NSBundle mainBundle];
NSString *filePath   = [mainBundle pathForResource:@"MyClassParams" ofType:@"plist"];

NSMutableDictionary* params = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

Si je mainBundle et MyClassParams.plist est inclus dans le projet principal, tout est bon. Si MyClassParams.plist est inclus dans le projet de bibliothèque, il ne fonctionne pas.

Dans l'hypothèse où [NSBundle mainBundle] faisait référence à la méthode statique mal à utiliser, je l'ai remplacé par:

NSBundle *mainBundle = [NSBundle bundleForClass:[MyClass class]];

Cela ne fonctionne pas non plus.

Alors, est-il possible d'inclure une plist ou toute autre ressource avec une bibliothèque statique - ou dois-je inclure tout ce que je besoin dans le projet où le lib est utilisé

Était-ce utile?

La solution

Les bibliothèques statiques ne sont pas en faisceaux, quand ils sont liés dans une application, ils font partie de ce paquet d'applications. Sur l'iPhone, en fait tout le code que vous écrivez sera dans le mainBundle puisque vous ne pouvez pas inclure des cadres intégrés.

Alors oui, vous devez copier sur toutes les ressources dans le projet que vous liez le cadre statique dans.

Autres conseils

Je sais que vous ne pouvez pas inclure des fichiers de ressources dans une bibliothèque statique (c'est ce que les cadres font). J'utilise une autre solution dans mes projets:

Dans la bibliothèque statique projet "YYY":

  • ajouter une cible "chargeable Bundle" à mon projet de bibliothèque statique (Ajouter une cible, Cocoa, chargeable Bundle)
  • J'ajouter cet objectif en tant que dépendance de la cible de bibliothèque statique

A l'intérieur du projet principal:

  • Lier le libYYY.a
  • Ajoutez le paquet YYY.bundle aux fichiers de ressources copiés

De cette façon, les fichiers de ressources utilisés dans la bibliothèque statique ne sont pas gérées dans le projet principal. Dire que j'ai une image foo.png dans la bibliothèque statique, j'utilise

[UIImage imageNamed:@"YYY.bundle/foo.png"]

Vous pouvez alors obtenir votre plist comme ceci:

NSBundle *staticLibBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"YYY" ofType:@"bundle"]];
NSString *filePath   = [staticLibBundle pathForResource:@"MyClassParams" ofType:@"plist"];

NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

Ci-dessous, deux captures d'écran:

  • gauche : projet de bibliothèque statique avec cible bundle chargeable
  • droite :. Montrant les « bibliothèques avec lien binaire » binaire bibliothèque statique ajouté à et le faisceau de ressources ajouté à « Copier bundle ressources »

projet de bibliothèque statique Projet principal

J'ai suivi tout @Jilouc suggéré, cependant, je peux obtenir le paquet, mais n'a pas réussi à obtenir des fichiers à l'intérieur. J'ai essayé à la fois les deux façons (ou @"yyy.bundle/image" staticlib pathforresource...)

Ensuite, je la méthode ci-dessous et cela a fonctionné!

NSBundle *staticBundle = [NSBundle bundleWithPath:[[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:@"yy.bundle"]];

NSString *filePath = [[jsBundle resourcePath]stringByAppendingPathComponent:fileName];

NSString* content = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top