debugging

iOSアプリ開発

iOSアプリ開発で初心者が覚えるべきデバッグ3つの手法

iOS(iPhone)アプリを作り始めるといろんな不具合やエラーに悩まされることは多いですよね。アプリ開発を始めたばかりでエラーの内容もよくわからいし、原因の特定の仕方もわからなくて進まなくなったということもあると思います。実際、エンジニアはどうやって不具合やエラーを解決しているのか気になるところですよね。

今回は、エンジニアが使っているデバッグ手法を紹介していきたいと思います。

デバッグとは?

不具合やバグなどを見つけて直していく作業のことで、プログラミングをやっていく上で必ず必要になってきます。
デバッグは、不具合やエラーの原因を見つけてプログラムを修正するためにデバッガーと呼ばれるツールを使います。
iOSアプリ開発では、標準でついているXcodeのデバッガーを利用してデバッグしていきます。

Xcodeのデバッグエリア

Xcodeにはデバッグするため機能がついており、この機能を使って処理を1度止めたり、ログを出力しておかしな値が入っていないか調べたりすることができます。まずは、これらの機能を使いこなせるようになることがiOSアプリをデバッグする第一段階と言えます。

大前提としてエラーはしっかり読もう

1番最初に身につけて欲しいのは、エラーメッセージを「わからない」で終わらせるのではなくしっかり読むことです。エラーメッセージには、問題点の内容・発生場所・発生の時間など様々な情報が含まれています。

ネットで調べなくてもエラーの原因を考えたり、人に聞く時の参考情報として伝えることができるため聞かれた方も答えやすくなります。クラッシュやエラーなどがある時は、ほぼ必ずエラーログが上がってくるので必ず読みましょう。わからないキーワードがあったときは、1度調べてどんな内容なのか理解しようとすることも大切です。

デバッグ手法5選

debugging

ここからは、具体的なデバッグの手法を紹介していきます。どれも比較的簡単に試すことができるので、デバッグの手法を学んで見たい人は是非試してみてください。

ビューのレイアウトが見れるView Hierarchy

UIのレイアウトを立体的に確認することができる機能です。UIが正しく表示されない時に、どこがおかしいのかを視覚的に確認するために使っています。例えば、ボタンを設置しているけどビューの裏に隠れてしまっている時などにView Hierarchyを使うことで気づくことがあります。

アプリ実行中にデバッグエリアの階層ボタンを押すことで、現在表示しているビューの階層構造を表示することができます。

debugging

処理の結果をログ出力して見る

コード中に以下のメソッドを使用すると処理中の値をコンソールにログとして出力することができます。print -> debugPrint -> dumpとなっていくごとに、以下のように出力内容が詳しくなっていきます。


let numbers = 1...5

print(numbers)
/*
Output:
    1...5
*/


debugPrint(numbers)
/*
Output:
    ClosedRange(1...5)
*/


dump(numbers)
/*
Output:
    ▿ ClosedRange(1...5)
    - lowerBound: 1
    - upperBound: 5
*/

ログに色を付けて分ける

color log

標準出力に対してemojiを設定してエラーの時、クラッシュの時、例外のときなどで分けることができます。下記のようにログの先頭に絵文字を表示することでログを見分けやすくなります。



enum LogType: String {
	case info
	case warning
	case error
	case verbose
	case debug
}

class Logger {
	static func log(_ logType: LogType, _ items: Any) {
		switch logType {
		case LogType.info:
			print("📗 Info: ", items)
		case LogType.warning:
			print("📙 Warning: ", items)
		case LogType.error:
			print("📕 Error: ", items)
		case LogType.verbose:
			print("📘 Verbose: ", items)
		case LogType.debug:
			print("📓 Debug: ", items)
		}
	}
}

ブレークポイント(breakpoint)で処理を止める

ブレークポイントという機能を使うと実行中の処理を一時的に停止することができます。この機能の良いところは、ログなどを仕込まなくても止めた時点の変数の値を確認することができることです。ブレークポイントで止めたときの変数の値をデバッグエリアできます。

color log

lldbコマンドで実行中の値をみる

Xcodeではlldbコマンドを利用することができます。このlldbコマンドを使うことでも変数の値を確認することができます。lldbで代表的なコマンドは、poコマンドとexpressionコマンドです。ブレークポイントで止まっているときに、デバッグエリアのコンソールで実行することができます。

lldb xcode

Step機能を利用する

ブレークポイントには、Step実行というものが提供されています。ステップ実行には、以下のボタンから実行することができます。引き続き処理を止めて実行結果を追跡したいときに利用します。

color log

左から順に以下の働きをします。

コマンド 解説
Continue/Pause 一時停止した処理を解除して、処理を再開する
Step over 一時停止しているメソッドを実行した後に、引き続き処理を停止する
Step into 一時停止しているメソッドの内部に入り込んで、引き続き処理を停止する
Step out 一時停止しているメソッドの外に出て、引き続き処理を停止する

スレッドでエラーの場所を特定する

ブレークポイントを使用したときやクラッシュしたときに、ナビゲーションエリアからスレッドをチェックすることができます。エラー時などにどこから実行されているのか特定するときに活用します。例えば、以下の場合だとLogger.logメソッドで処理が止まっていることが確認できます。

color log

デバッグ機能を上手く使おう

様々なデバッグ手法を使うことで、エラーや不具合の原因を特定したり動作を確認するのが非常にやりやすくなります。開発ではデバッグ作業は必ず発生するので、デバッグツールの使い方を覚えて開発にかける時間を増やせるようにしていきましょう。

programmingフリーランスや副業でエンジニアとして稼ぐための方法を解説Prev

Androidアプリ開発で初心者が覚えるべきデバッグ3つの手法Nextdebugging

Related post

  1. iOSアプリ開発

    SwiftUIで必ず知っておきたいリスト表示の仕方

    iOSアプリを開発するときに、データをリスト表示するUIを実装したいと…

  2. iOSアプリ開発

    Firebase iOSの解説・セットアップ編

    アプリを作る・サービスを立ち上げるといったとき、ほとんどの場合はDBや…

  3. xcode

    iOSアプリ開発

    iOSアプリ開発に必要なXcodeについて知ろう

    iPhoneアプリ作ってみたいけど「アプリ開発って難しそう」「作り方が…

  4. iOSアプリ開発

    SwiftでJSONデータを使いやすくする!Codableの使い方

    APIからデータを取得する時、JSONでデータを受け取ることがあるかと…

  5. iOSアプリ開発

    DispatchQueueを使って容量のあるファイルをダウンロードする方法

    アプリなどで画像のようなファイルデータをダウンロードすることはよくあり…

  6. swiftui

    iOSアプリ開発

    StateとObservableを使ってSwiftUIのビューを変更する方法

    SwiftUIフレームワークを使っているとStateやObserved…

PAGE TOP