この投稿は、Dark - Developers at Real Kommunity Advent Calendar 2015の13日目のもの。
背景
Xcodeを使って開発をしているとしばしばXcodeが謎の挙動をすることがある。例えば次のようなもの。
- 補完が効かなくなる
- あるはずのメソッドが無いと怒られ、ビルドすると通るけどエディタ上では怒られ続ける
- CleanしてXcodeを再起動しても問題が治らない
- プロジェクトを一度全て消してリモートからcloneしなおしてきても治らない
- その他もろもろ(最近Androidの開発ばかりであまり覚えていない...)
DerivedDataというキャッシュがこれらの問題に大きく関わる。プロジェクト関連の全てのファイルを消したとしても、DerivedDataは別のディレクトリにあるため盲点になりやすい。
こいつは~/Library/Developer/Xcode/DerivedData/PROJECT_NAME-hogehoge
にある。こいつを消してあげると謎のキャッシュが消えて動作がまともになることが多い。
rake satori
そこで生まれたのがこのsatori
タスク。
# coding: utf-8
PROJECT_NAME = 'SomeProject'
desc 'Setup project'
task :setup do
sh 'bundle', 'install', '--path', 'vendor/bundler'
sh 'bundle', 'exec', 'pod', 'install'
end
desc 'Open workspace'
task :open do
sh 'open', "#{PROJECT_NAME}.xcworkspace"
end
desc 'Remove caches'
task :remove_caches do
dir = Dir.pwd
workspace = dir + "/#{PROJECT_NAME}.xcworkspace"
pods = dir + '/Pods'
cache = Dir.glob("#{ENV['HOME']}/Library/Developer/Xcode/DerivedData/#{PROJECT_NAME}*").first || ""
sh 'rm', '-rf', workspace, pods, cache
end
desc 'Force exit xcode'
task :kill_xcode do
sh 'pkill', '-f', 'Contents/MacOS/Xcode' do |ok, status|
puts ok ? 'Xcode has been killed' : "No Xcode's process exists"
end
end
desc "Cleanup Xocde's cache and your mind"
task :satori => ['kill_xcode', 'remove_caches', 'setup', 'open']
とにかく怪しそうなファイルを消して、プロジェクトを再セットアップするという荒業。ひどい荒業だけども、挙動がおかしくなった時に「とりあえず悟る」ことで消耗しなくなった。悟りは素晴らしい。
他の方法
XcodeのプラグインでDerivedData Exterminatorというものがある(悟りを実装してから気づいたw)。こちらは、GUIでDerivedDataを削除できる。
終わりに
明日は誰も入っていないから、きっと @ara_ta3 が書くのだろう。