Cómo crear templates de proyecto en Xcode 4

Es realmente difícil encontrar un tutorial para hacer esto ya que la mayoría de la información se relaciona con Xcode 3. La respuesta a continuación puede ayudar a algunas personas.

Obtuve la mayor parte de mi información para la respuesta a continuación de los siguientes sitios:

  • http://meandmark.com/blog/2011/12/creating-custom-xcode-4-project-templates/
  • http://www.bobmccune.com/2012/03/04/creating-custom-xcode-4-file-templates/

Pasé horas buscando en la web para encontrar información sobre cómo hacer esto. En realidad, no es tan difícil configurar templates de proyecto para Xcode4.5, pero es difícil encontrar información en la web que lo integre. Con suerte, los pasos a continuación le ayudarán a crear el suyo propio.

Configuración

  1. Comencemos por get una copy de una plantilla de proyecto existente de Xcode para usarla como base. Abra el buscador, vaya a Aplicaciones y haga clic derecho en Xcode para mostrar el contenido del package. Navegue a Contenido / Desarrollador / Plataforms / iPhoneOS.platform / Desarrollador / Biblioteca / Xcode / Plantillas / Plantillas de proyecto / Aplicación /

[EDIT] En Xcode 5, el PATH es el siguiente: ~ / Library / Developer / Xcode / Templates / Application / Project Templates. Si no existen templates / aplicaciones / templates de proyectos, también debe crearlas. Crédito a seufagner en los comentarios a continuación para la actualización aunque no he probado esto yo mismo. [/EDITAR]

  1. Copie (no corte / pegue!) Una de las templates enumeradas.
  2. Abra otra window del buscador y navegue hasta el siguiente directory (para mostrar su carpeta de biblioteca, escriba este cmd en el terminal: chflags nohidden ~ / Library / o select la tecla alt / opción onclick en Finder / Go) / Library / Developer / Xcode / Plantillas (es posible que necesite crear esta carpeta si aún no está presente) / Plantillas de proyecto /
  3. Crea una carpeta aquí. Llámelo como desee, una sugerencia es el nombre de su compañía. Este nombre aparece en el menu de la izquierda del nuevo dialog del proyecto en Xcode. Por ejemplo, en la image adjunta, he llamado el mío Appscore, hay otro para cocoas2d. introduzca la descripción de la imagen aquí
  4. Pegue la plantilla del proyecto aquí y cambie su nombre de carpeta a lo que desee, por ejemplo, MySuperProjectTemplate.xctemplate. Aún no hemos terminado, ya que necesitamos cambiar el identificador de la plantilla. De lo contrario, no aparecerá en la window de dialog del nuevo proyecto Xcode.
  5. Abra el file TemplateInfo.plist en TextEdit. Busque la key de identificador. Debería ver un valor de cadena similar a "com.apple.dt.unit.XXXXXX". Reemplaza esto con lo que desees, siempre y cuando sea único. Sugiero nuevamente agregar el nombre de su compañía y un nombre que describa la plantilla.
  6. Si ahora abre Xcode, debería ver la plantilla del proyecto que aparece bajo el nombre de su empresa en el nuevo dialog del proyecto.

Personalización

En este momento tienes una copy de una plantilla de proyecto existente que no es muy útil. Supongo que tienes varias classs que se vuelven a usar en casi todos tus proyectos. ¿Qué tal si los incluimos en esta plantilla?

  1. Copie los files que desee y péguelos en su nueva plantilla de proyecto, por ejemplo, vaya a / Library / Developer / Xcode / Templates / Project Templates // MySuperProjectTemplate.xctemplate /
  2. Abra el file TemplateInfo.plist en TextEdit nuevamente. Lo primero que tenemos que hacer es decirle a la plantilla del proyecto que incluya los nuevos files, así que busque una key llamada "Nodos" que tenga una matriz de valores. Agregue las dos líneas siguientes:

    <string> _VARIABLE_classPrefix: identifier_ .h </ string> <string> _VARIABLE_classPrefix: identifier_ .m </ string>

Por ejemplo, si su controller se llamaba BaseViewController, las líneas se verían así:

<string> ___ VARIABLE_classPrefix: identificador ___ BaseViewController.h </ string> <string> ___ VARIABLE_classPrefix: identificador ___ BaseViewController.m </ string>

Paso 2

  1. A continuación, busque la key Definiciones y debería ver un dictionary como su valor. Aquí tenemos que agregar una reference a los files incluidos. Cree una nueva key y llámela ___ VARIABLE_classPrefix: identificador ___ BaseViewController.h (nuevamente tomando el BaseViewController como ejemplo).

Paso 3

  1. El valor de esta key es nuevamente un dictionary. Contiene una key llamada Ruta y un valor de cadena que es el nombre del file, por ejemplo BaseViewController.h
  2. Adjunto las siguientes imágenes para mostrar lo que quiero decir, ya que creo que mi descripción está fallando. Puede observar que hay una llave allí llamada "Grupo", esto como puede adivinar le permite crear grupos y ingresar files directamente: D

Espero que esto sea realmente útil para alguien 🙂 Cualquier comentario a continuación y haré mi mejor esfuerzo para responder. Lo hice hace unas semanas, así que mi memory es un poco confusa.

También puede aprender mucho inspeccionando las templates de proyectos existentes, que puede encontrar en:

/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/ 

para Mac y

 /Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/ 

para iOS

Hay algunas templates de muestra también en GitHub de Reid Main y otra en Acani . También hay templates AFNetworking , creadas por Mattt Thompson . Vea todos los ejemplos, incluidos los creados por Apple y luego puede comenzar a crear el suyo propio.

Puede encontrar una buena descripción de todas las variables utilizadas en el file Plist aquí: https://gist.github.com/shazron/943736

@bennythemink Tu respuesta es realmente mucha ayuda completa, pero quiero agregar algunas cosas más en tu respuesta. Cuando copymos la plantilla pnetworkingefinida de xcode que esta key contiene

 <key>Ancestors</key> <array> <string>com.apple.dt.unit.storyboardApplication</string> </array> 

este valor. Cuando usamos este valor key en la plantilla personalizada de xcode, creará la class AppDelegate de forma pnetworkingeterminada. Lo cual no podemos mover a la carpeta solo podemos cambiarlo por grupo. Entonces, sugiero agregar esto:

 <key>Ancestors</key> <array> <string>com.apple.dt.unit.objectiveCApplication</string> <string>com.apple.dt.unit.iPhoneBase</string> <string>com.apple.dt.unit.prefixable</string> </array> 

valor en plantilla personalizada para que tengamos una plantilla completamente vacía en la que podamos hacer cualquier cosa personalizada.