gruntからXcodeプロジェクトのDeployment infoを変更する。Xcodeから変更するのは簡単。でもそれをgruntでtaskとして実行する。こうした作業をgrunt taskで行うメリットは、繰り返し行う作業の場合は、それを自動化できるという点。
AppName.xcodeprojのパッケージの中には、project.pbxprojというファイルがあって、ここにXcodeのプロジェクト関連の設定が入っています。node-xcodeというスクリプトはこのproject.pbxprojの内容をパースして、内容を更新保存させることができます。全体のスクリプトはGistに(ローカルタスクとして動くようになっている)。
1 | var xcode = require('xcode'); |
プロジェクトのパースは、xcode.project(path)でproject.pbxprojを指定して、そのあとproject.parse()を実行するだけです。引数にfunctionを渡すと、パース実行後にproject内容の操作ができます。
project.pbxXCBuildConfigurationSection()では、project.pbxproj内のisa=XCBuildConfigurationになっている設定が配列で返ってきます(通常「Release」と「Debug」が、プロジェクトとビルドごとに一つずつで計4つくるはず)。
設定本体は「buildSettings」というオブジェクトに含まれています。Deployment targetの設定は「IPHONEOS_DEPLOYMENT_TARGET」という名前で入っているので、そのkeyの値を変更する。「Devices」の設定は「TARGETED_DEVICE_FAMILY」。このあたりの名前はproject.pbxprojをテキストエディタで開いてみると、だいたいわかります。
それで内容の操作をしたあとに、fs.writeFileSync(path, project.writeSync(), ‘utf-8’);をして、内容を上書きして終了します。最後のcb()は、Gruntタスク内のthis.asyncを実行して、タスクが完了させています。
という(雑すぎてあとで自分で思い出せるのか不安な)メモ。