iPhone/iPad/iPodのアプリを提供する際、その端末で特定のアプリしか使えないようにしたい要望が出てくることがあります。例えば、

  1. 飲食店にお客さんの注文を受付する
  2. アンケートを収集する
  3. 個人端末を他の人に借りて電話する
  4. 子供に端末を渡して、勉強アプリだけを使って欲しい

実際にアップルはこの様な機能提供しています。

 

 

公式の説明

アクセスガイドは、デバイスで 1 つの App しか使えないように制限します。

どの機能を使えるようにするかもコントロールできます。

お子様に自分のデバイスを使わせる場合や、ジェスチャの誤認が煩わしい場合は、アクセスガイドを有効にしておけます。

 

アクセスガイドを設定する

  1. 「設定」>「アクセシビリティ」の順に選択し、「アクセスガイド」をオンにします。
  2. 「パスコード設定」をタップし、「アクセスガイドのパスコードを設定」をタップします。
  3. パスコードを入力し、もう一度入力します。同じ画面で、アクセスガイドのセッションを Face ID または Touch ID で終了できるようにしておくこともできます。

おそらく、当初の要望に対してはこの機能で対応が可能かと思います。

でも、本当にこれでブログを終わらせてしまっていいのでしょうか!?

 

違います!

自分がエンジニアとして、許せません!

 

今までの内容はコードでコントロールができないでしょうか?

google先生に聞きましたが、マジショックです。開発・プログラム関連情報が見つかりませんでした(もしくは自分の検索の仕方が間違っているか・・・)

 

本当にプログラムでコントロールするインターフェイスは提供されていないのでしょうか?

そこで、公式ドキュメントを調べてみようと思いました。

可能性として考えられるところは、アクセスガイド > Access > Accessibility > Guided >…

  • 公式ドキュメント
  • アップル開発フォーラム
  • overstackflow

最後にUIAccessibilityを発見して、Single App mode の言葉を見つけました!!

これだ!

少しびっくりしましたが、今回検討しているSingle App modeはios7.0でリリースされていた機能でした。

 

※公式ドキュメントURL: https://developer.apple.com/documentation/uikit/uiaccessibility/1615186-requestguidedaccesssession

さー、基本知識はが揃いましった。開発に行きましょう!!

 

コードをピックアップ(swift):

import Accessibility
UIAccessibility.requestGuidedAccessSession(enabled:true)
{  success in

//他の処理

}

 

基本の実装が終わりました。思ったより簡単じゃないかと思われたのではないでしょうか?

しかし!実際にアプリを作って、このコードを実行したのですが、何も変化がありません。

えー!?エラーもないし、シングルモードに切り替え失敗しましたのステータスが返されただけでした。

まさか、何か足りない!?

ドキュメントをみてみると、メソッドの説明で気にあるところがありました。

 

Single App mode will only succeed if the device is Supervised, and the app's bundle identifier has been whitelisted using Mobile Device Management

 

監視・MDM?権限が足りない?さらに調べてみたところ、「Apple Business Manager」を発見しました。

なるほど、プログラムで勝手に使うだけではダメですね。よく考えたら、流石に許可なしで一般ユーザーの端末をロックしてしまうのは、まずいですよね。

では、次はどうするか?一般向けの開発は無理と判断したので、会社のテスト端末で試すことにしました。

早速、「Apple Business Manager」を申請しました(ここの詳細は省略..完了まで1週間ぐらいかかったと思います)

次に、コードが実行するための準備作業を紹介します(Apple Business Manager申請が通った前提として記載します)

 

  1. Apple Configurator 2をインストールし、Apple Business Managerのアカウントでログイン
  2. mobileconfigファイルの準備(もちろん、キーと値がわかる場合、直接にtextエディターでもOKです)
  3. ここで、色々な設定ができます。例えば、ロック画面のメッセージ、利用可能アプリ、アクセスできるURL、VPN、強制パスワードリセット、端末リセットなしなど 参考URL:https://support.apple.com/ja-jp/guidemdm/mdm5370d089/web
  4. 基本の設定はドキュメントに書いてありますが、アプリでシングルモードのコードが正常に実行できるように、手順3に下記の設定追加が必要です

    <key>PayloadContent</key>
    <array>
    <dict>
    …..
    <key>autonomousSingleAppModePermittedAppIDs</key>
    <array>
    <string>jp.co.bravesoft.bsdmanager</string>
    </array>
    </dict>
    </array>
  5. Apple Configurator 2で監視対象を設定(基本は「次へ」タップするだけ)
    ※1.端末は監視対象に設定が必要です。(監視対象になるため、端末はリセットが必要です。)
    ※2.MDMサーバー登録はいらないです

    リセットが完了したら、監視対象のタップに表示されします。

     

     

  6. Apple Configurator 2でmobileconfigインストール(先書き出したmobileconfigファイル) 監視対応タップに端末選択して、追加メニューでmobileconfigファイルをインストールします。
    ※監視対応ではない場合、インストールができません

準備作業が終わりましたら、前のコードをもう一回試したところ、無事端末をがロックすることできました。

これを活用して、弊社では googleと連携して社内のテスト端末簡易管理システムを構築しました。

あまり需要が多い内容ではないと思いますが、参考になったのであれば、嬉しい限りです。

 

以上です!!

※ついでに、MDMシステム提供しているサービスもApple Business Managerの上に構築しました(ios)