iOS如何自定义文件/项目模板

作者: 纸简书生 | 来源:发表于2016-04-24 20:55 被阅读2571次

    鉴于自己平时写demo比较多,每次都要新建一个项目,然后把一些常用的文件拖到项目中。稍微大一点的项目还需添加预编译文件这些。每次都重复的设置很是无趣。于是决定弄一弄Xcode项目模板,以后可以像创建系统项目一下,创建自定义的项目了。

    带目录版纸简书生

    来看看最终效果:

    • 新建文件:


    • 新建项目:

    自定义模板概述

    自定义模板一共有两种类型,一种是自定义项目模板,一种是自定义文件模板。很明显项目模板就是我们在新建项目的时候会用到,而文件模板是在新建文件的时候用到。如果你没有做任何自定义的,那所有的项目及文件都是用的系统模板。

    模板路径

    系统模板路径

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

    打开这个路径就会看到有两个文件夹一个是File Templates存储系统文件模板的,一个是Project Templates存储系统项目模板的。

    我们自定义的模板不应该放在系统模板下,应该放在~/Library/Developer/Xcode/Templates/。打开目录同样有两个和上面名字一样的文件夹。

    TemplateInfo.plist

    这个配置文件在每一个具体的模板路径下都会有,它是一个最为基础的配置文件。当我们通过Xcode创建新的文件或者项目的时候,Xcode会首先读取这个文件来配置。每一TemplateInfo.plist都有一个标识用来区别其他模板。所有在我们自定义模板的时候需要给自己的模板取个名字,举个例子,系统为iPhone应用内置的模板标识如下:

    com.apple.dt.unit.windowBasedApplication

    除了这些,TemplateInfo.plist这个文件还有一点需要我们注意,那就是它可以像类一样实现继承。如下图:

    看不懂也没关系,这点不影响我们自定义。只要知道需要用到文件继承来做就可以了。TemplateInfo继承的关系一般也是在自定义项目的时候用到。来看看下面这种图:

    0)

    左边是自定义的继承层次,右边是系统继承层次。完全按照系统的样子弄就可以了。

    TemplateIcon.tiff

    这是个图标文件,也就是当我们在xcode新建文件或者项目的时候看到的图标而已。


    其他

    其他的就是我们自定义文件或者项目的额具体内容了。具体目录如下:

    • 自定义文件模板:


    • 自定义项目模板:


    自定义文件模板

    自定义文件模板,在实际开发中用到的地方并不是很多。这里也提一提把。比如对于经常写开源项目的同学来说,每次写完正规一点都需要配上相应的开源协议,比如常见的MIT,BSD等。每个文件都手动复制一下如下内容还是挺麻烦的。

    // Permission is hereby granted, free of charge, to any person obtaining a copy
    // of this software and associated documentation files (the "Software"), to deal
    // in the Software without restriction, including without limitation the rights
    // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    // copies of the Software, and to permit persons to whom the Software is
    // furnished to do so, subject to the following conditions:
    // 
    // The above copyright notice and this permission notice shall be included in
    // all copies or substantial portions of the Software.
    // 
    // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    // THE SOFTWARE.
    

    所以如果有一个文件模板能够直接在创建文件的时候就自动加上了这些协议那是极好的。

    • 首先是定义好文件,参考了系统文件模板的定义的方式都是以___FILEBASENAME___这种方式定义的。那我们也这样定义。我测试使用OC测试的,定义出来如下图:
    • 然后是更改.h和.m里面的内容,模板还是套用系统的,只是在上面加了一大堆注释而已。来看看.m文件
    // ___FILENAME___
    // 
    // Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___
    //
    // Permission is hereby granted, free of charge, to any person obtaining a copy
    // of this software and associated documentation files (the "Software"), to deal
    // in the Software without restriction, including without limitation the rights
    // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    // copies of the Software, and to permit persons to whom the Software is
    // furnished to do so, subject to the following conditions:
    // 
    // The above copyright notice and this permission notice shall be included in
    // all copies or substantial portions of the Software.
    // 
    // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    // THE SOFTWARE.
    
    #import "___FILEBASENAME___.h"
    
    @implementation ___FILEBASENAMEASIDENTIFIER___
    
    @end
    
    • 设置配置文件TemplateInfo.plist


    TemplateInfo.plist可以通过xcode来创建,也可以直接copy系统模板里面的,我是copy系统模板的,然后改里面的值就可以了。可能有些key不知道什么意思,方法一是看系统模板里面的TemplateInfo.plist设置和我们通过系统模板创建出来的文件作对比来分析具体key的作用,方法二就是去google吧。

    • 最后找个tiff文件作为图标就可以了

    自定义项目模板

    自定义项目模板才是实际开发中最需要的。相比于自定义文件模板稍微浮躁一点点,因为需要用到TemplateInfo.plist继承关系。

    因为系统没有提供创建一个空项目的模板,所以我们就用这个来试一试。

    虽然是一个空项目但是还是需要使用前面讲的TemplateInfo.plist继承关系。直接新建一个TemplateInfo.plist文件,或者copy系统模板的然后改一下。

    通过这样就可以创建一个空项目了。

    来看一个复杂的

    光是上面这种例子肯定是最简单的。

    • 先建一个基本项目
      比如XLBase_Universal_iOS_Template.xctemplate里面的具体内容我是根据系统的来更改的。然后往里面添加东西。大致结构如下:

    文件夹里面的东西和系统目标差不多。

    主要看看TemplateInfo.plist里面的配置


    大家可以按照这种设置去做自己的自定义。

    • 继承基本项目创建一个复杂的
      复杂的包含了podfile和一些常用的文件及目录



      最为重要的还是TemplateInfo.plist文件



      大致就这些了。

    总结

    可能上面讲的对于没有弄过项目模板的同学来说有点难掌握。主要是配置文件里面的key不知道什么意思不知道怎么设置。针对这种情况我建议

    • 1.看系统模板怎么弄的,根据创建的新项目或者文件及模板之间的关系分析总结出相关key的作用。
    • 2.去github上看相关的模板项目。那里有现成的例子,自己下载下来运行一下,照着模板改一改基本上就会了。

    更新
    昨天没上传例子,这里有个别人写的例子,我就不用上传了。大家自己跟着例子玩玩吧
    iOS自定义项目模板例子

    相关文章

      网友评论

      • 清無:打个鸡毛的马赛克!
      • petter102:您好楼主,文章写得不错。但是想问个比较low的问题。xcode升级会导致模板不能用么
        petter102:@zernon ok 貌似升级挺频繁的啊。
        zenon:是的,升级后就要重新弄一次
      • 崇圣道瞳䄹:喜欢,又学到新东西了
      • 小如99:还真的没看懂噢,怎么创建模板的,是直接拷贝系统的模板放到library下,然后修改下.plist就好了嘛?
        饥饿的野兽:demo的地址是什么啊? 看了下也没看懂怎么弄
        纸简书生:@小小如 晚上回去我发demo到github上,你看了就懂了。
      • bca465008859:有时候缺少的就是这样更详细的实用的东西
        bca465008859:@纸简书生 所以要感谢简主的耐心与分享
        纸简书生: @夕时梦未醒 是的,好多文章写得都是大同小异,实用的还比较少。昨天时间有限,抽个空我好好整理下里面的配置文件参数含义表。

      本文标题:iOS如何自定义文件/项目模板

      本文链接:https://www.haomeiwen.com/subject/oqpfrttx.html