2011-03-14 32 views
5

我今天更新到Xcode 4,我的自定义文本宏不再有效。我找不到有关如何在Xcode 4中使用自定义宏的任何信息。这仍然有可能吗?请让我知道是否有人提出了解决方案。如何在Xcode 4中创建自定义文本宏?

这是我目前有我的'ObjectiveC.xctxtmacro'文件的目录。 〜/库/应用程序支持/开发人员/共享/ Xcode /规格

回答

11

定义文本宏的方式以及它们的居住位置已更改的格式 - 文本宏已变形为代码片段。

你可以做的是制作一个新的代码片段(带任何东西,只需拖动文本到代码片段窗口中),然后去寻找代码片段(宏)的当前格式,并将你当前的宏迁移到那里。

目录到哪里去是:

~/Library/Developer/XCode/UserData/CodeSnippets 

在那里你会看到文件与名称类似:

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

伟大的事情是,你不必使用UUID名 - 我能够将其中一个复制到名为“MyTest.codesnippet”的文件中,XCode仍然读取它。

因此,每个现有宏都有一个文件(因为旧的.xctxtmacro文件中通常有许多宏),所以可以使用实际的宏文本,因为参数语法没有改变(尽管宏观上的所有元数据都发生了很大变化)。您必须将定义的任何参数的“<”/“>”部分转换为XML安全语法&lt;/&gt;,因为这些文件现在是XML plists。举个例子,一个简单的宏产生NSLog(@"Hello Nurse: %@",东西的内容);当“护士”键入:

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

注意,代码段是从文本宏缺少的一个方面,就是你用于能够在激活文本宏时定义参数(在#之后添加!,如<#!ReplaceParam!#>) - 在代码片段系统中,似乎没有将代码片段应用于选定文本的方法,你只能将它拖出来作为新的。参数仍然作为正常参数。

+0

非常感谢您的深入解答。我非常依赖自定义文本宏,这让我非常吃惊。如果你知道我总是在日志中包含'Hello Nurse',那真是太奇怪了。 ;) – Christine 2011-03-14 23:31:06

+0

以某种方式,新系统更好一些。现在更多的人可以创建代码片段,因为他们不需要在某处创建目录和文件。此外,完成效果更好,您以前必须键入完成并用Ctrl-手动强制识别。 ,但是现在你只需输入一点完成并打回去即可。 – 2011-03-15 01:45:49

+0

不确定这是否是您的意思,但您可以使用<#paramName#>来定义参数。 – 2011-06-26 04:33:52