2
Help us understand the problem. What are the problem?

posted at

updated at

Organization

Xcodeのビルド時間を改善するために足掻いてみた話(PodBuilder)

はじめに

「build待ちです」

エンジニアとしてキャリアをスタートさせてから2ヶ月。一番発している言葉かもしれません。
一日の中でビルドを待つ時間が長すぎるのをなんとかしたいので、足掻いてみようと思いました。

やりたいこと

クリーンビルドの時間を1秒でも早くしたい

環境

M1 MacbookAir 8GB
macOS Big Sur(11.6.2)
Xcode 13.1
Swift 5.5.1
自社サービス「 sportsbull

現状を調べる

以下のサイトに処理が遅くなる関数を計測する方法が載っていました。

以下のコマンド打つだけで合計時間は出るようです。

defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES

とりあえず計測! 結果は...

スクリーンショット 2022-06-03 4.03.50.png

なんと8分近くもかかってました。毎回これはやばい。

かかっている時間がまずいことはわかったものの、何をしていいのかわからないので、
とりあえず調べて当たりをつけてみることにしました。
その中で、効果がありそうなPodBuilderを試してみました。

PodBuilderとは

CocoaPods経由で導入したライブラリを事前にFrameworkに事前構築して、
クリーンビルドするたびに発生するライブラリのビルド時間を短縮することができるようです。

導入

必要ver

Ruby2.6.3以降
Cocoapods1.9.0以降

インストール

$ sudo gem install pod-builder

プロジェクトの初期化

$ cd (リポジトリ);
$ pod_builder init

これでPodBuilderファイルができました。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313434313535302f62613761336231362d653331382d643634342d386334362d3263643664333538323065302e706e67.png

実際に使ってみた

すべてのライブラリを指定するわけにもいかないので、ビルドログ上で結構目立っていた
"YouTubePlayer"と"youtube-ios-player-helper-swift"を対象にしてみます。
(ログ上はこの2つだけで20sec近くかかっていた)

$ pod_builder build YouTubePlayer youtube-ios-player-helper-swift

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313434313535302f62613761336231362d653331382d643634342d386334362d3263643664333538323065302e706e67.png

実行すると、PodBuilderのPrebuiltフォルダに2つのライブラリをインストールしてくれました。

Podfile.
pod 'youtube-ios-player-helper-swift', :path => 'PodBuilder/Prebuilt/youtube-ios-player-helper-swift' # pb<youtube-ios-player-helper-swift>
pod 'YouTubePlayer', :path => 'PodBuilder/Prebuilt/YouTubePlayer' # pb<YouTubePlayer>

Podfileもpathが自動で追記されています。
これでビルドしてみると...

スクリーンショット 2022-06-03 3.47.12.png

80秒くらい早くなりました!
20秒早くなる想定だったのですが、思った以上に効果ありました。

所感

めちゃくちゃ簡単にできて効果もあるので、いわゆるオープンソースのSDKに対しては
どんどん使用してもいいのかなと感じました。
懸念点としては、制限等がドキュメントにも記載がなかったため不明な点です。
また、どういうロジックで80secも早くなったのかがわかってないので、
この辺りも今後調べていきたいなと思っています。
(このSDKを参照している部分のコンパイルも早くなる?...etc)

おまけ

PodBuilderを使ってみた感想記事になってますが、
あくまで今回のタイトルは"ビルド時間の改善"です。
他にやったことですが、ビルドした時に時間がかかった関数を
出力できるツールがありました。

ビルドに50msec以上時間がかかっている関数を洗い出したところ、

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313434313535302f39653265656635392d303038612d626132662d373566382d3633396263613730653430322e706e67.png

大量にありました。
ここもリファクタしていけば早くなりそうな気がしますが、
今の所効果を得る方法がわかっていないので
追々触っていけたらなと思っています。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
2
Help us understand the problem. What are the problem?