在Xcode 6中删除默认代码片段

4

有人在Xcode中使用默认代码片段吗?其中有太多无用的代码片段,以至于我甚至不想在那里创建我的片段。

所以我在ST上寻找答案,但是它们并没有帮助很大。

有没有改进方法可以删除Xcode 6中的代码片段?

如果有进一步的问题,我可以导入或导出自定义片段,这样我就可以在不同的计算机上使用它们了吗?

非常感谢,


默认代码片段是什么意思?你是在说viewDidLoad和viewWillAppear方法吗?init方法是创建对象所必需的,如果不需要,可以移除其余两个方法。 - iOSdev
5个回答

6

是的,您可以删除默认片段。

由于片段以XML格式保存在路径下的plist文件中:

/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/SystemCodeSnippets.codesnippets

您可以在TextEdit中创建一个空的片段文件,并使用以下代码:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">
    <array></array>
</plist>

将其另存为SystemCodeSnippets.codesnippets。 用该文件替换上述命名的文件夹中的文件,即可删除默认系统片段。


1
好的答案!提示:如果您在应用程序文件夹下找不到Xcode下的文件夹结构,则只需右键单击Xcode并选择“显示包内容”。在Xcode 8中仍然有效。 - Mark Moeykens
1
但请注意,Xcode更新可能会重置plist文件,您必须再次执行此操作,或者编写一个复制文件脚本。 - Binarian

3
在 Xcode 10 中,默认片段位于:
/Applications/Xcode.app/Contents/PlugIns/IDESourceEditor.framework/Versions/A/Resources/SystemCodeSnippets.codesnippets

要删除内容,请将其更改为

<?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">
<array></array>
</plist>

2
我只使用Swift代码片段,并想要删除所有的C、C++和ObjC代码片段。在文件“/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/Current/Resources/SystemCodeSnippets.codesnippets”中进行清理似乎起作用了:我在代码片段库面板中只剩下了三个Swift代码片段。过滤和选择这些代码片段是有效的,但在代码片段过滤字段中按Enter键时,Xcode会崩溃多次。
因此,我恢复了旧文件,又有了完整的列表。
在stackoverflow上搜索后,我决定不删除默认代码片段,而是将它们存储为用户代码片段,具有相同的ID和更高的版本号。
作为一个小编程任务,我创建了一个OS X项目,并在生成的AppDelegate.swift的applicationDidFinishLaunching函数中添加以下代码:
  func applicationDidFinishLaunching(aNotification: NSNotification) {
    let filepathOfSystemSnippets = "/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/Current/Resources/SystemCodeSnippets.codesnippets"

    let folderForUserSnippets = "\(NSHomeDirectory())/Library/Developer/Xcode/UserData/CodeSnippets"

    print("reading \(filepathOfSystemSnippets)")
    let arrayOfDicts = NSMutableArray(contentsOfFile: filepathOfSystemSnippets)
    //        print("arry has \(arrayOfDicts?.count) entries")
    for (ix, dict) in arrayOfDicts!.enumerate() {
        let userDict = NSMutableDictionary(dictionary: dict as! [NSObject : AnyObject])
        userDict["IDECodeSnippetVersion"] = 2
        userDict["IDECodeSnippetTitle"] = "free user snippet \(ix) "
        userDict["IDECodeSnippetSummary"] = ""
        userDict["IDECodeSnippetContents"] = ""
        userDict["IDECodeSnippetLanguage"] = "Xcode.SourceCodeLanguage.Swift"
        userDict["IDECodeSnippetCompletionPrefix"] = ""
        userDict["IDECodeSnippetUserSnippet"] = true

        if let id = dict["IDECodeSnippetIdentifier"] as? String {
            let pathOfUserSnippet = "\(folderForUserSnippets)/\(id).codesnippet"
            if NSFileManager.defaultManager().fileExistsAtPath(pathOfUserSnippet){
                print("snippet with id \(id) already exists in \(pathOfUserSnippet) -> don't write.")
            } else {
                userDict.writeToFile(pathOfUserSnippet, atomically: false)
                //                    print("write snippet with id \(id) in \(pathOfUserSnippet)")
            }
        }
    }

}

我使用了我在答案中找到的硬编码文件夹名称,如果它们在未来版本的Xcode中更改,则可能需要更改。

运行应用程序后,用户片段文件夹将填充大约60个已清理的片段,准备好填充自己的源代码。


2

有一个名为SnippetEdit的应用程序。

它可以将所有默认的Xcode代码片段转换为用户代码片段。我已经在Xcode 7 Beta和Xcode 6上尝试过了。

但是,当它们是默认代码片段时,您不应删除Xcode中的用户代码片段。因为Xcode只会重新创建它们 :-(。

至少你可以通过这种方式来更改它们。更改标题内容


1
答案是:是的,
这些由用户生成的代码片段保存在路径
~/Library/Developer/Xcode/UserData/CodeSnippets
您可以简单地传递它们以保存和恢复它们。因此,您可以与他人共享它们,在另一台Mac上使用它们。

2
问题不在于找到用户创建的代码片段,而在于标准的代码片段。 - Damasio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接