<< Prev Page Next Page >>

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


XCode4のプロジェクトテンプレートが作れない!

XCode3では、自分がよく使うframeworkとか、よく使うマクロを予め定義したヘッダファイルとか、自分が整理しやすいディレクトリ構成とかをもったプロジェクトテンプレートをXCode上で作り込むことができて、それをプロジェクトの新規作成をするときに選択することが出来た。
仕組みはとても単純で、テンプレート中のファイル名とディレクトリ名とテキストファイルの内容を一切合切、
___PROJECTNAME___→プロジェクト名
___PROJECTNAMEASIDENTIFIER___→プロジェクト名のスペースをアンダースコアに置換した文字列
に置換するというものだった。

XCode4で、自分が作ったプロジェクトテンプレートが選べなくなっていたので、くそっと思って同じようにプロジェクトテンプレートを作ろうと思った。

調べた。

なるほど、XCode上ではテンプレートの編集はできない、と
TemplateInfo.plistファイルをごりごりいじって、と
TemplateInfo.plistが階層構造になって親を継承してるから、それを変更しようと思ったら親の定義を全部持ってきて・・・
AppDelegateクラスにメンバー変数を加えるには・・・
QwartsCore frameworkを加えるには・・・


ぷちっ。

できるかっ!こんな面倒なもんできるかっ!

そんなわけで、XCode3形式のテンプレートをXCode3のときみたいに一切合切文字列置換するrubyスクリプトを作った。プロジェクト新規作成画面で選択できないけど、これを使ってプロジェクト新規作成すればいいんだ。


# XCode3タイプのプロジェクトテンプレートを文字列置換して新しいプロジェクトを作成する
class Replacer
@srcDir
@dstDir
@projectName
@projectNameIdent

# エントリポイント
def main(templateDir, projectDir)
if !templateDir || !projectDir then
p "USAGE: ruby replacetemplate.rb (template dir) (project dir)"
return
end

if File.exist?(projectDir) then
p projectDir + " is already exists."
return
end

@srcDir = templateDir
@dstDir = projectDir
@projectName = File.basename(projectDir)
@projectNameIdent = @projectName.gsub(" ", "_")

p "processing " + @projectNameIdent + " ..."
Dir.mkdir(@dstDir)
processDir(@srcDir, @dstDir)
end

# 文字列置換
def tr(str)
return str.gsub("___PROJECTNAMEASIDENTIFIER___", @projectNameIdent).gsub("___PROJECTNAME___", @projectName)
end

# ディレクトリ処理
def processDir(src, dst)
puts "dir : " + src + "->" + dst
Dir.foreach(src){|item|
if item != "." && item != ".." then
srcPath = src + "/" + item
dstPath = dst + "/" + tr(item)
if File.directory?(srcPath) then
Dir.mkdir(dstPath)
processDir(srcPath, dstPath)
elsif File.file?(srcPath) then
processFile(srcPath, dstPath)
end
puts item
end

}
end

# ファイル処理
def processFile(src, dst)
puts "file : " + src + "->" + dst
of = open(dst, "w")
begin
File.foreach(src) {|line|
of.print(tr(line))
}
ensure
of.close
end
end

end

r = Replacer.new
r.main ARGV[0], ARGV[1]


この記事に対するコメント

この記事に対するコメントの投稿



管理者にだけ表示を許可する

この記事に対するトラックバック

トラックバックURL
http://tockri.blog78.fc2.com/tb.php/247-a2d722dd
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。