iOS アプリのパフォーマンスチューニングにおいて、Signposts を使用する方法について書きます。コード中に仕込んだ最も簡単なマーカーを Instruments で表示させるところまでを、初心者でも分かるように順を追って説明していきます。
#Signposts とは
パフォーマンスを計測するためのマーカーで、Xcode 10 で導入されました。パフォーマンスを調査したいコード中にマーカーを入れて、プロファイリングすることにより、その計測結果を Instruments 上にグラフィカルに表示することができます。
自分の気になるところをフォーカスして解析できるので、パフォーマンスチューニングが捗るはかどると思います。
#確認事項
Xcode 10 で導入されたものなので、iOS 12 以上でないと動きません。
#マーカーの使い方
import os.signpost
まずは、os.signpost
をインポートします。
let bootLog = OSLog(subsystem: "com.example.your-app", category: "BootOperations")
それから、計測したい箇所で、ログのハンドルを取得します。 subsystem
にはアプリの Bundle ID などを適当に指定し、category
はこのログのグループ名を自由に考えて指定します。ここでは、起動時のパフォーマンスを計測するとして、BootOperations
と指定しています。
os_signpost(.begin, log: bootLog, name: "fetch something")
fetchSomething()
os_signpost(.end, log: bootLog, name: "fetch something")
最後に、作成したログのインスタンスを使いながら、計測したい箇所を os_signpost()
の .begin
と .end
で囲みます。ここでは、 fetchSomething()
の時間を測り、 fetch something
として表示するように設定しました。
#計測方法
コードの準備が整ったら、実際に計測してみます。Instruments の Time Profiler を使う手順とほとんど同じなので、Time Profiler を使ったことがない人は、まず下記を参照して下さい。初めての人でも分かりやすくまとまっています。
Instruments Time Profiler の使い方
https://qiita.com/okamotoke/items/daac6645fc44daadf1dd
signpost を使うには、まず、Instruments を Time Profiler を選択して起動させます。
起動させたら、右上の「+」ボタンをクリックし、「Filter」のところで「sign」と入力すると、「os_signpost」が絞り込まれて表示されます。
この「os_signpost」をダブルクリックして追加します。
これで準備完了です。赤丸ボタンを押して計測をスタートし、マーカーを仕込んだコードが実行されたら、ストップしてみましょう。
無事に BootOperations
グループの中で fetch something
の実行時間が記録され、グラフィカルに表示することができました。
#まとめ
Signposts の簡単なマーカーをコード中に仕込み、Instruments で表示させる方法を説明しました。Signposts ではさらにいろいろなことができるので、興味ある方は下記をご覧下さい。
Signposts と Instruments でパフォーマンスを計測する:基礎編
https://qiita.com/hsawada/items/1358ebc9aa1a82ac4f12
#参考文献
Measuring Performance Using Logging
https://developer.apple.com/videos/play/wwdc2018/405
Xcode Time Profiler の使い方
https://qiita.com/okamotoke/items/daac6645fc44daadf1dd