TL;DR
- Xcodeでは,自分でカスタマイズしたテンプレートからプロジェクトを開始できる
- フォルダ構成や初期ファイルを好きなようにいじれるので重宝してる
- Xcode9から,プロジェクトテンプレートでフォルダ作れなくなった
- 基盤プロジェクトのコピー&リネームで対応するしかないか
- でも毎回やるのは面倒だし内部的にリネーム前の情報残ってる...
-
スクリプト作ったよ.これでみんなハッピー
createProject.sh MyTemplate MyProject
- おまけでファイルテンプレートの作り方も載せてるよ
Xcode8までのプロジェクトテンプレート
プロジェクトテンプレートとは,Xcodeで「Create a new Xcode project」を押した時に出てくる Single View App
, Tabbed App
といった,アプリを作る為に必要なファイルや設定をテンプレートとして用意したものです.
最小の構成はAppleさんが一通り用意してくれてますが,自分で好きなように作成することもできます.
作り方はこちらにまとめてあります.
フォルダを作らず初期ファイル等だけ用意するのであれば, 上記の作り方で全然問題ありません.
むしろ,こちらのほうが通常の作成方法と手順が同じなのでいいかもしれません.
突然の別れ
9月某日.
いつものように自作したテンプレートからプロジェクトを作成しようとしたところ.
!!!!!!
原因はわかりませんが,Xcodeの新機能が関係していると思われます.
しばらく template.plist
周りを弄ってみましたが,どうやら無理なようでした.(諦めた)
物理テンプレートのコピペでいけるか?
物理テンプレートと言うと語弊があるかもしれませんが,基盤となるプロジェクトを作成しておいて,それをコピー,リネームすることで代変します.
ですがこの方法,
- プロジェクト名,フォルダ名をそれぞれ変更しなければいけない
- 初期ファイル(
MyProjectConfig.swift
, ...)も別途変更しなければいけない - 内部的にテンプレートのプロジェクト名が残ってる部分がある
といった面倒な点があります.
そんなときはもちろん Shell Script の登場です.
スクリプトによるコピー&リネーム
基盤となるプロジェクトの作成
私はMVCかMVVMでの開発がほとんどなので, MyProjectTemplate_MVC
,MyProjectTemplate_MVVM
というプロジェクト名でそれぞれ作成します.
.swiftlint.yml
,Podfile
などいつも使うファイルを配置,フォルダ構成の調整して,プロジェクトテンプレートを構築します.(これらのファイルのプロジェクト名が入る部分はテンプレートのプロジェクト名と同じにしておきます.)
作成したプロジェクトはどこか一箇所にまとめておきます.
今回は~/Documents/xcode/Template/
以下に置いて話を進めます.
スクリプトの作成
さっそく作っていきましょう.(さらっと流します)
・ スクリプトのイメージを決定
ベースは以下のようにします.
$ ./script.sh MyTemplate path/to/MyProject
今回の私の場合は, MVCとMVVMのテンプレートを作成したので, Aliasを登録して
$ new_mvc_project path/to/MyProject
$ new_mvvm_project path/to/MyProject
こんな感じで運用したいと思います.
・ プロジェクトのコピー
cp -R ~/Documents/xcode/Template/$templateName $projectPath
・ フォルダ,ファイルのリネーム
paths=`find -d $projectPath -name "*$templateName*"`
for path in $paths
do
replacePath=`dirname $path`/`basename $path | sed "s/$templateName/$projectName/g"`
mv $path $replacePath
done
find
コマンドで,テンプレート名の入っているフォルダ,ファイルのパスを取得しています.
-d
オプションで,ディレクトリ内のファイルを階層の深いディレクトリから先に検索します.(そうしないとリネーム時にパスがおかしくなります.)
各フォルダ(ファイル)名のテンプレート名部分をリプレイスしてます.
・ ファイル内のリネーム
files=`find $projectPath -type f -print`
for file in $files
do
sed -i '' -e "s/$templateName/$projectName/g" $file
done
今度はfind
コマンドで全ファイルを取得して,sed
コマンドでテンプレート部分を置き換えています.
・ alias登録
alias new_mvc_project="path/to/script.sh MyProjectTemplate_MVC"
alias new_mvvm_project="path/to/script.sh MyProjectTemplate_MVVM"
プロジェクトを作ってみる
$ new_mvc_project MyProject
はい,いい感じに完成しました.
完成したスクリプトはこちらに置いてます
おまけ
Xcodeでは,プロジェクトだけでなくファイルのテンプレートも作成できます.
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates
上記の場所には,標準のテンプレートが準備されています.
これらを ~/Library/Developer/Xcode/Templates/File Templates
にコピーして弄ることで,自分専用のファイルテンプレートを作成できます.
詳しいやり方等はこちらが参考になります.
まとめ
今回はXcode9になって既存のプロジェクトテンプレートが使えなくなった場合の対処法を共有させていただきました.
いままで標準のテンプレートしか使っていなかった方も,使いやすいテンプレートを作成するきっかけになればと思います.
Xcodeがどのようにしてプロジェクトの雛形を作成しているか気になる方は
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates
などを覗いてみてください.
それではよいXcodeライフを.