XCodeでクラスファイルを作る時にテンプレートを変更する方法

最近、宣伝の記事ばかりになってきたので、ここらで技術ブログだということを見せつけるために技術的な話を。

iOSで開発をする場合には画面をコントロールするViewControllerファイルを作ります。っでその時にXCodeが新規作成で吐き出すファイルのフォーマットを自分好みにカスタマイズしたい事が多々あります。因みにViewControllerの例で言うと何もしないと下記のようなファイルが作られます。

// DefaultViewController.m
// Hoge
//
// Created by tochi on 2013/03/01.
// Copyright (c) 2013年 tochi. All rights reserved.
//

#import “DefaultViewController.h”

@interface DefaultViewController ()

@end

@implementation DefaultViewController

– (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  if (self) {
    // Custom initialization
  }
  return self;
}

– (void)viewDidLoad {
  [super viewDidLoad];
  // Do any additional setup after loading the view.
}

– (void)didReceiveMemoryWarning {
  [super didReceiveMemoryWarning];
  // Dispose of any resources that can be recreated.
}

@end

僕好みにするとしたら

  • インデントを半角スペース2つ分にしたい。
  • viewDidLoadとかに書かれているコメントを消したい。
  • initWithNibName:bundleでは無くてinitWithCoder:にしたい。

上記のような感じでカスタマイズしたいなっと。これくらいなら高々30秒なんですが、されど30秒。プログラマは怠慢なんです。っということでこの新規作成で出来るファイルのフォーマットを変更します。

まずは、XCodeが使っているテンプレートファイルを探します。「アプリケーション > XCode > パッケージの内容を表示」を選択します。

2013030101

パッケージ内容が展開されたら下記の階層の「Objective-C class.xctemplate」フォルダをデスクトップなどにコピーします。因みにお気づきの通り、同一階層にある他のフォルダを使えばCategoryやTestのテンプレートを変更することもできます。

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/Cocoa Touch/Objective-C class.xctemplate

2013030102

次に先ほどコピーしたテンプレートフォルダをログインユーザーのライブラリに移動します。「alt」を押しながらFinderの「移動」メニューをクリックすると「ライブラリ」が出てくるので選択します。(alt押しながら画面キャプチャが出来なかった。。。)

2013030103

その後下記のディレクトリに移動して、先ほどデスクトップにコピーした「Objective-C class.xctemplate」を移動します。

/Users/tochi/Library/Developer/Xcode/Templates/File Templates/Cocoa Touch

2013030104

移動したフォルダ名を任意の名前に変更します。僕は「Objective-C class custom.xctemplate」という名前にしました。

スクリーンショット 2013 03 01 13 41 59

後は移動したフォルダの下にある「UIViewController」のヘッダーファイル「_\_FILEBASENAME___.h」または実装ファイル「___FILEBASENAME__.m」を好みのフォーマットに変更します。因みにUIviewController以外のテンプレートを変更したい場合には同一階層のファイルをそれぞれ変更して下さい。

// ___FILENAME___
// ___PROJECTNAME___
//
// Created by ___FULLUSERNAME___ on ___DATE___.
//___COPYRIGHT___
//

#import “___FILEBASENAME___.h”

@interface ___FILEBASENAMEASIDENTIFIER___ ()
@end

@implementation ___FILEBASENAMEASIDENTIFIER___

– (id)initWithCoder:(NSCoder *)coder {
  self = [super initWithCoder:coder];
  if (self) {
  }
  return self;
}

// ————————————————————————————————-
# pragma mark – ViewController Lifecycle.
// ————————————————————————————————-
– (void)viewDidLoad {
  [super viewDidLoad];
}

– (void)didReceiveMemoryWarning {
  [super didReceiveMemoryWarning];
}

@end

後はXCodeを起動して新規でファイルを作ろうとすると先ほど変更したフォルダ名がダイアログに表示されるので選択してUIViewControllerを作ると無事に自分好みにフォーマットでファイルが作成されます。

2013030105

正直、もっと早くにやっておくべきでした。Please enjoy the development.