2011-03-14 7 views
5

Actualicé a Xcode 4 hoy y mis macros de texto personalizado ya no funcionan. No puedo encontrar ninguna información sobre cómo usar macros personalizadas con Xcode 4. ¿Esto todavía es posible? Por favor, avíseme si alguien ha encontrado una solución.¿Cómo creo macros de texto personalizadas en Xcode 4?

Este es el directorio en el que tengo actualmente mi archivo 'ObjectiveC.xctxtmacro'. ~/Library/Application Support/Developer/Shared/Xcode/Specifications

Respuesta

11

El formato de cómo se definen las macros de texto y dónde viven ha cambiado: las macros de texto se han transformado en fragmentos de código.

Lo que puede hacer es crear un nuevo fragmento de código (con cualquier cosa, simplemente arrastre texto a la ventana de fragmento de código), luego busque el formato actual de un fragmento (macro) y migre sus macros actuales allí.

El directorio en el que se van es:

~/Library/Developer/XCode/UserData/CodeSnippets 

Allí se podrán ver los archivos con nombres como:

E4B300B5-E0EA-4E46-9963-6E9B2111E578.codesnippet 

Lo bueno es que no se tiene que utilizar nombres UUID - Pude copiar uno de ellos en un archivo llamado "MyTest.codesnippet" y XCode todavía lo lee.

Así que tendría un archivo por cada macro existente (ya que normalmente hay un número de macros en los archivos .xctxtmacro más antiguos), puede utilizar el texto de macro real tal como está, ya que la sintaxis del parámetro no ha cambiado (aunque todos los metadatos alrededor de una macro han cambiado sustancialmente). Tendrá que convertir las partes "<"/">" de cualquier parámetro definido en la sintaxis XML-safe &lt;/&gt;, ya que los archivos son listas ples XML ahora. A modo de ejemplo, el contenido de una macro simple que produce NSLog(@"Hello Nurse: %@",cosa); cuando "enfermera" se escribe:

<?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>IDECodeSnippetCompletionPrefix</key> 
    <string>nurse</string> 
    <key>IDECodeSnippetCompletionScopes</key> 
    <array> 
     <string>All</string> 
    </array> 
    <key>IDECodeSnippetContents</key> 
    <string>NSLog(@"Hello Nurse %@", &lt;#Thing#&gt;); 
</string> 
    <key>IDECodeSnippetIdentifier</key> 
    <string>E4B300B5-E0EA-4E46-9963-6E9B2111E579</string> 
    <key>IDECodeSnippetLanguage</key> 
    <string>Xcode.SourceCodeLanguage.Objective-C</string> 
    <key>IDECodeSnippetTitle</key> 
    <string>TestNurse</string> 
    <key>IDECodeSnippetUserSnippet</key> 
    <true/> 
    <key>IDECodeSnippetVersion</key> 
    <integer>2</integer> 
</dict> 
</plist> 

Tenga en cuenta que un aspecto de fragmentos de código que falta de texto macros, es que utilizó para ser capaz de definir parámetros en el texto seleccionado iría al activar una macro de texto (mediante la adición de ! después de la # como en <#!ReplaceParam!#>) - en el sistema Fragmento de código, no parece ser una forma de aplicar un fragmento de código al texto seleccionado , solo puedes arrastrarlo como nuevo. Sin embargo, los parámetros aún funcionan como parámetros normales.

+0

Muchas gracias por la respuesta en profundidad. Confié mucho en las macros de texto personalizadas y esto me estaba matando. Y es tan extraño cómo sabías que siempre incluyo 'Hello Nurse' en mis declaraciones de registro. ;) – Christine

+0

En cierto modo, el nuevo sistema es un poco mejor. Más personas pueden crear fragmentos de código ahora, creo, ya que no tienen que crear un directorio y un archivo en algún lugar. Además, la finalización funciona mejor, solía tener que escribir la finalización y forzar manualmente el reconocimiento con Ctrl-. , pero ahora solo escribes un poco de la finalización y presionas return y off it goes. –

+0

No estoy seguro de si esto es lo que quería decir, pero puede usar <#paramName#> para definir un parámetro. –

Cuestiones relacionadas