Cocos2d-x XcodeFileTemplateを作成する

raharu(仮名)(プログラマー)
これがダイバージェンス1%の先の世界か。。。

今までCocos2dxのシーンやコンポーネントを追加するときに、
適当にheader,c++ファイルを作成して、またまた適当なファイルをコピってつくってましたが、
いい加減嫌気がさしてきてたのXcodeからテンプレートファイルを作成出来るようにしてみました。

ベースになるc++のテンプレートをコピーして Cocos2d-xにリネームします

1
2
3
4
$ cp -R /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/C\ and\ C++ ~/Library/Developer/Xcode/Templates/File\ Templates/
$ mv ~/Library/Developer/Xcode/Templates/File\ Templates/C\ and\ C++ ~/Library/Developer/Xcode/Templates/File\ Templates/Cocos2d-x
$ cd ~/Library/Developer/Xcode/Templates/File Templates/Cocos2d-x/C++ Class.xctemplate
$ ls -la

C++ Class.xctemplate/にこんなファイルがあるはずです

f:id:raharu0425:20140808184630p:plain

以下のファイルをテンプレートに変更していきます。

___FILEBASENAME___.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//
//  ___FILENAME___
//  ___PROJECTNAME___
//
//  Created by ___FULLUSERNAME___ on ___DATE___.
//___COPYRIGHT___
//

#ifndef _____PROJECTNAMEASIDENTIFIER________FILEBASENAMEASIDENTIFIER_____
#define _____PROJECTNAMEASIDENTIFIER________FILEBASENAMEASIDENTIFIER_____

#include "cocos2d.h"

class ___FILEBASENAMEASIDENTIFIER___ : public cocos2d::Layer
{
private:
    ___FILEBASENAMEASIDENTIFIER___();
    virtual ~___FILEBASENAMEASIDENTIFIER___();
public:
    static cocos2d::Scene* createScene();
    bool init();
    CREATE_FUNC(___FILEBASENAMEASIDENTIFIER___);
};

#endif /* defined(_____PROJECTNAMEASIDENTIFIER________FILEBASENAMEASIDENTIFIER_____) */

___FILEBASENAME___.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//
//  ___FILENAME___
//  ___PROJECTNAME___
//
//  Created by ___FULLUSERNAME___ on ___DATE___.
//___COPYRIGHT___
//

#include "___FILEBASENAME___.h"

USING_NS_CC;

___FILEBASENAMEASIDENTIFIER___::___FILEBASENAMEASIDENTIFIER___()
{
}

___FILEBASENAMEASIDENTIFIER___::~___FILEBASENAMEASIDENTIFIER___()
{
}

Scene* ___FILEBASENAMEASIDENTIFIER___::createScene()
{
    auto scene = Scene::create();
    auto layer = ___FILEBASENAMEASIDENTIFIER___::create();
    scene->addChild(layer);

    return scene;
}

bool ___FILEBASENAMEASIDENTIFIER___::init()
{
    if ( !Layer::init() ) return false;

    //Welcome Message
    auto windowSize = Director::getInstance()->getWinSize();
    auto label = LabelTTF::create("___FILEBASENAMEASIDENTIFIER___", "Arial", 24);
    label->setPosition(windowSize.width / 2, windowSize.height / 2);
    this->addChild(label);

    return true;
}

TemplateInfo.plist

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
>...<key>AllowedTypes</key>
>...<array>
>...>...<string>public.c-plus-plus-source</string>
>...</array>
>...<key>DefaultCompletionName</key>
>...<string>File</string>
>...<key>Description</key>
>...<string>Cocos2d-x用ファイルテンプレート作成</string>
>...<key>Kind</key>
>...<string>Xcode.IDEKit.TextSubstitutionFileTemplateKind</string>
>...<key>MainTemplateFile</key>
>...<string>___FILEBASENAME___.cpp</string>
>...<key>SortOrder</key>
>...<string>2</string>
>...<key>Summary</key>
>...<string>A C++ class implementation with header.</string>
</dict>
</plist>

plistはDescriptionを変更しておきました。

さてこれでXcodeで新しく作成してみると、、、、

f:id:raharu0425:20140808185147p:plain

f:id:raharu0425:20140808185203p:plain

これで若干の面倒がなくなりました。
前からやろうやろうと思っていながらずっと手をつけていなかったのでちょうど良い機会でした。

参考にさせてきただきました。有り難うございます。
(http://qiita.com/shu223/items/5d8a245e5743f77df9eb)
(http://qiita.com/AnzNetJp/items/13dfdcb32f3b3bd432f9)