Help us understand the problem. What is going on with this article?

rakeで悟る

More than 3 years have passed since last update.

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away