今回エンジニアブログを担当する戸田です。
今回はXcodeのFile Templateについて紹介したいと思います。独自File Templateは、新規でクラスを作成する時に、毎回同じようなコードを書く手間を省く機能になります。今回はNSObjectを継承したクラスにProtocolを追加した独自File Templateを説明します。
File Templateの作成
1.前準備
Xcodeに用意されているFile Templateを再利用していきますので、次のパスから
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/Source/Cocoa Touch Class.xctemplate
以下のフォルダとファイルをコピーして
- NSObjectObjective-C/___FILEBASENAME___.h
- NSObjectObjective-C/___FILEBASENAME___.m
- NSObjectSwift/___FILEBASENAME___.swift
- NSObjectSwift
- TemplateIcon.png
- TemplateIcon@2x.png
- TemplateInfo.plist
独自のFile Templateを配置する場所は以下のパスになります。
~/Library/Developer/Xcode/Templates/File\ Templates
上記のFile Templateパスに「SampleClass.xctemplate」フォルダを作成して、先ほどコピーしたフォルダとファイルを配置します。また、以下のフォルダ名をリネームします。
- 「NSObjectObjective-C」→「NSObjectProtocolObjective-C」
- 「NSObjectSwift」→「NSObjectProtocolSwift」
2.TemplateInfo.plistの編集
Xcodeやテキストエディタ等で開きて、「Options」要素に以下の内容を追加します。また、追加する位置は先ほどリネームしたフォルダ名と関連するため追加する場所に気を付ける必要があります。
<dict> <key>Default</key> <string>false</string> <key>Identifier</key> <string>Protocol</string> <key>Name</key> <string>Protocol</string> <key>RequiredOptions</key> <dict> <key>cocoaTouchSubclass</key> <array> <string>NSObject</string> </array> </dict> <key>Type</key> <string>checkbox</string> </dict>
3.クラスファイル(Objective-C)の編集
「NSObjectProtocolObjective-C/FILEBASENAME.h」のファイルにプロトコルを定義します。
// // ___FILENAME___ // ___PROJECTNAME___ // // Created by ___FULLUSERNAME___ on ___DATE___. //___COPYRIGHT___ // ___IMPORTHEADER_cocoaTouchSubclass___ @protocol ___FILEBASENAMEASIDENTIFIER___Delegate @end @interface ___FILEBASENAMEASIDENTIFIER___ : ___VARIABLE_cocoaTouchSubclass___ @property (nonatomic, assign) id<___FILEBASENAMEASIDENTIFIER___Delegate> delegate; @end
4.クラスファイル(Swift)の編集
「NSObjectProtocolSwift/FILEBASENAME.swift」のファイルにプロトコルを定義します。
// // ___FILENAME___ // ___PROJECTNAME___ // // Created by ___FULLUSERNAME___ on ___DATE___. //___COPYRIGHT___ // import UIKit protocol ___FILEBASENAMEASIDENTIFIER___Delegate{ } class ___FILEBASENAMEASIDENTIFIER___: ___VARIABLE_cocoaTouchSubclass___ { var delegate: ___FILEBASENAMEASIDENTIFIER___Delegate! = nil }
以上で設定は終わりになります。