2008-10-06 3 views
3

Nous essayons de créer un modèle de projet, mais la documentation sur ce sujet est inégale ou inexistante.Aide spécifique avec Xcode Project Template qui ne fait pas de substitution dans le contenu du fichier

En faisant de l'ingénierie inverse sur certains fichiers de modèle, nous avons trouvé ce qui suit. Cependant, ça ne marche pas!

Tout d'abord, nous avons compris que les modèles de projet doivent être installés à l'intérieur:

~/Bibliothèque/Application Support/Developer/Shared/Xcode/Project Templates

Nous avons fait projet et installé ici, et cette partie fonctionne - nous voyons ce spectacle dans la section "Modèles utilisateur" du sélecteur "Nouveau projet" de Xcode.

Le dossier du projet contient les fichiers suivants. Comme vous pouvez le voir, je veux que les noms de fichiers soient substitués (cette partie fonctionne) mais comme vous le verrez, je veux aussi que le contenu des fichiers soit substitué; cela n'arrive pas.

  • ___ PROJECTNAME ___. Xcodeproj
  • ___ PROJECTNAMEASIDENTIFIER ____ Prefix.pch
  • ___ PROJECTNAMEASIDENTIFIER ___. ICNS
  • ___ PROJECTNAMEASIDENTIFIER ___ Delegate.h
  • ___ PROJECTNAMEASIDENTIFIER ___ Delegate.m
  • ___ PROJECTNAMEASIDENTIFIER ___ Template.html
  • Debug.xcconfig
  • en.lproj
  • Info.plist
  • Release.xcconfig

J'ai mis dans deux dossiers spéciaux dans le ___ ___ PROJECTNAME package xcodeproj:.

  • TemplateInfo.plist
  • TemplateIcon. icns - l'icône à afficher dans la fenêtre Nouveau projet

Si je crée un nouveau projet (appelé "Foo & Bar" comme un test de stress) en utilisant ce modèle, ce sont les fichiers qu'il crée:

  • Debug.xcconfig
  • en.lproj
  • Foo & Bar.xcodeproj
  • Foo ___ Bar_Prefix.pch
  • Foo ___ Bar.icns
  • Foo ___ BarDelegate.h
  • Foo ___ BarDelegate.m
  • Foo ___ BarTemplate.html
  • Info.plist
  • Release.xcconfig

Jusqu'ici tout va bien!

Mais en regardant dans le contenu du fichier, je reçois des choses comme ça. Voici le contenu de Foo ___ BarDelegate.m:

// 
// «PROJECTNAMEASIDENTIFIER»Delegate.m 
// «PROJECTNAME» 
// 
// Created by «FULLUSERNAME» on «DATE». 
// Copyright «ORGANIZATIONNAME» «YEAR» . All rights reserved. 
// 

#import "«PROJECTNAMEASIDENTIFIER»Delegate.h" 


@implementation «PROJECTNAMEASIDENTIFIER»Delegate 

@end 

La question apparente est que d'une certaine manière que je fais le mal TemplateInfo.plist. Mais là encore, remarquez comment non seulement mes articles spéciaux ne sont pas remplacés, mais les articles standard ne sont même pas remplacés! Alors peut-être que c'est un problème plus profond.

Mais avec un TemplateInfo.plist problématique étant ma meilleure hypothèse, je présente quelques variations que j'ai essayées. Aucun travail.

Soit:

{ 
    FilesToMacroExpand = (
     "\_\_\_PROJECTNAMEASIDENTIFIER\_\_\_\_Prefix.pch", 
     "en.lproj/InfoPlist.strings", 
     "\_\_\_PROJECTNAMEASIDENTIFIER\_\_\_\_Prefix.pch", 
     "\_\_\_PROJECTNAMEASIDENTIFIER\_\_\_.icns", 
     "\_\_\_PROJECTNAMEASIDENTIFIER\_\_\_Delegate.h", 
     "\_\_\_PROJECTNAMEASIDENTIFIER\_\_\_Delegate.m", 
     "\_\_\_PROJECTNAMEASIDENTIFIER\_\_\_Template.html", 
     "Info.plist" 
    ); 
    Description = "This project builds a cocoa-based \"element\" plugin for Sandvox."; 
} 

ou:

{ 
    FilesToMacroExpand = (
     "«PROJECTNAMEASIDENTIFIER»\_Prefix.pch", 
     "en.lproj/InfoPlist.strings", 
     "«PROJECTNAMEASIDENTIFIER»\_Prefix.pch", 
     "«PROJECTNAMEASIDENTIFIER».icns", 
     "«PROJECTNAMEASIDENTIFIER»Delegate.h", 
     "«PROJECTNAMEASIDENTIFIER»Delegate.m", 
     "«PROJECTNAMEASIDENTIFIER»Template.html", 
     "Info.plist" 
    ); 
    Description = "This project builds a cocoa-based \"element\" plugin for Sandvox."; 
} 

