AWSの話題を中心に、日々の業務やプログラミングの徒然を綴るエンジニアブログです。

HANDS LAB

HANDS LAB ENGINEERS BLOG

ハンズラボエンジニアブログ

iOSDC Japan 2017で東急ハンズのiOSデバイス管理手法について話しました

Pocket

Pocket

こんにちは。
きんちゃん。(Yusuke Kuroiwa)です。

少しだけ、自己紹介します。
東急ハンズで利用している、HandsPOSと呼ばれる自社のiPad POSレジシステムを、Swiftで1から開発してきました。
普段はiOSエンジニアですが、2015年6月頃から東急ハンズの要件にマッチした、デバイス管理も模索しました。

9月17日に、iOSDC Japan 2017東急ハンズのデバイス管理についてお話してきました。
私は、昨年もiOSDCにて、お話をさせて頂きました。
時間がない、スライドだけみたい人は一番下に貼ってます。
スライドの補足もしてるので、ぜひ読んでほしいです。

iOSDC Japanとは

iOSDC (iOS Developers Conference Japan) は、iOSとその周辺技術に関するエンジニアのためのカンファレンスです。

昨年から始まり、今年が二度目のカンファレンスです。
会場も大きくなり、参加者も増え、セッション数も増大しました!
勉強になるようなセッションが多く、懇親会含め非常に楽しかったです。
スタッフの皆様お疲れ様でした。

発表概要

東急ハンズでは、現在3500台超えのiOS端末を管理しています。
主となるのは、PDAとPOSレジです。
弊社はPDAとPOSを、それぞれiPod touch(iPhone)、iPadに自社アプリを組み込み店舗へ配布しています。
今後、POSの展開が進む中、最終的な管理台数は、4600枚ほどに登る予定です。
さて、このような大量のiOS端末はどのように管理するべきなんでしょうか。
iOSDC Japan 2017では、これらの端末を管理するための実際に得た知見、問題点&ハンズラボが実践するエンタープライズ的対処方法についてお話致しました。

iOSのデバイス管理するための課題と解決

実際に大量のデバイスを管理するとなると、下記のような要件が出てきます。

  • キッティングの問題: 開梱してちまちま設定する必要があり、作業を簡略化してして楽にしたい
  • 業務アプリ(In-House app)配布・管理
  • AppStoreにあるようなアプリを配布・管理
  • 社内ネットワークに接続するためのWi-Fiの設定情報の配布
  • デバイスの紛失時の対処をどうするか

上記のような課題は、MDM(Mobile Device Management)やその他の周辺のサービス、合計4つのサービスを利用することで解決ができます。
4つのサービスの詳細は、スライドを参照を。

MDMから端末へアプリインストール通知が届かない問題

MDMを使えば、管理が簡単になり、キッティングも簡単になり、ハッピーになりました。
ですが、サービス仕様的に回避しようがない問題がたまに現れます。

その1つが、MDMから端末へアプリインストール通知が届かない問題です。
MDMからの端末へコマンド発火はすべてプッシュ通知と同じ原理(APNS)を利用しています。
その為、プッシュ通知が届かない端末へは、デバイスの各種情報、アプリのインストール情報、アプリインストール等ができなくなります。

この中でも特にアプリインストールに関しては、自社のPOSレジ(HandsPOS.app)を配布運用している弊社には大問題です。
プッシュ通知がとどないと、アップデート出来ないのです。
アップデートに失敗すると店舗内で隣のPOSレジはある機能が乗ってるけど、また隣のPOSレジはその機能がないというような問題が発生します。

プッシュ通知が届かないのは、デバイスを再起動を行えば、一時的にプッシュ通知が届くようになりなりますが、数日経てばまた届かなくなります。
根本的な、解決に随分の時間を割いてきました、ポートを開けたり、Wi-Fiを切れないようにしたり、、、根本の解決できず諦めました。
ようわからん。

弊社は、Harakiri-Updater(切腹アップデート、自社でのアプリアップデート手法の呼称)で回避しています。
CrashlyticsのAd-Hoc配信でも同じような方法が利用されていました。

下記に貼っつけているのが、実際にHarakiri-Updaterを行ってみた動画です。

  1. アプリが起動した瞬間に、サーバへ必要なバージョン情報を取得
  2. 必要なバージョンより自分のアプリのバージョンが下回っていれば画面にアラート
  3. 従業員の了解を得たら、スライドに乗ってあるURLスキームを開きます( UIApplication.shared.openURL(plistURL) )
  4. アプリを自爆します。※
  5. URL scheme契機で、システムアラートが表示されます。これはたとえ、アプリが死んでも死ぬ前に発火しておけば表示可能です。
  6. 「インストール」ボタンを押してインストールを続行します。

※ iOS 10以下であれば、自爆は不要です。iOS 11では5番で出て来る「インストール」ボタンを押しても自爆しません。
if #available(iOS 11.0, *) 等で対応しておけば良いでしょう。

他にも

上記で紹介した問題にもエンプラのiOSアプリを運用するにはたくさんの課題と解決をしてきました。
昨年のiOSDCでは下記のような内容もお話しました。

  • iPadを有線化する
  • プッシュ通知でアプリを殺して自動アップデートする
  • iPadがスリープ状態でもお行儀とか考えず、バックグランドで音声流して大量のデータを裏でさばく
  • キッティングが問題ないかを確認するために LibMobileGestalt.dylib の利用

バッドノウハウを駆使してでも業務要件に答えなければなりません。
ですが、安定性が一番大事です。そこも考慮しつつ実装・導入は欠かせません。
HandsPOSに関しては、Crash freeは98%-99%です。

iOSの話ししながら手羽先食べます

【iOSエンジニア向け】ハンズラボようこそiOS手羽の会
2017/09/27(水) 19:30 〜 21:30、東新宿で行います。
うまい手羽先食べながら、弊社のことはもちろんですが、iOSについても話しましょう!

スライド公開

スライド公開しているのでぜひ見てください。

nsnextstep.fmにて

先日のnextstep.fmで、今回のiOSDCの中で面白かった発表と評価いただけました!
ありがとうございます!

Pocket