忍者ブログ
  • 2024.10
  • 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
  • 2024.12
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/11/23 01:13 】 |
XCodeのプロジェクトテンプレートを自前で作る
XCodeでゲームを作るときは、 OpenGL ES Application のプロジェクトテンプレートを使って作るのだが、最初に作り始めるまで改造するところが結構多い。

プロジェクトテンプレートとはこれのこと。
XCodeで新規プロジェクトの作成を選ぶと出て来る画面。


ここに、自分で作ったファイルやシェーダを持つプロジェクトテンプレートを追加したい。


※googleで調べて出て来る情報は、XCode3 と XCode4 とが混在していて、バージョン違いでいろいろ変わるようなので要注意。
ここではXCode4 でのやり方を示す。



プロジェクトテンプレートが定義されている場所は、
/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/Application
である。
(とても紛らわしいが、/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Project Templates/Application というディレクトリもあり、これは今回使わないので要注意)


ここを見ると、プロジェクトテンプレートが全部入っているのが分かる。




ここにある、OpenGL ES Applicationj.xctemplate をコピーして書き換えて作ってみようという話。
中身はこうなっている。

中身は、プロジェクトを作成したときに生成されるファイル群と同じ。プロジェクト名のところが変数っぽくなっているだけが違い。


これをコピーする。
コピー先はこことは全然別の場所で、
ホームディレクトリ/ライブラリ/Developer/XCode/Templates/
である。
とりあえずここに
OpenGL ES Application.xctemplate
をコピーして置く。名前は
fd Application.xctemplat
とする。
この状態でXCodeを開き、プロジェクトの新規追加を行うと、

というふうに反映される。(XCodeの再起動とかも必要ない)


しかしこのままだと、OpenGL ES Application が使えなくなっている。
fd Applicationが上書きしてしまったようだ。
両方を使えるようにする必要がある。どこかにID的なものが記述されているはずで、それを別名に変える必要がある。

fd Application.xctemplate/TemplateInfo.plist
を開く。
OpenGLESで検索。78行目に
com.apple.dt.unit.OpenGLESApplication
という箇所がある。これを適当に
com.apple.dt.unit.fdApplication
とでも書き換える。
すると、OpenGLES Application と fdApplication がそれぞれXCodeで使えるようになる。



ではいよいよテンプレートを記述していく。
すでにあるファイルの中身を書き換えたり、ファイル名を変えたり。
またファイルを新たに追加する。

ファイル名の変更をしたら、TemplateInfo.plist の中で、ファイル名の変更前から変更後に置換する。
 例えば、ViewController を .m から .mm に変えた場合、 viewcontroller.m で検索引っかかったところの拡張子を全部 .mm に変える。これをしないでXCodeで作った場合、 .mm 名のファイルが作られるが、中身が空っぽということになる。

また、ファイルを追加した場合は、(12行目以降の)ファイル名とパスの組の部分に記述を追加。
EAGLView.m

Path
EAGLView.m

さらに、(120行目あたり)ノード配列の部分にも記述を追加
EAGLView.m

これで、新たなファイルがテンプレートに追加されるようになる。
(ソースやヘッダだけでなく、jpgも追加できることを確認。)
(ただし、EAGLView.m らと同じディレクトリに置いていないとコピーできなかった。ディレクトリを掘った場所に置いていたら、コピーができなかった。なぜかはよくわからない)



あと、***AppDelegate.m/h だが、これらはなぜかテンプレートディレクトリ内にファイルが置いていない。
TemplateInfo.plist を良く読むと、この中にAppDelegate 内の関数定義などが一部書いてある。
どうやら、大本となる***AppDelegate.m/h の定義はどこか他から取ってきていて、そのうち一部のメソッドやらをTemplateInfo.plist の記述で上書きしているようだ。

この大本がどこにあるのかはまだ不明。
だが、TemplateInfo.plist 内の***AppDelegateのメソッド定義を全部削除し、他のファイルと同様、ファイル名とパスの定義だけのものに差し替えたら、(もちろんテンプレートディレクトリに***AppDelegate.m/hファイルを置く)ちゃんとそちらの定義が上書きされた。
(ただし、***AppDelegate.mm ファイルを使おうとしたら、***AppDelegate.m を上書きしないので、プロジェクトを作成したときに ***AppDelegate.m と ***AppDelegate.mm の両方が作られてしまった。)



PR
【2011/08/09 18:34 】 | iPhone | 有り難いご意見(0) | トラックバック()
<<偉人たちのブレイクスルー勉強術 | ホーム | Objective-C とC++の切り離し>>
有り難いご意見
貴重なご意見の投稿














虎カムバック
トラックバックURL

<<前ページ | ホーム | 次ページ>>