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

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

More than 1 year has passed since last update.

対象

こんなことを思ってる人

  • 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 に触れるのも楽しいですね!

planningdev
九州工業大学 ITサービス開発・運用団体
https://www.planningdev.com/
Why not register and get more from Qiita?
  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
No 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
ユーザーは見つかりませんでした