201
182

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-01-09

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

201
182
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
201
182

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?