7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Shell ScriptAdvent Calendar 2017

Day 4

【Xcodeビルド高速化】Shell Scriptを駆使して初心者でもカンタン!

Last updated at Posted at 2017-12-03

対象

こんなことを思ってる人

  • Automator で作成した app のディレクトリをShell Scriptに渡したい
  • とりあえず簡単に Xcode でのビルドを高速化したい

Xcode でのビルド速度を高速化する方法は、 iOS アプリ開発者なら多くの方が知っていることでしょう。コマンドラインで1行のコマンドをたたくだけです。
ですが、今回は超初心者でも置くだけで高速化できるアプリを紹介するとともに、仕組みをご紹介します。
※どんなことよりも遊び心を優先しています。ご了承ください。

とりあえず速くしたい

環境:macOS
TuningXcode

TuningXcode.app をプロジェクトのルートディレクトリ( xcodeproj ファイルがあるところ)に置いてください。このアプリからプロジェクトが開けるようになります。ちなみに、起動と同時に高速化を行っているので、その他に必要な操作等はございません。

仕組み

  1. Apple Script で .app が置かれたディレクトリの絶対パスを取得する
  2. 絶対パスを Bash に渡す
  3. ビルド時間表示を有効にする
  4. ビルド高速化を有効にする
  5. プロジェクトファイルを開く

Apple Script で絶対パス取得

Automator で .app として書き出しを行った場合、 Apple Script なしでは .app が置かれたディレクトリの絶対パスを取得することができないようです。正直、ここが一番難しかったように感じます。

tell application "Finder"
	set thePath to (POSIX path of (path to me))
end tell
set AppleScript's text item delimiters to "TuningXcode.app"
text item 1 of thePath

$1 に絶対パスが渡されるので cd $1 として Shell Script を書けば、 .app が置かれたディレクトリで Shell を走らせることが可能になります。

高速化からプロジェクトを開くまで

CocoaPods を利用している場合にも対応させるために Shell Script の記述量が多めになっていますが、もっとカッコよく少ない行数で書けると思います。参考程度にご覧ください。

# .app が置かれたディレクトリに移動
cd $1

# ビルド時間表示を有効化
defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES
# CPUのコア数を取得
cores=$(system_profiler SPHardwareDataType | grep 'Total Number of Cores:' | sed -e 's/.*Cores: \([0-9]*\).*/\1/')
# 並列ビルドを有効化
defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks `expr $cores \* 2`

# 開くプロジェクトファイル名を取得
fullFileName=$(ls | grep .xcodeproj)
fileName="${fullFileName%.*}"
extension='.xcworkspace'
newFileName=$fileName$extension
if [ -e $newFileName ]; then
  fullFileName=$newFileName
fi

# プロジェクトファイルを開く
open -a Xcode.app $fullFileName

並列ビルドに関してですが、HTT (ハイパースレッディング・テクノロジー)を考慮してCUPコア数の2倍に設定しています。
手動でCUPコア数を調べる必要もないので、この Shell Script を sh ファイルに保存して実行してもいいと思います(いや、それで十分だと思います)。

Automator に組み込む

Screen Shot 2017-11-30 at 23.11.50.png
あとは Automator に上記コードを入力して .app として出力するだけです。 .app 内のアイコンファイルを変更すれば好きなロゴにも変更できますし、色々おもしろいことができます。

どれくらい早くなるの?

chocotips#1.017.jpeg
パソコンのスペックやプロジェクトの大きさなどにもよりますが、軽量のアプリでは上記のような結果になりました。

こういったことをきっかけに、 Shell Script に触れるのも楽しいですね!

7
3
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
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?