Xcode Simulatorは、開発者が最も広く使用しているツールの一つです。 シミュレータ上でアプリを実行してテストすることは、すべての開発者の日常的な作業の一部となっています。 シミュレータの様々なオプションに精通することは、開発者にとって不可欠です。 シミュレータの作成や設定は、コマンドラインからも行えることをご存知ですか?
- シミュレータとは何か
- 便利なシミュレータのオプションについて
- コマンドラインからシミュレータを作成、設定する
- コマンドラインを使用してログをストリーム、キャプチャする
- 異なるロケールのシミュレータ上でアプリを自動起動するための Bash スクリプトを作成する。
Getting Started
このページの上部または下部にある Download Materials ボタンをクリックして、プロジェクトをダウンロードします。 RayWonders プロジェクトを開きます。 ビルドして実行します。
このアプリには、PhotoとMapの2つのタブがあります。 Photoタブでは、世界の不思議な写真が表示されます。 写真をタップすると、その説明の詳細が表示されます。 Mapタブでは、世界の不思議の写真を地図上にアノテーションとして表示します。 raywenderlich.comのチュートリアルの中では珍しく、プロジェクトに手を加えることはありません。 その代わり、このアプリを基礎にして、様々なシミュレータのオプションを学ぶことができます。
What Is a Simulator?
シミュレータは、Mac上でiOS、iPadOS、tvOS、watchOSをシミュレートするための素晴らしいツールです。 異なるデバイスをシミュレートすることで、ラピッドプロトタイピングやビルドのテストに役立ちます。
ユーザースペースは、アプリケーションを実行するために割り当てられたシステムメモリで、カーネルスペースは、OSカーネルとデバイスドライバーを実行するために割り当てられたシステムメモリです。
カーネルは、OSのコアコンポーネントです。 ハードウェアコンポーネントとソフトウェアコンポーネント間の相互作用を促進します。
これらのプロセスのひとつであるデーモンは、バックグラウンドで実行されます。launchd、cfprefsd、distnotedは、システムデーモンの一部です。
デバイス上でアプリを実行する場合とシミュレーター上で実行する場合
シミュレーター上でアプリをテストするのは非常に便利です。
コンピューティング パフォーマンス
シミュレーターは、Macと同じコンピューティング リソースを共有します。 これには、メモリ、CPU、ネットワーク接続が含まれます。 一方、物理的なデバイスは、Macに比べてメモリやコンピューティングパワーが少ないです。
Display
Mac と物理デバイスの解像度や色域が異なるため、画像やテキストがギザギザに表示されることがあります。
ハードウェアの制限
シミュレータでサポートされていないハードウェア コンポーネントがあります。
- Bluetooth
- カメラ
- 加速度計やジャイロスコープなどのモーション センサー
- 近接センサー
Framework Limitations
いくつかのフレームワークは、シミュレータではサポートされていません。
- ARKit
- HomeKit
- IOSurface
- MessageUI
すべての違いのより詳細なリストについては、Simulator メニューの Help ▸ Simulator Help を選択して、ドキュメントを参照してください。
次に、シミュレータを整理する方法について説明します。
Organizing Simulators Using Xcode
Xcode には、デフォルトのシミュレータのセットが同梱されています。
- Xcode を開きます。
- 「Window」メニューオプションを選択します。
- 「Devices and Simulators」メニューを選択します。
- Simulators タブを選択します。
Xcode に同梱されているシミュレータのリストが表示されます。
ここでは、カスタム名で新しいシミュレータを作成します。
以下の手順に従ってください。
- 左下の「+」ボタンを押します。
- シミュレータの名前を「Demo」にします。
- OSバージョンとしてiOS 14.2を選択します。
- 「作成」を押します。
これでDemoという名前の新しいシミュレーターが作成され、シミュレーターのリストに表示されます。
Demo シミュレータの [Show as runtime destination] チェックボックスをオフにします。
これにより、シミュレータが非表示になります。
コントロールボタンをクリックして、デモ シミュレータを表示します。
先に進み、[削除] をクリックして Demo シミュレータを削除します。
古いランタイムの実行
古いバージョンのランタイムでアプリを実行しなければならない場合があります。
新しいシミュレータを作成するときに、OS バージョン ドロップダウンで [Download more runtimes] を選択すると、古いランタイムをダウンロードできます。 Xcode] ▸ [環境設定] ▸ [コンポーネント] オプションを選択します。
このウィンドウには、ダウンロードされたシミュレータのランタイムと、ダウンロード可能な他のランタイムのリストが表示されます。
次に、シミュレータを作成する別の方法を学びます。
シミュレータ メニューからシミュレータを作成する
ビルドして実行する
シミュレータが実行されているときに、以下の手順を実行します:
- シミュレータ メニューから ファイル ▸ 新規 シミュレータ を選択します。
- シミュレータの名前として「Demo」と入力します。
- デバイスの種類として「iPhone 12 Pro」を選択します。
- バージョンとして「iOS 14.2」を選択します。
- 「作成」をクリックします。
以下の手順でシミュレータを開きます:
- メニューから「ファイル」▸「シミュレータを開く」を選択し、
- iOS 14.2のランタイムを選択します。
- Demo シミュレータを選択します。
これで Demo シミュレータが起動します。
Comparing Simulator Size Options
シミュレータのサイズを変更するには、4 つのコーナーのいずれかをクリックしてドラッグします。
物理的なサイズ
物理的なサイズは、実際のデバイス サイズに合わせてシミュレーターをリサイズします。
ポイント アキュレート
ポイント アキュレート モードでは、異なるスケール ファクターを持つデバイスでコンテンツが同じサイズになるように、ウィンドウをサイズ変更します。
Pixel Accurate
このモードでは、ウィンドウのサイズが物理的なデバイスと同じピクセル数に変更されます。 シミュレーションされたデバイスの各ピクセルは、Macのディスプレイ上の1ピクセルに対応します。 このため、お使いのMacのディスプレイのピクセル密度がシミュレーションされたデバイスよりも低い場合、シミュレータの画面が大きく表示されます。
画面のフィット モードのシミュレータ
このモードでは、シミュレータのサイズを Mac のディスプレイのサイズに合わせて変更します。
次に、シミュレータで提供されるさまざまなオプションを学びます。
スロー アニメーション
アニメーションは、アプリケーション エクスペリエンスの不可欠な部分です。 デモ シミュレーターで RayWonders をビルドして実行します。
「写真」タブをタップします。 次に、世界の不思議の写真をタップすると、その場所についての詳細が表示されます。
もう一度写真をタップします。
アニメーションをゆっくり見ることで、わかりやすくなります。
次に、ダーク モードのシミュレーションを学びます。 先に進む前に、[デバッグ] ▸ [遅いアニメーション] メニュー オプションを選択解除して、遅いアニメーションを無効にします。
ダーク モード
ダーク モード は、低照度の環境で素晴らしい視聴体験を提供します。
[機能] ▸ [外観の切り替え] を選択します。 これにより、外観がダーク モードに切り替わります。
マップがダークな外観に変更されていることに気づくでしょう。 簡単でしょう? これは、ダーク モードでアプリをテストするための便利な方法です。
外観をデフォルトに戻すには、[機能] ▸ [外観の切り替え]の選択を解除します。 ダーク モードをサポートする方法については、「ダーク モードをサポートする」を参照してください。
次に、プッシュ通知をシミュレートする方法を学びます!
Simulating Push Notifications
プッシュ通知は、アプリの新しいコンテンツの更新をユーザーに知らせるための素晴らしい方法です。 以前は、プッシュ通知のテストは難しいものでした。 プッシュ通知をテストするには、物理的なデバイスが必要でした。
RayWondersPushNotification.apnsというファイルを以下のように作成します。
RayWondersPushNotification.apnsというファイルを以下のように作成します。
{ "Simulator Target Bundle": "com.raywenderlich.RayWonders", "aps": { "alert": { "title": "Hindi language support added!", "body": "Checkout RayWonders in Hindi!" } }}
これは、title
body
は特別なキーです。
ペイロードを試す前に、まずアプリに通知許可を与える必要があります。
以下の手順に従ってください:
- DemoシミュレータでRayWondersを開きます。
- 「写真」タブの右上にあるベルのアイコンをタップします。
- 通知許可のプロンプトで「許可」を選択します。
- シミュレーターのメニューから「デバイス」▸「ホーム」を選択し、アプリをバックグラウンドにします。
次に、RayWondersPushNotification.apns ファイルを Demo シミュレータにドラッグ アンド ドロップします。
ジャジャーン! 目に見える形でプッシュ通知が表示されています。 簡単でしたね。 シミュレータはプッシュ通知をシミュレートすることしかできないことに注意してください。
プッシュ通知についてもっと詳しく知りたい方は、Push Notifications Tutorialをご覧ください。
次に、ズームの方法を学びます。
ズームインとズームアウト
シミュレータで RayWonders を開きます。 マップ] タブに切り替えます。 地図は、世界の不思議の中心に置かれ、ズームインされています。 他の世界の不思議はどこにあるでしょうか?
世界観を見るためにはズームアウトする必要があります。
クリックとドラッグは素晴らしいですが、すぐに飽きてしまいます。
場所のシミュレーション
シミュレータでは、場所のシミュレーションを簡単に行うことができます。
以下の手順に従ってください:
- シミュレータでRayWondersを開き、「マップ」タブに切り替えます。
- 「マップ」タブの「位置情報サービスの開始」ボタンをタップします。
- 「アプリ使用中に許可」を選択します。
さて、位置情報をシミュレートするには、
- シミュレーターのメニューから「機能」▸「位置情報」▸「カスタム位置情報」を選択します。
- 緯度に 41.8902142、経度に 12.4900422 を入力します。
- OK をクリックします。
これで、地図上のコロッセオに直接アクセスできます。
とはいえ、シミュレーションする各場所の座標を入力するのは、かなりの記憶力を要する作業です。 次は、この問題に対するより簡単な解決策を学びます。
地図アプリから場所を共有する
macOSの地図アプリは、シミュレータと場所を共有する簡単な方法を提供しています。
シミュレーターのマップビューでは、今あなたはマチュピチュにいます。
おめでとうございます。 コロッセオからマチュピチュまでの最速旅行者として、世界記録を樹立しましたね。
アプリでの位置情報の扱いについてもっと詳しく知りたい方は、「MapKitとCore Location」をご覧ください。
さて、いよいよここからが本番です。
シェイク ジェスチャーをシミュレートする
シェイク ジェスチャーは、アプリでユーザーにフィードバックを促すための素晴らしい合図です。 しかし、どのようにしてシミュレーターを振ることができるのでしょうか。 ありがたいことに、Macを厳密にシェイクすることが解決策ではありません。
デモ シミュレータで RayWonders を開きます。
これは、シェイク ジェスチャーをシミュレートします。
RayWonders はシェイクを検出し、ユーザーにアラートを表示します。 motionEnded(_:with:)
というメソッドを実装することで、アプリでシェイクジェスチャーを検出して処理することができます。
次に、メモリ警告をシミュレートする方法について説明します。
Simulating a Memory Warning
iOS は、アプリのメモリ使用量がデバイスの上限に近づくと、アプリに警告を送信します。
Demo シミュレータで RayWonders を開きます。 メニューから [デバッグ] ▸ [メモリ警告のシミュレーション] を選択します。
これは、メモリ警告をシミュレートします。
RayWonders では、アラートが表示されます。 メモリ警告の処理については、この Responding to Memory Warnings Apple documentation で詳しく説明されています。
ここまで、いくつかの便利なシミュレータ オプションを見てきました。 このチュートリアルではカバーされていないものもいくつかあります。 アプリケーションのニーズに応じて、それらをチェックする必要があります。
- Simulate iCloud sync using Features ▸ Trigger iCloud Sync.
- Simulate Apple Pay authorization using Features ▸ Authorize Apple Pay.
- Trigger Siri using Device ▸ Siri.
- Check System.
- [Debug] ▸ [Open System Log]を使ってシステムログを確認する。
次に、コマンドラインを使ってシミュレータを操作する方法を学びます。 また、様々なシミュレータのメニューオプションについても学びました。
ターミナルを開きます。 次のコマンドを入力します:
xcrun simctl --help
そしてEnterキーを押します。
helpオプションは、simctlを使って利用できるすべてのサブコマンドのリストを提供します。
Simctlは、シミュレータの管理とプログラムによるインターフェースを支援するツールです。
ここでは、これらのサブコマンドのいくつかについて説明します。
xcrun simctl list
listコマンドは、利用可能なすべてのデバイスとランタイムのリストを表示します。
また、デバイスの現在の状態(BootまたはShutdown)も表示されます。
次に、コマンドラインからシミュレータを作成して起動する方法を学びます。
コマンドラインからシミュレータを作成する
新しいシミュレータを作成する前に、Xcodeで作成したDemoシミュレータを削除します。 次のように入力します:
xcrun simctl delete Demo
delete コマンドは、シミュレータを識別して削除します。
次のように入力します:
xcrun simctl create Demo "iPhone 12 Pro" "iOS14.2"
createコマンドは、デバイスタイプとランタイムを受け取り、シミュレータを作成します。
Enter the following:
xcrun simctl boot Demo
Demoシミュレーターを起動します。
さて、コマンドラインを使ってRayWondersをインストールします。 まず、アプリのバンドルが必要です。
- Project navigator を開き、Products フォルダにある RayWonders.app を選択します。
- 右クリックして Show in Finder を選択します。
- RayWonders を自分のホームディレクトリにコピーします。
「ターミナル」を開き、次のように入力してホームディレクトリに移動します:
cd ~
次に、次のように実行します:
xcrun simctl install Demo RayWonders.app
install
コマンドにより、RayWondersがシミュレータにインストールされます。 素晴らしいですね!
simctlを使ってアプリを起動することもできます。 次のように入力します:
xcrun simctl launch Demo com.raywenderlich.RayWonders
launchコマンドは、アプリのバンドルIDをパラメータとして受け取ります。 RayWondersがDemoシミュレータで起動します。
おめでとうございます。 これで、コマンドラインからシミュレータを作成し、起動し、インストールし、起動することができました。 他にもいくつかのオプションを試すことができます:
- terminate:
- erase: デバイスの内容を消去します。
- uninstall: これは、アプリケーションをアンインストールします。 アプリケーションのバンドル識別子を指定する必要があります。
次に、アプリケーションで利用可能なクールなコマンドを学びます。
Taking Screenshots
アプリケーションのスクリーンショットは、いくつかのシナリオで役立ちます。
次のコマンドを入力してください:
xcrun simctl io Demo screenshot screenshot.png --type="png"
これは現在の画面のスクリーンショットを撮り、ファイルscreenshot.pngに保存します。 screenshot
コマンドは、pngに加えて、TIFF、BMP、GIF、JPEGなどの他のファイル形式もサポートしています。
スクリーンショットは、アプリケーションの外観を示すことができ、百聞は一見にしかずです。
動画の録画
simctlを使ってアプリの動画を録画することができます。 録画を開始するには、次のコマンドを入力します:
xcrun simctl io Demo recordVideo Demo.mov --codec="h264"
シミュレーター上でRayWondersと対話します。 終了したらターミナルでControl-Cを押してください。 これで、Demo.mov.
さらに、録画時に任意のコーデックを指定することができます。 デフォルトのコーデックは hevc です。
recordVideo
コマンドを使用すると、QuickTime プレーヤーを使用せずにアプリのビデオを録画することができます。
ステータス バーのカスタマイズ
シミュレーターでアプリのステータス バーを確認します。 バッテリーは満タンで、デバイスには最高の信号があり、シミュレーター上の時間はローカルの Mac の時間であることがわかります。 これらを上書きしたい場合はどうすればいいのでしょうか。
ターミナルで次のコマンドを入力します:
xcrun simctl status_bar Demo override \ --dataNetwork 4g --cellularBars 2 --batteryState charging \ --batteryLevel 25 --time 12:05
これにより、ステータス バーの設定が上書きされます:
- データ ネットワークを 4G に設定
- 携帯電話の信号を 2 バーに設定
- バッテリーの状態を充電に、バッテリー レベルを 25% に設定
- シミュレーター上の時間を 12.05 に設定。
自分のプロジェクトでこれを行う場合、ステータス バーの情報を好きなように設定できます。
status_bar
コマンドは、アプリのスクリーンショットやビデオの外観をカスタマイズしたいときに、とても便利です。
作業が終わったら、次のように入力して、ステータスバーをデフォルトの外観に戻します:
xcrun simctl status_bar Demo clear
デバッグと診断
Simctl には、問題のデバッグや診断に役立ついくつかのコマンドも用意されています。
ターミナルに戻って、次のように入力します。
xcrun simctl get_app_container Demo com.raywenderlich.RayWonders
get_app_container
アプリバンドルのパスを表示します。
このパスを使って、アプリコンテナ内のデータを検査することができます。
さて、ターミナルで次のように入力します。
xcrun simctl spawn Demo log stream
これで、Demoシミュレーターからすべてのログのストリーミングが始まります。
しかし、検査するにはデータ量が多すぎる場合があります。
xcrun simctl spawn Demo log stream | grep com.raywenderlich.RayWonders
これはログをフィルタリングし、RayWonders からのログのみを表示します。
アプリを操作すると、ターミナルに表示されるログが増えます。
以下のように入力してください:
xcrun simctl diagnose
diagnose
コマンドは、ログやクラッシュを含む多くのデータを収集します。 また、Appleが問題をデバッグするのに役立つファイルを生成します。 デフォルトでは、収集されるログは起動したデバイスのものです。
これであなたはシミュレータのコマンドラインエキスパートになりました。
Automating Using a Bash Script
ここでは、シミュレータを複製し、RayWonders を異なるロケールで起動するスクリプトを作成します。
まず、Terminal を開き、次のように入力します。
touch sim_utility.sh
これにより、sim_utility という名前の新しいファイルが作成されます。 .sh という拡張子は、シェル スクリプトであることを示しています。
次に、以下を実行します。
chmod +x sim_utility.sh
これでsim_utility.shが実行可能になります。
sim_utility.sh をエディタで開き、以下を追加します:
#!/bin/bash#1COMMAND="$1"SIMULATOR_NAME="$2"#2get_id_of_simulator() { #TODO}get_status_of_simulator() { #TODO}launch() { #TODO}#3case $COMMAND in"launch") launch "$3" "$4" "$5" ;;*) launch_help exit 1 ;;esac
以下のようになります:
- このスクリプトは、コマンドラインのパラメータとして、コマンド名とシミュレータ名を受け取ります。
-
get_id_of_simulator
get_status_of_simulator
launch
は空のスタブで、次に実装します。 - スクリプトは現在、
launch
launch
は3つの追加パラメータを取りますが、これはすぐに実装することになります。
get_id_of_simulator
#TODO
を次のように置き換えてください:
xcrun simctl list | grep "$SIMULATOR_NAME" | \awk 'match($0, /\((+)\)/) {print substr( $0, RSTART + 1, RLENGTH-2 )}'
get_id_of_simulator
は、パラメータとして指定された名前に一致するシミュレータのリストを検索します。 一致するものが見つかった場合、サブストリング操作によって、シミュレータのユニークな識別子を取得します。
get_status_of_simulator
#TODO
を次のように置き換えます:
xcrun simctl list | grep "$SIMULATOR_NAME" | \awk 'match($0, /\((+)\)/) {print substr( $0, RSTART + 1, RLENGTH - 2 )}'
get_status_of_simulator
launch
の中で使用します。
起動を実装する
launch
#TODO
を次のように置き換えます:
#1BUNDLE_ID="$1"LOCALE="$2"LANGUAGE="$3"CLONE_NAME="$LOCALE"#2SIMULATOR_ID=$(get_id_of_simulator)if ; then echo "No device matching the name: $SIMULATOR_NAME" returnfiecho "Simulator id: $SIMULATOR_ID"echo "Bundle id: $BUNDLE_ID"echo "Locale: $LOCALE"#3SIMULATOR_STATUS=$(get_status_of_simulator)echo "Simulator Status: $SIMULATOR_STATUS"if ; then echo "Making sure the device is shutdown first..." xcrun simctl shutdown "$SIMULATOR_NAME"fi#4echo "Cloning the device with name $LOCALE..."xcrun simctl clone "$SIMULATOR_NAME" "$CLONE_NAME"#5echo "Booting device..."xcrun simctl boot "$SIMULATOR_NAME"xcrun simctl boot "$CLONE_NAME"#6echo "Launching app..."xcrun simctl launch "$SIMULATOR_NAME" "$BUNDLE_ID"#7xcrun simctl launch "$CLONE_NAME" "$BUNDLE_ID" -AppleLocale "$LOCALE" \ -AppleLanguages "($LANGUAGE)"
ファイルを保存します。 これが何をするのか、順を追って説明します。
- アプリケーションのバンドル ID、ロケール、アプリケーションを起動する言語などの追加のパラメーターを
launch
CLONE_NAME
を宣言します。 -
get_id_of_simulator
を呼び出して、シミュレータのIDを取得します。 そして、その結果をSIMULATOR_ID
に格納します。 一致するシミュレータがない場合は、プログラムを終了します。 -
get_status_of_simulator
Booted
shutdown
コマンドを実行し、シャットダウンします。 -
clone
コマンドを使用してシミュレータをクローン化します。 -
boot
コマンドを使用して、オリジナルのシミュレータとクローン化されたシミュレータの両方を起動します。 - 元の SIM で
launch
コマンドを使用してアプリを起動します。 - クローンされた SIM で
launch
コマンドを使用してアプリを起動します。
Launching RayWonders in a Different Locale
Terminal を開き、次のように実行します:
./sim_utility.sh launch Demo com.raywenderlich.RayWonders hi_IN hi
RayWonders は、hi_IN という名前のクローン化されたシミュレータ上で、ヒンディー語で起動します。
もう、アプリをテストするために、設定に行ってデバイスの言語を切り替える必要はありません。 これで、アプリを複数の言語で同時に確認することができます。 素晴らしいですね!
xcrun simctl list | grep Demo
を実行することで、利用可能なシミュレータの数を確認することができます。 RayWonders は他にもいくつかの言語をサポートしています。
./sim_utility.sh launch Demo com.raywenderlich.RayWonders ja_Jp ja
RayWonders now launch in Japanese on a new simulator.
楽しいチャレンジとして、sim_utility スクリプトにさらに 2 つのコマンドを実装してみて下さい
- Cleanup:
- Cleanup: シミュレーター名を指定してシミュレーターを削除します。
これらのオプションがすべて実装されたスクリプトの最終バージョンは、ダウンロードしたマテリアルの Scripts フォルダにあります。
Where to Go From Here?
このページの上部または下部にある Download Materials ボタンをクリックして、プロジェクトをダウンロードします。
このチュートリアルでは、便利なシミュレータとコマンドラインのオプションを大量に学びました。
- Getting the Most Out of Simulator
- Become a Simulator expert
このチュートリアルを楽しんでいただけましたでしょうか。
raywenderlich.com Weekly
raywenderlich.com のニュースレターは、モバイル開発者として知っておくべきすべてのことを最新の状態に保つ最も簡単な方法です。
チュートリアルやコースのダイジェストを毎週お届けするほか、ボーナスとして無料の詳細なメールコースをご用意しています。
平均評価
5/5
このコンテンツに評価を追加する
サインインして評価を追加する