LoginSignup
8
7

More than 5 years have passed since last update.

rakeで悟る

Posted at

この投稿は、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 が書くのだろう。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7