Objective-C
Xcode
iOS

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

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テンプレートは完成です。