この記事では、OSLogを使って、ログをコンソールに表示させたいと思います。iOS14以降、iOS13以下で記述の仕方が違いますが、今回は、iOS14以降のやり方でやっていこうと思います。
そもそもアプリログとは?
アプリログというのは、アプリのを操作した時の情報を蓄積したデータのことです。
今回は簡単にコンソールに表示させていきますが、実は、ストレージにもこのログは蓄積されていきます。
コンソールに表示させるなら、print()
でよくねと思う方がいるかと思いますが、OSLogは、print()
よりも詳しい情報を取得できます。何時何分何秒に行われたのか、どのような動作をしたのかが確認できます。
OSLogの使い方
ボタンをいくつか配置して、コードに@IBAction
で紐付けます。
①ボタンを適当にいくつか配置します。
②それぞれボタンを異なる名前で@IBAction
で紐付けます。
ログを定義するファイルを作成します。
command + nで新しいSwiftファイルを作成しましょう。
ファイル名は、今回は適当にOSLog+Logger.swift
にしておきます。
OSLog+Logger.swift
に以下のコードを追加してください。
このように、用途に合わせてカテゴリー分けができます。(今回はuiとnetwork、viewcycleの3つで分けた)
import os extension OSLog { static let ui = Logger(subsystem: "com.satoriku.OSLog", category: "ui") static let network = Logger(subsystem: "com.satoriku.OSLog", category: "network") static let viewCycle = Logger(subsystem: "com.satoriku.OSLog", category: "viewcycle") }
ViewController.swift
にもimport
しましょう。
import os
ViewDidLoadのブロックの中には、OSLog.viewCycle
でログを記載しましょう。
OSLog.viewCycle.log("viewDidLoad()")
ButtonActionのブロックの中には、OSLog.ui
でログを記載しましょう。
(ボタン名(defaultsButton)はそれぞれ変えておきましょう。)
OSLog.ui.log("defaultsButtonをタップ")
実行して確認しましょう。
ボタンを押すと、そのボタンを押した時刻とカテゴリーとメッセージが表示されると思います。
さらに、Console.appでも確認してみましょう。
command + スペースで、Spotlightを起動させ、コンソール
と入力してアプリを開きましょう。
①左のメニューから今立ち上げてるシミュレーターを選択
②開始ボタンをクリック
③右上にプロジェクト名で検索
以下のように、ボタンを押すと、リアルタイムでログが表示されます。
このような感じで、OSLogを使っていきます。
import os extension OSLog { static let ui = Logger(subsystem: "com.satoriku.OSLog", category: "ui") static let network = Logger(subsystem: "com.satoriku.OSLog", category: "network") static let viewCycle = Logger(subsystem: "com.satoriku.OSLog", category: "viewcycle") }
import UIKit import os class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() OSLog.viewCycle.log("viewDidLoad()") } @IBAction func defaultsButtonAction(_ sender: Any) { OSLog.ui.log("defaultsButtonをタップ") } @IBAction func grayButtonAction(_ sender: Any) { OSLog.ui.log("grayButtonをタップ") } @IBAction func filledButtonAction(_ sender: Any) { OSLog.ui.log("filledButtonをタップ") } @IBAction func tintedButtonAction(_ sender: Any) { OSLog.ui.log("tintedButtonをタップ") } }
参考文献