web-dev-qa-db-fra.com

Comment fonctionnent les paramètres Mogenerator, que puis-je envoyer via Xcode?

L'aide pour Mogenerator est très minime. Que font tous les paramètres?

64
Senseful

Paramètres qui fonctionnent à la fois via l'utilitaire de ligne de commande et Xcode:

  • --base-class: Le nom de la classe de base que la "classe privée" (par exemple _MyObject.h) héritera de. Cela ajoutera également une importation sous la forme de #import "MyManagedObject.h" à la même .h fichier. Conseil: si la classe dont vous souhaitez hériter se trouve dans une bibliothèque, l'instruction d'importation par défaut ne fonctionnera pas. Comme solution de contournement, vous pouvez avoir un niveau d'héritage supplémentaire pour chaque projet que vous créez et faire hériter cette classe de la bibliothèque (par exemple, définissez la classe de base sur MyProjectManagedObject que vous créez manuellement et héritez de MyLibManagedObject).
  • --template-path: Le chemin vers lequel les 4 .motemplate les fichiers sont localisés. Lorsque ce n'est pas fourni, il examinera tous les "répertoires de support d'application" (par exemple "/Library/Application Support/mogenerator/").
  • --template-group: Un nom de sous-répertoire sous le template-path répertoire à utiliser.
  • --template-var arc=true: Obligatoire pour les fichiers générés à compiler lors de l'utilisation d'ARC.
  • --output-dir: répertoire de sortie de tous les fichiers générés.
  • --machine-dir: Le répertoire où le _<class>.h et _<class>.m sera affiché dans. Si --output-dir est également défini, ce paramètre est prioritaire.
  • --human-dir: Le répertoire où le <class>.h et <class>.m sera affiché dans. Si --output-dir est également défini, ce paramètre est prioritaire.
  • --includem: le chemin complet vers un fichier qui comprendra tous les #import pour tous les .h fichiers créés. Ce fichier n'a pas besoin d'exister (c'est-à-dire qu'il sera créé pour vous s'il ne l'est pas). Ce fichier ne sera pas automatiquement inclus dans le projet pour vous. Vous devez l'inclure manuellement en le faisant glisser dans la liste Groupes et fichiers de votre projet.

L'utilisation de chemins relatifs dans Xcode pour l'un des arguments ci-dessus ne fonctionnera pas car le répertoire de travail est défini sur l'un des répertoires racine du système (par exemple, Applications, Developer, Library ou System). (Je n'ai pas eu assez de temps pour déterminer lequel d'entre eux c'est exactement.)

Paramètres qui ne peuvent pas être utilisés dans Xcode:

  • --model: Le chemin d'accès au fichier .xcdatamodel ne peut pas être défini dans Xcode.
  • --list-source-files
  • --orphaned
  • --versioned
  • --help

Exécution et envoi de paramètres à xmod via Xcode:

(Mise à jour: je n'ai pas essayé cela sur Xcode 4, seulement Xcode 3. Pour Xcode 4, vous pouvez ajouter mogenerator comme phase de construction au lieu de suivre les étapes suivantes.)

  1. Accédez à la page d'informations du .xcdatamodel fichier.
  2. Choisissez l'onglet Commentaires.
  3. Ajoutez xmod au champ de commentaires, sur sa propre ligne.
  4. Chaque fois que vous enregistrez le modèle, il régénérera les fichiers machine pour vous.

Pour envoyer des paramètres, ils doivent être sur leur propre ligne (s):

Cela marche:

xmod
--base-class CLASS
--template-path PATH

Et même cela fonctionne:

xmod
--base-class CLASS --template-path PATH

Mais cela ne fonctionnera pas:

xmod --base-class CLASS --template-path PATH

Remarque: vous devez fermer la fenêtre Info pour que les paramètres prennent effet.

144
Senseful

Depuis XCode 4, la fenêtre Info n'est plus disponible, alors ne vous inquiétez pas si vous ne pouvez pas le configurer comme indiqué ci-dessus.

Utilisez le guide de John Blanco pour configurer une cible de script qui vous permet de passer des arguments de ligne de commande directement à mogenerator. Notez que vous devrez peut-être légèrement modifier les chemins dans son exemple ... lancer un pwd dans le script et vérifier les chemins par rapport au répertoire de travail du script s'il ne fonctionne pas immédiatement pour vous.

Pour obtenir la liste des arguments de ligne de commande disponibles, exécutez mogenerator --help dans le terminal. AFAICT, tous travaillent à partir de l'étape de script.

Voir cette réponse pour une autre façon d'appeler mogenerator via une "pré-action" si vous voulez reconstruire automatiquement vos fichiers machine avec chaque build. Il y a aussi une bonne astuce pour mettre un script mogenerator dans votre VCS.

6
Kevin Clifton

Voici la sortie de --help à partir de la version 1.27

mogenerator: Usage [OPTIONS] <argument> [...]

  -m, --model MODEL             Path to model
  -C, --configuration CONFIG    Only consider entities included in the named configuration
      --base-class CLASS        Custom base class
      --base-class-import TEXT        Imports base class as #import TEXT
      --base-class-force CLASS  Same as --base-class except will force all entities to have the specified base class. Even if a super entity exists
      --includem FILE           Generate aggregate include file for .m files for both human and machine generated source files
      --includeh FILE           Generate aggregate include file for .h files for human generated source files only
      --template-path PATH      Path to templates (absolute or relative to model path)
      --template-group NAME     Name of template group
      --template-var KEY=VALUE  A key-value pair to pass to the template file. There can be many of these.
  -O, --output-dir DIR          Output directory
  -M, --machine-dir DIR         Output directory for machine files
  -H, --human-dir DIR           Output directory for human files
      --list-source-files       Only list model-related source files
      --orphaned                Only list files whose entities no longer exist
      --version                 Display version and exit
  -h, --help                    Display this help and exit

Implements generation gap codegen pattern for Core Data.
Inspired by eogenerator.
1
LostInTheTrees

Aussi, peut-être sera utile. Pour déterminer quels paramètres peuvent être utilisés pour

--template-var KEY=VALUE

ouvrez le fichier * .motemplate et recherchez une chaîne comme "TemplateVar". après le point, vous verrez le nom du paramètre et pourrez comprendre ce qu'il fait.

Ce paramètre a un modèle intégré

--template-var arc=true 
--template-var frc=true
--template-var modules=true
0
oks_ios