Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Xcodeのファイルテンプレートを自作する

More than 1 year has passed since last update.

Xcodeでクラスファイルを新規作成した後、毎回同じようなコードを書いていて面倒だなと感じることがあります。たとえば、

  • UIViewControllerを継承したクラスにカスタムセルのUITableViewを持たせる
  • NSObjectを継承したクラスをシングルトンにする

といった実装はアプリ開発ではよくありますが、手順は大体毎回同じです。

こういった実装をファイルテンプレート化しておけば、クラスファイルの新規作成時にそのコードが生成されるので、何度も同じコードを書く手間が省けとても便利です。

以下に、NSObjectを継承したシングルトンクラスのファイルテンプレートを例にとり、作成手順を説明していきます。

1. デフォルトテンプレートをコピーしてくる

デフォルトテンプレート はXcode.appのパッケージの中身をたどって行った先にあります。

open /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/

~/Library/Developer/Xcode/Templatesカスタムファイルテンプレートの置き場となります。

# 上記フォルダがなければ、作成してください
mkdir ~/Library/Developer/Xcode/Templates

デフォルトテンプレート から Cocoa Touchフォルダを カスタムファイルテンプレートの置き場 へコピーします。
その際に、フォルダ名を"My Cocoa Touch"にリネームします。

cp -r /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/Source/Cocoa\ Class.xctemplate ~/Library/Developer/Xcode/Templates/My\ Cocoa\ Touch.xctemplate

2. Xcodeで試しに開く

ここで、試しにXcodeから新規ファイル作成画面を開いてみてください。テンプレートの選択肢に、コピーしてきてリネームしたフォルダ名が入っていることが確認できます。表示されない場合には、Xcodeを再起動してみてください。

※以下、フォルダ名をMy Cocoa Touchにリネームしたものとして説明します。

3. TemplateInfo.plistを編集する

My Cocoa Touch/Objective-C class.xctemplateフォルダ配下に、"TemplateInfo.plist"というファイルがあります。

このファイルをXcodeやテキストエディタ等で開き、"Options"という要素に次の項目を追加します。

TemplateInfo.plist
<dict>
    <key>Default</key>
    <string>false</string>
    <key>Identifier</key>
    <string>Singleton</string>
    <key>Name</key>
    <string>Singleton</string>
    <key>RequiredOptions</key>
    <dict>
        <key>cocoaTouchSubclass</key>
        <array>
            <string>NSObject</string>
        </array>
    </dict>
    <key>Type</key>
    <string>checkbox</string>
</dict>

Xcodeから新規ファイル作成 > My Cocoa Touch > Objective-Cを選択 > Nextと進み、SubclassにNSObjectを選ぶとSingletonというチェックボックスが有効になることが確認できます。

4. テンプレート用クラスファイルを作成する

TemplateInfo.plistと同階層にある"NSObject"というフォルダを複製して、"NSObjectSingleton"というフォルダ名にリネームします。

このフォルダ名は、手順2でTemplateInfo.plistに追記した項目のうち、Identifierと、RequiredOptionsに関係しています。

RequiredOptionsに指定してあるNSObjectをクラス生成時に親クラスとして指定し、Singletonのチェックボックスにチェックを入れると、{cocoaTouchSubclass名}+{チェックボックス項目のIdentifier}、すなわち"NSObjectSingleton"という名前がついたフォルダにあるテンプレートファイルを参照するようになります。

5. テンプレート用クラスファイルを編集する

次に、NSObjectSingletonフォルダ配下にある、"___FILEBASENAME___.h"と、"___FILEBASENAME___.m"を編集します。

___FILEBASENAME___.h
___IMPORTHEADER_cocoaTouchSubclass___

@interface ___FILEBASENAMEASIDENTIFIER___ : ___VARIABLE_cocoaTouchSubclass___

+ (id)sharedInstance;

@end
___FILEBASENAME___.m
#import "___FILEBASENAME___.h"

@implementation ___FILEBASENAMEASIDENTIFIER___

static id instance = nil;

+ (id)sharedInstance {
    @synchronized(self) {
        if (!instance) {
            instance = [[self alloc] init];
        }
    }
    return instance;
}

@end

以上でNSObjectSingletonテンプレートは完成です。

shu223
フリーランスiOSエンジニア 著書:『iOS×BLE Core Bluetooth プログラミング』『Metal入門』『実践ARKit』『Depth in Depth』『iOSアプリ開発 達人のレシピ100』他 GitHubの累計スター数24,000超
http://shu223.hatenablog.com/
engineerlife
技術力をベースに人生を謳歌する人たちのコミュニティです。
https://community.camp-fire.jp/projects/view/280040
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away