Mise à jour: J'ai aussi essayé d'ajouter la touche "FilesToRename", même si le ___ semble être la cause automatiquement renommant arriver . Ceci est le contenu plist avec que, en format XML (puisque certaines personnes étaient inquiets que la nature UTF-8 des choses - oui, c'est un plist valide):

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Description</key> 
    <string>This project builds a cocoa-based "element" plugin for Sandvox.</string> 
    <key>FilesToMacroExpand</key> 
    <array> 
     <string>«PROJECTNAMEASIDENTIFIER»_Prefix.pch</string> 
     <string>en.lproj/InfoPlist.strings</string> 
     <string>«PROJECTNAMEASIDENTIFIER».icns</string> 
     <string>«PROJECTNAMEASIDENTIFIER»Delegate.h</string> 
     <string>«PROJECTNAMEASIDENTIFIER»Delegate.m</string> 
     <string>«PROJECTNAMEASIDENTIFIER»Template.html</string> 
     <string>Info.plist</string> 
    </array> 
    <key>FilesToRename</key> 
    <dict> 
     <key>___PROJECTNAMEASIDENTIFIER___.icns</key> 
     <string>«PROJECTNAMEASIDENTIFIER».icns</string> 
     <key>___PROJECTNAMEASIDENTIFIER___Delegate.h</key> 
     <string>«PROJECTNAMEASIDENTIFIER»Delegate.h</string> 
     <key>___PROJECTNAMEASIDENTIFIER___Delegate.m</key> 
     <string>«PROJECTNAMEASIDENTIFIER»Delegate.m</string> 
     <key>___PROJECTNAMEASIDENTIFIER___Template.html</key> 
     <string>«PROJECTNAMEASIDENTIFIER»Template.html</string> 
     <key>___PROJECTNAMEASIDENTIFIER____Prefix.pch</key> 
     <string>«PROJECTNAMEASIDENTIFIER»_Prefix.pch</string> 
     <key>___PROJECTNAME___.xcodeproj</key> 
     <string>«PROJECTNAME».xcodeproj</string> 
    </dict> 
</dict> 
</plist> 
+0

Danwood, veuillez ajouter vos propres conseils sur cette question pendant que vous continuez à les découvrir. Votre publication de cette question m'a ré-inspiré pour essayer moi-même et j'aimerais entendre ce que vous conclurez finalement une fois que tout cela fonctionne. – pestophagous

Répondre

4

Vous voulez probablement utiliser un " FilesToRename "section. Ce qui suit provient du modèle PyObjC Cocoa Document Based Application. Ça fonctionne bien.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
     <key>Description</key> 
     <string>This project builds a Cocoa-based application written in Python that uses the NSDocument architecture.</string> 
     <key>FilesToMacroExpand</key> 
     <array> 
       <string>«PROJECTNAME»_Prefix.pch</string> 
       <string>Info.plist</string> 
       <string>English.lproj/InfoPlist.strings</string> 
       <string>English.lproj/MainMenu.xib</string> 
       <string>English.lproj/«PROJECTNAMEASIDENTIFIER»Document.xib</string> 
       <string>main.py</string> 
       <string>«PROJECTNAMEASIDENTIFIER»Document.py</string> 
       <string>main.m</string> 
     </array> 
     <key>FilesToRename</key> 
     <dict> 
       <key>CocoaAppDocument.py</key> 
       <string>«PROJECTNAMEASIDENTIFIER»Document.py</string> 
       <key>CocoaDocApp_Prefix.pch</key> 
       <string>«PROJECTNAMEASIDENTIFIER»_Prefix.pch</string> 
       <key>English.lproj/CocoaAppDocument.xib</key> 
       <string>English.lproj/«PROJECTNAMEASIDENTIFIER»Document.xib</string> 
     </dict> 
</dict> 
</plist> 
+0

Mes fichiers semblent être renommés automatiquement; Je pense que c'est le contenu à l'intérieur qui n'est pas géré. – danwood

4

Une autre ressource est Jesse Grosjean de XcodeTemplateFactory. C'est gratuit et open source et peut vous sauver de futurs maux de tête.

+0

Le lien semble être cassé. Vous avez trouvé le projet sur http://groups.google.com/group/hogbaysoftware/browse_thread/thread/f8a56455ec1a4e72?pli=1 – Buzzy

2

Il existe deux styles de modèles, distingués par les délimiteurs de macro de modèle: l'ancien style utilise des guillamots MacRoman dans un fichier UTF-8, et le nouveau style utilise des sous-barres triples. Vous ne pouvez pas mélanger et assortir. Le nouveau style est pour 3.1 et plus tard seulement, et vous devez également utiliser les sous-barres triples dans les noms de fichiers.

3

Suite à la réponse de Chris (« Il y a deux types de modèles ... »), vous pouvez trouver des exemples du nouveau style dans les modèles pour une autre plate-forme ...

L'extrait ci-dessous présente des exemples de quelques variables de substitution typiques utilisant des sous-barres triples; Si vous les utilisez à la place des variables basées sur guillamot dans votre Foo ___ BarDelegate.m, cela devrait fonctionner.

// 
// ___PROJECTNAMEASIDENTIFIER___AppDelegate.m 
// ___PROJECTNAME___ 
// 
// Created by ___FULLUSERNAME___ on ___DATE___. 
// Copyright ___ORGANIZATIONNAME___ ___YEAR___. All rights reserved. 
// 

#import "___PROJECTNAMEASIDENTIFIER___AppDelegate.h" 

@implementation ___PROJECTNAMEASIDENTIFIER___AppDelegate 
0

Pourquoi vous manque les "< <" comme des symboles? C'est la raison pour laquelle xcode ne reconnaît pas et ne remplace pas les balises de gabarit.

0

Je me cognais juste la tête au même problème! Pour moi, en ajoutant des fichiers dans les travaux de plist, j'ai changé le fichier html avec le fichier php et il est analysé. Mais maintenant, il n'analyse que quelques premiers éléments de la liste. ancien fichier html est encore: «PROJECTNAME» Comme ce programme ne compte pas le nombre d'éléments qu'il ya dans une liste ...

Mais où est l'endroit dans le code, où il ne le fait pas ... ?

Questions connexes