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開発ライフをお送りください!