打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Xcode 修改系统的代码块样式 Code Snippet

Xcode在编码的时候,系统代码块给我们提供了很大的便利。然而,有时候,也给我们带来很大的困扰。

例如,系统的 if 代码块,大括号是紧跟括号之后的。


但是现在呢,公司的代码规范是要求另起一行。

那每次都得手动去调,的确是件很影响心情的事。

现在,就教大家怎么去修改系统的代码块样式。

xcode内置代码模板

Xcode的所有代码模板是用一个plist格式xml文件描述的,这文件存储在Xcode的安装目录:
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/SystemCodeSnippets.codesnippets

注意:Xcode5.1之前是在这个目录下
/Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/?
SystemCodeSnippets.codesnippets

用任意文本编辑打开这个文件,如下显示:

这个文件是没有权限去修改的。在这里就是所有的Xcode代码块的配置,包括常见的 if , if else , switch,dispatch等相关代码块。

每一个 key 所对应的意义也很好理解。下面教你如何去理解。在此之前,你应该知道Xcode左下角有个花括号的页签,这里面存储了很多代码提示模板,就是以上所配置的。

如果是自己拖拽进去的会有 User 标志。

自定义代码模块

关于拖拽进代码块的操作这里不作叙述,有不会的可以上网查查或者留言回复我再告之。

自己定义的代码块是在以下目录下:
~/Library/Developer/Xcode/UserData/CodeSnippets/

注意:只有自己定义过代码块,才会在UserData目录下存在CodeSnippets文件夹,否则是不存在的。

你可以试试写个randomColor(`self.view.backgroundColor = [UIColorcolorWithRed:arc4random()%255/256.0f green:arc4random()%255/256.0f blue:arc4random()%255/256.0f alpha:1.0f])的代码块,拖进去,你会发现在CodeSnippets文件夹下多了这么一个文件。

这儿的名字是可以更改的,后缀要写成.codesnippet 。

所以我把它更改成如下名字,便于分辨。

用任意文本编辑器打开,和Xcode左下角对比,很容易明白各个key所对应的意思。

这里要注意的是以下几个 key 。
IDECodeSnippetIdentifier 是唯一标识符,其中 if 模板的唯一标记是D70E6D11-0297-4BAB-88AA-86D5D5CBBC5D,不能重名,重名即会覆盖。
这也是我们更改系统代码块样式的核心思想!!!

IDECodeSnippetVersion 是版本号,一般系统的都是1,我们自己定义的写成2。保持默认1也没多大问题,只是Xcode有时会自动用标识符替换你的自定义命名,所以用2是比较合适的。

剩下的很重要的一步,如果是自定义的,一定要加以下这个 key, IDECodeSnippetUserSnippet ,定义为 true 。如果是自定义的而没有这个字段,Xcode是会崩溃的。

现在用 if 代码块对比一下系统的和自定义的区别。

系统的是

<dict>
        <key>IDECodeSnippetVersion</key>
        <integer>1</integer>
        <key>IDECodeSnippetCompletionPrefix</key>
        <string>if</string>
        <key>IDECodeSnippetContents</key>
        <string>if (<#condition#>) {
    <#statements#>
}</string>
        <key>IDECodeSnippetIdentifier</key>
        <string>D70E6D11-0297-4BAB-88AA-86D5D5CBBC5D</string>
        <key>IDECodeSnippetLanguage</key>
        <string>Xcode.SourceCodeLanguage.C</string>
        <key>IDECodeSnippetSummary</key>
        <string>Execute code only when a certain condition is true.</string>
        <key>IDECodeSnippetTitle</key>
        <string>If Statement</string>
        <key>IDECodeSnippetCompletionScopes</key>
        <array>
            <string>CodeBlock</string>
        </array>
    </dict>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

自定义的是

<dict>
        <key>IDECodeSnippetVersion</key>
        <integer>2</integer>
        <key>IDECodeSnippetUserSnippet</key>
        <true/>
        <key>IDECodeSnippetCompletionPrefix</key>
        <string>if</string>
        <key>IDECodeSnippetContents</key>
        <string>if (<#condition#>) 
{
    <#statements#>
}</string>
        <key>IDECodeSnippetIdentifier</key>
        <string>D70E6D11-0297-4BAB-88AA-86D5D5CBBC5D</string>
        <key>IDECodeSnippetLanguage</key>
        <string>Xcode.SourceCodeLanguage.C</string>
        <key>IDECodeSnippetSummary</key>
        <string>Execute code only when a certain condition is true.</string>
        <key>IDECodeSnippetTitle</key>
        <string>If Statement</string>
        <key>IDECodeSnippetCompletionScopes</key>
        <array>
            <string>CodeBlock</string>
        </array>
    </dict>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

看到这儿,到底如何去修改系统的代码块样式呢???

1.前往文件夹
~/Library/Developer/Xcode/UserData/CodeSnippets

2.创建 if.codesnippet 文件

3.复制以下模板:

<?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">
  <!--code config here-->
</plist>
  • 1
  • 2
  • 3
  • 4
  • 5

4.找到系统的 if 代码块,粘贴 过来。

5.修改 IDECodeSnippetVersion 从1变成2。

6.增加 IDECodeSnippetUserSnippet 为 true。

7.保存,关闭。退出Xcode ,再打开,输入 if ,看看此时的 if 样式,大功告成!!!!

最后修改的 if 配置文件应是如下:

<?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>IDECodeSnippetVersion</key>
        <integer>2</integer>
        <key>IDECodeSnippetUserSnippet</key>
        <true/>
        <key>IDECodeSnippetCompletionPrefix</key>
        <string>if</string>
        <key>IDECodeSnippetContents</key>
        <string>if (<#condition#>) 
{
    <#statements#>
}</string>
        <key>IDECodeSnippetIdentifier</key>
        <string>D70E6D11-0297-4BAB-88AA-86D5D5CBBC5D</string>
        <key>IDECodeSnippetLanguage</key>
        <string>Xcode.SourceCodeLanguage.C</string>
        <key>IDECodeSnippetSummary</key>
        <string>Execute code only when a certain condition is true.</string>
        <key>IDECodeSnippetTitle</key>
        <string>If Statement</string>
        <key>IDECodeSnippetCompletionScopes</key>
        <array>
            <string>CodeBlock</string>
        </array>
    </dict>
</plist>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

总结

根据 if 的配置逻辑,完全可以再修改 if-else,switch,dispatch_once,dispatch_after等样式。

以下是我修改的一些:

这个CodeSnippets文件夹是可以复制给他人,别人安装在相同的目录下,便也有了相同的功能。很适合一个团队的代码规整。

第一次写博客,表达不到的还请包涵。一起交流,共同进步。
  • 1
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
iOS开发企业版ipa分发(In
iOS 打包(一)--精简总结(证书、自动化、持续集成等)(精简)
iOS学习之 plist文件的读写
Xcode7 使用NSURLSession发送HTTP请求报错
Xcode7 创建HTTP请求报错
Mac终端常用命令
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服