1 つの画面で効率よく iOS アプリ開発を行う方法
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 は無効にせずに、リカバリモードを使用すること実現させます。
- Mac をシャットダウンします。
- リカバリモードとして Mac を立ち上げます。
-
⌘ + R
を押しながら Mac の電源を入れます。 - Apple のロゴが出てきたら
⌘ + R
のキーを離してください。
-
- ディスクユーティリティを起動します。
- macOS がインストールされているディスクを選択して「マウント」ボタンを押します。
- ディスクユーティリティを終了します。
- メニューバーの「ユーティリティ > ターミナル」を選択してターミナルを起動します。
-
mkdir -p /Volumes/Macintosh\ HD/AppleInternal
を実行します。 - メニューバーの「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 シミュレータを起動してみます。
メニューバーに Internal
の項目が出てきていることが確認できました。
1 つの画面で表示
手順 | イメージ |
---|---|
メニューバーの「Internal > Allow Fullscreen Mode」を選択します。 | ![]() |
アプリケーションの緑のボタンを長押しします。 | ![]() |
iOS シミュレータを選択します。 | ![]() |
これにより画面が分割され、1 つの画面で開発が可能となりました。
私は 11 インチの Macbook Air を使用しており、スイッチイングを行わずに済み、とても重宝しています。
隠し機能の無効化
隠し機能を無効化したい場合は /AppleInternal
ディレクトリを削除するだけで良いです。
sudo rm -rf /AppleInternal
/AppleInternal
ディレクトリの削除は SIP の対象ではないため、リカバリモードを使用せずとも削除が可能です。 しかし、再び有効化したい場合はリカバリモードを使用してディレクトリを作成する必要があります。
Internal のその他の機能
本題とは逸れますが、この隠し機能にはフルスクリーンにするだけではなく、他にも様々な機能が用意されています。
機能の一部を紹介いたします。
機能 | 挙動 |
---|---|
タッチイベントを表示する機能 | ![]() |
ピンチジェスチャーを表示する機能 | ![]() |
ピンチのピポットポイントを表示する機能 | ![]() |
エッジジェスチャーをハイライトする機能 | ![]() |
UI のコンテンツ枠を表示する機能 | ![]() |
シミュレータのベゼルを任意の色に変更する機能 | ![]() |
これらを使用することで、皆さんの開発効率を向上させることができるかもしれません。
これら以外にも機能があるので、是非試してみてください!
まとめ
/AppleInternal
ディレクトリを作成することで、iOS シミュレータの隠し機能を有効にできました。
また、1 つの画面でデバックが実現可能となり、画面サイズに制約がある場合に効率よくデバックできる方法を紹介しました。
合わせて、iOS シミュレータの隠し機能の一部も紹介しました。
冒頭にもお話しましたが、これはディベロッパー向けに公開されている機能ではないため、予期せぬ挙動を起こす可能性があります。 あくまで隠し機能の有効化および各機能の使用に関しては自己責任でお願いします。
それでは素敵な iOS 開発ライフをお送りください!