2009-09-17 9 views
10

J'ai plusieurs ressources dans mon application iPhone et lorsqu'elles sont compilées, elles sont toutes ajoutées à la racine du dossier des ressources dans l'application, quelle que soit la structure de regroupement de Xcode. C'est très bien pour la plupart des choses, mais il y a un ensemble de fichiers que j'ai besoin d'avoir structuré dans un dossier dans le dossier des ressources de l'application.Dossiers de création et de ressources Xcode

Pour l'instant, j'ai ajouté mes dossiers à Xcode en utilisant "Ajouter des fichiers existants ... -> Créer des références de dossiers pour les dossiers ajoutés". C'est très bien et les icônes de dossier dans Xcode sont bleues au lieu de jaune. Mon problème est que Xcode ne remarque pas et les fichiers nouveaux ou modifiés dans ces dossiers et donc lorsque je construis mon projet, aucune des images nouvelles ou modifiées ne sont dans les ressources de l'application cible. La seule façon de le faire fonctionner est de faire un nettoyage, puis de construire, ce qui est assez ennuyeux car je fais des changements et recompile parfois quelques fois par minute!

Ma structure de dossiers dans mes ressources que je veux conserver dans l'application se compose de plusieurs fichiers et dossiers imbriqués.

Existe-t-il un moyen de faire en sorte que Xcode reconnaisse tous les fichiers et dossiers qui ont été modifiés ou qui sont nouveaux?

Merci,

Mike

Répondre

10

Mon problème est que Xcode est ne pas avoir remarqué et nouveau ou modifié les fichiers dans ces dossiers et par conséquent lorsque je construis mon projet, aucune des images nouvelles ou modifiées ne se trouve dans les ressources de l'application cible.

Ceci est un bug de longue date; il m'a mordu plusieurs fois en travaillant sur Adium. Veuillez le déposer au RadarWeb. Et merci pour le rappel; J'ai déposé mon propre rapport de bug sous le nom x-radar: // problem/7232149 (visible to the public in OpenRadar). Vous devriez mentionner ce numéro de bogue dans votre propre rapport de bogue. Pour contourner le problème, vous pouvez cliquer avec le bouton droit de la souris sur la référence du dossier et choisir "Touch" pour indiquer à Xcode que le dossier a été modifié.

+0

Merci pour cette info. Je ne peux pas croire qu'ils ne l'ont pas abordé! Je trouve même que toucher les dossiers ne semble pas fonctionner, peut-être parce qu'il y a un peu d'imbrication. –

+1

Michael Waterfall: Oui; vous devez toucher le dossier spécifique que vous avez ajouté à votre projet. Toucher n'importe quoi dedans, y compris n'importe quel sous-dossier, ne fonctionnera pas (ou du moins pas la dernière fois que je l'ai essayé, ce qui était il y a quelque temps). –

+0

Je voudrais ajouter une autre solution de contournement. J'ai essayé de choisir le toucher comme l'a dit Peter Hosey, mais je n'ai pas aidé. Ce que j'ai fait était de copier le dossier hors du dossier de projet, de supprimer et de déplacer dans l'ancien dossier, de redémarrer xcode et d'ajouter le dossier en copiant les fichiers avec l'option dossiers comme d'habitude. – Pacu

-1

si vous voulez maintenir une structure de répertoire, il est préférable de le faire dans le répertoire des documents. Au lancement initial de vos applications, copiez les fichiers du bundle vers le répertoire de documents de la hiérarchie que vous préférez.

EDIT: après clarification, il semble que vous ayez juste besoin d'ajouter des chemins de recherche d'en-tête à votre projet. Ouvrez le volet d'informations sur les cibles, accédez à la section de génération et ajoutez le dossier racine de votre structure à la liste des chemins de recherche d'en-tête. Vérifiez récursive et vous devriez être mieux

+0

Le problème est n'existe pas dans le paquet de dossier sans utiliser les références de dossier et la construction du projet de cette façon. Et c'est le bâtiment avec lequel j'ai un problème. Manipuler les dossiers dans le paquet est très bien. J'ai juste besoin de Xcode pour reconnaître tous les nouveaux fichiers et dossiers dans les fichiers de mon projet sur chaque build afin qu'il les compile dans la cible sans avoir à nettoyer et à reconstruire à chaque fois. –

+0

Je pense que vous devriez jouer avec les chemins de recherche d'en-tête – coneybeare

+1

Les chemins de recherche d'en-tête sont pour #include, pas de ressources. –

4

j'ai eu votre premier problème moi-même aujourd'hui et je l'ai trouvé ce grand article qui parle du deuxième problème aussi: http://majicjungle.com/blog/?p=123

+0

Merci pour le super lien. J'ai essayé d'utiliser le script, mais il ne semble pas toucher les fichiers dans les sous-dossiers. Une idée de comment l'obtenir pour toucher les fichiers de manière récursive dans les sous-dossiers? –

3

Je viens de me faire mordre par ce bug aussi. Les réponses déjà données ici ont été d'une grande aide.

Je trouve la réponse dans cet autre fil utile aussi, mais je ne sais pas si elle est en fait une chose sûre à faire (il semble générer une nouvelle AppId ou quelque chose):

iphone simulator resources not updating

Ce sont mes notes personnelles que j'ai faites pour contourner le problème.

1) Open the project in Xcode 
2) Right-click the folder reference (BLUE folder) in the navigator 
    at its root and pick "Remove Reference" 
3) Close Xcode all the way 
4a) Warning, this step might cause other problems in your project. 
4b) Open the folder browser/Finder 
4c) Navigate to: /users/USERNAME/Library/Application Support/ 
      /iPhone Simulator/version/Applications/THISPROJFOLDER 
4d) Delete this whole THISPROJFOLDER. The name of the folder may be all 
    numbers, but this clears the Xcode "Cache" so it will rebuild things 
5) Find the actual folder where you store your pictures that were referenced, 
    and move the folder elsewhere and rename it. 
6) Now open Xcode 
7) In Xcode, select Product -> Clean. It should clean successfully. 
8) Now run the program through Xcode. It should run, but (hopefully) crash or 
    otherwise fail because it doesn't detect the resource files you removed. 
9) Now go standard Xcode usage and add the files back to the folder you want, 
    and add a reference to that folder in the Xcode navigator. Run the program 
    again, and it should detect the UPDATED PDFfiles/Imagefiles. 

EDIT: D'accord, je l'ai suivi la "réponse" des instructions de poste de Peter Hosey ci-dessus, et qui fonctionne aussi. Probablement mieux que ma solution ici, car mon étape 4 (obligatoire) semble regénérer une clé d'application ou quelque chose comme ça.

Alors voici comment je l'ai fixé dans Xcode 4.0 suivant le poste de Peter:

1) Open your project in Xcode 
2) Select the main project root item in the Navigator 
3) Select "Build Phases" in the main pane 
4) Select "Add Build Phase" button -> "Add Run Script" 
5) Reposition he "Run Script" entry bar in the screen, 
    and move it to just-before the Copy Bundle Resources area 
6) Edit the run-script you just added in the main pane: 
    : Set Shell to: /bin/sh (its the default, or try /bin/tsch) 
    : Set the script line to: touch -cm ${SRCROOT}/MyDocs 
    (Set it to your folder root area, matching the Blue Folder 
    area in your Navigator) 
7) Save it all and select "Product -> Clean" to clean project 
+0

Toute personne en mesure d'aider lors de l'utilisation de ce que je reçois une erreur en disant ..../bin/sh /: mauvais interprète: pas un répertoire – LmC