iOSアプリケーションを開発しているとシミュレータでデバッグすることが多くあります。 しかし、通常では画面が大きくない場合、 開発しているXcodeなどのエディタとシミュレータをスイッチする必要があります。

今回は、隠し機能を使用し、iOSシミュレータを全画面表示を有効にして、 画面の制約がある際に効率的にデバッグを行う手順・手法を紹介します。

/AppleInternal

/AppleInternal ディレクトリはApple社の内部用に用意されたフォルダです。 このディレクトリが存在する場合、iOSシミュレータの隠された機能が有効化されます。

もちろん、我々デベロッパー向けに用意されたものではないため、 常に期待通りに機能するとは限りませんが、いくつかの便利な機能が用意されています。

/AppleInternalの作成

SIPによる制限

High Sierra (10.13) から /AppleInternal ディレクトリ作成がSystem Integrity Protecton (SIP) の対象となり、

sudo mkdir -p /AppleInternal

を実行しても mkdir: /AppleInternal: Operation not permitted となってしまいます。

Sierra (10.12) では上記のコマンドを実行してもフォルダを作成できていました。

リカバリモードを用いたディレクトリの作成

SIPを無効にすることで、ディレクトリを作成可能ですが、セキュリティの観点からあまりオススメできません。

今回はSIPは無効にせずに、リカバリモードを使用すること実現させます。

  1. Macをシャットダウンします。
  2. リカバリモードとしてMacを立ち上げます。
    • ⌘ + R を押しながらMacの電源を入れます。
    • Appleのロゴが出てきたら ⌘ + R のキーを離してください。
  3. ディスクユーティリティを起動します。
  4. macOSがインストールされているディスクを選択して「マウント」ボタンを押します。
  5. ディスクユーティリティを終了します。
  6. メニューバーの「ユーティリティ > ターミナル」を選択してターミナルを起動します。
  7. mkdir -p /Volumes/Macintosh\ HD/AppleInternal を実行します。
  8. メニューバーの「Appleマーク > 再起動」を選択して再起動します。

実行例

以下は私の環境での例ですが、上記の作業をすべてリカバリーモードのターミナルで実行した結果を載せておきます。

$ diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.3 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                 Apple_APFS Container disk2         500.1 GB   disk0s2

/dev/disk1 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        +2.1 GB     disk1
   1:                  Apple_HFS OS X Base System        2.0 GB     disk1s1

/dev/disk2 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +500.1 GB   disk2
                                 Physical Store disk0s2
   1:                APFS Volume Macintosh HD            369.2 GB   disk2s1
   2:                APFS Volume Preboot                 22.7 MB    disk2s2
   3:                APFS Volume Recovery                516.1 MB   disk2s3
   4:                APFS Volume VM                      2.1 GB     disk2s4

/dev/disk3 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            untitled               +5.2 MB     disk3

....

/dev/disk19 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            untitled               +524.3 KB   disk19

/dev/disk20 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            untitled               +2.1 MB     disk20

$ diskutil apfs unlockVolume /dev/disk2s1
Passphrase:
Unlocking any cryptographic user on APFS Volume disk2s1
Unlocked and mounted APFS Volume
$ diskutil mountDisk /dev/disk2s1
Volume(s) mounted successfully
$ mkdir -p "/Volumes/Macintosh HD/AppleInternal"
$ shutdown -r now

隠し機能の有効化の確認

iOSシミュレータを起動してみます。

iOS シミュレータの隠し機能の有効化確認

メニューバーに Internal の項目が出てきていることが確認できました。

1つの画面で表示

手順 イメージ
メニューバーの「Internal > Allow Fullscreen Mode」を選択します。 Intrenal の Allow FullScreen Mode
アプリケーションの緑のボタンを長押します。 アプリケーションの緑ボタンの長押し
iOSシミュレータを選択します。 分割画面における iOS シミュレータの選択

これにより画面が分割され、1つの画面で開発が可能となりました。

分割画面での iOS アプリケーション開発

私は11インチのMacbook Airを使用しており、スイッチイングを行わずに済み、とても重宝しています。

隠し機能の無効化

隠し機能を無効化したい場合は /AppleInternal ディレクトリを削除するだけで良いです。

sudo rm -rf /AppleInternal

/AppleInternal ディレクトリの削除はSIPの対象ではないため、リカバリモードを使用せずとも削除が可能です。 しかし、再び有効化したい場合はリカバリモードを使用してディレクトリを作成する必要があります。

Internalのそのほかの機能

本題とは逸れますが、この隠し機能にはフルスクリーンにするだけではなく、ほかにもさまざまな機能が用意されています。

機能の一部を紹介します。

機能 挙動
タッチイベントを表示する機能 タッチイベントを表示する機能
ピンチジェスチャを表示する機能 ピンチジェスチャーを表示する機能
ピンチのピポットポイントを表示する機能 ピンチのピポットポイントを表示する機能
エッジジェスチャをハイライトする機能 エッジジェスチャーをハイライトする機能
UIのコンテンツ枠を表示する機能 UI のコンテンツ枠を表示する機能
シミュレータのベゼルを任意の色に変更する機能 シミュレータのベゼルを任意の色に変更する機能

これらを使用することで、皆さんの開発効率を向上させることができるかもしれません。

これら以外にも機能があるので、ぜひ試してみてください!

まとめ

/AppleInternal ディレクトリを作成することで、iOSシミュレータの隠し機能を有効にできました。

また、1つの画面でデバッグが実現可能となり、画面サイズに制約がある場合に効率よくデバッグできる方法を紹介しました。

合わせて、iOSシミュレータの隠し機能の一部も紹介しました。

冒頭にもお話しましたが、これはデベロッパー向けに公開されている機能ではないため、予期せぬ挙動を起こす可能性があります。 あくまで隠し機能の有効化および各機能の使用に関しては自己責任でお願いします。

それでは素敵なiOS開発ライフをお送りください!