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>
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