はじめに

個人・法人に関わらずアプリ開発で必ず通る道が、 Google / Apple のアプリ審査です。
アプリを初めてリリースするときやバージョンアップ毎にアプリ審査が行われますが、審査には少し時間がかかります。

去年の話ですが、コロナの影響でAndroidの審査が1週間以上かかることが話題になっていました。
Androidアプリの公開用レビューもCOVID-19の影響で遅れがちに

審査は数年前に比べれば早くなりましたが、緊急の不具合修正で即リリースして反映したい時など問題になってきます(iOSは「App Reviewの優先処理(特急審査)」というものもありますが、審査はなくならないので待ち時間は多少あります)

そこで今回は、アプリ審査なしでアプリに変更を加える方法や、そもそもどういうことができるのかを調べてみました。

注意

  • 本記事が原因で生じたいかなる損害において責任を負いませんので、あらかじめご容赦ください
  • 本記事はあくまでも調査結果をまとめたもので、実際の運用経験に基づくものではありません
  • 本記事で紹介した内容を使用したとしても、アプリの主要な目的や機能を変更するような改修は行うべきではありません
2.5.2 Appはバンドル内で完結している必要があります。他のAppを含め、指定されたコンテナエリア外に対するデータの読み書き、またはAppの特徴や機能を導入したり変更したりするコードをエリア外からダウンロード、インストール、実行することは許可されません。実行形式のコードの学習や開発、学生によるテストを目的とした教育用Appでは、コードが他の目的で使用されないという、限られた状況での使用に限り、コードのダウンロードが許可される場合があります。こうしたAppでは、ユーザーがApp上でソースコードの全体を確認し、編集できるようにしておく必要があります。

Firebase Remote Config

概要

アプリ内のパラメータをサーバ側で更新することによって、アプリの動作や外観を変更できるクラウドサービス。

考えられるユースケース

対象プラットフォーム

  • Android, iOS, Web, C++, Unity

その他、注意点

  • 一度フェッチするとキャッシュされるため、値の更新をしても即再フェッチされない。
    • フェッチ間隔はデフォルトで12時間。変更可能。
  • 設定可能なパラメータ数は2000個、条件は500個の上限制限がある

公式ドキュメント、参考HP

Alternate Icons

概要

ユーザー操作や特定の条件時など任意のタイミングで、ホーム画面のアプリアイコンを変更できる。

考えられるユースケース

  • ホーム画面のアプリアイコンの変更

対象プラットフォーム

  • iOS(iOS10.3以降)

その他、注意点

公式ドキュメント、参考HP

ADEP(Apple Developer Enterprise Program) での配布

概要

AppStore に公開しない社内専用のアプリ。

考えられるユースケース

  • 社内での業務用ツールとしての利用

対象プラットフォーム

  • iOS

その他、注意点

公式ドキュメント、参考HP

OTAアップデート(Hot patching、Hot Code Push)

ここでのOTA(Over The Air)アップデートとは、 App Store・Google Play Store のアプリ審査を通さずに、アプリの挙動を変更できる仕組みのことを指します。
セキュリティ対策や緊急性の高いバグの修正、ゲームの新規イベントの各種パラメータ変更などで利用されており、以下のようなものがあります。

  • CodePush
  • Expo
  • ionic
  • Rollout.io、jsPatch(※現在使用不可ですが、参考のために記載)

「Rollout.io、jsPatch」で後述しますが、Apple はOTAアップデートを禁止しています。ただ一部例外的に認められています。

CodePush

概要

  • OTAアップデートをサポートするためのクラウドサービス
  • React Native と Cordova をサポート
  • Microsoft が開発

公式ドキュメント、参考HP

Expo

概要

  • React Native の開発支援サービス
  • カメラでの撮影や位置情報の取得処理などのネイティブコードを書かずに ExpoSDKの API で実装できる

その他、注意点

  • デフォルトでOTAアップデート有効
  • 以下の内容は OTAアップデートはできない
  • インストール直後のアプリ起動時は、ストアにアップされているバージョンになり、アプリ再起動するとOTAアップデートしたバージョンになる
    • 使い分けとして、大きな機能変更は通常のバージョンアップでアプリ審査通してリリース。
      軽微な変更・改修はOTAアップデート。というのが良さそう

公式ドキュメント、参考HP

Ionic

概要

Angular をベースに、HTML5アプリの開発に特化して作られた JavaScript フレームワーク。

対象プラットフォーム

Web, iOS, Android

公式ドキュメント、参考HP

Rollout、jsPatch

※これは現在使用できませんが、参考のために記載します

概要

2017年3月 Rollout.io や jsPatch を組み込んでいる公開済みのアプリに、Appleからガイドライン違反の可能性を指摘されました。

This includes any code which passes arbitrary parameters to dynamic methods such as dlopen(), dlsym(), respondsToSelector:, performSelector:, method_exchangeImplementations(), and running remote scripts in order to change app behavior or call SPI, based on the contents of the downloaded script.
これには、dlopen(), dlsym(), respondsToSelector:, performSelector:, method_exchangeImplementations() などの動的メソッドに任意のパラメータを渡すコードや、ダウンロードしたスクリプトの内容に基づいてアプリの動作を変更したり SPI を呼び出したりするためにリモートスクリプトを実行するコードが含まれます。

Even if the remote resource is not intentionally malicious, it could easily be hijacked via a Man In The Middle (MiTM) attack, which can pose a serious security vulnerability to users of your app.
リモートリソースが意図的に悪意のあるものでなくても、Man In The Middle(MiTM)攻撃によって容易に乗っ取られてしまい、アプリのユーザーに深刻なセキュリティ上の脆弱性をもたらす可能性があります。

Apple Developer Forums

Rollout.io や jsPatch は dlopen()など指摘されているAPIを使っていたため問題視され、2017年6月以降はこれらを使っているアプリはリジェクトされることになりました。

CodePush などは例外的に認められている

例外として、 WebKit や JavaScriptCore で実行されるコードに関しては認められています。
CodePush や Expo などはネイティブコードの挙動を変更することはせず、JavaScriptCode上で動いているため問題ない(dlopen()など指摘されているAPI未使用)

公式ドキュメント、参考HP

Repro

概要

管理画面上で登録したメッセージを、アプリ審査なしで画像やボタンのついたカスタマイズ可能なダイアログを表示できる。
また、外観や動作の変更できるUXオプティマイザーという機能もある(ベータ版)

考えられるユースケース

公式ドキュメントより抜粋

・カートに商品を入れたあと購入に至らなかったユーザーに対しクーポンを配信する
・コンバージョンをあげるために、数日前に登録したユーザーに適切なナビゲーションを表示する
・たとえばUXオプティマイザーを利用して背景色を制御する実装を行えば、管理画面から値を更新するだけで季節に応じて背景色を変えることが可能になります

Repro – Webメッセージ
Repro – UXオプティマイザー(ベータ版)

対象プラットフォーム

Web, iOS, Android

その他、注意点

UXオプティマイザー部分に関して、公式ドキュメントに以下の記述があります。

公式ドキュメントより抜粋

・ユーザーの承認が必要なタイプのアップデートを行わないこと。信頼できないアプリであるとみなされ、場合によってはアプリがリジェクトされるなどのリスクがあります。
・セキュアなデータ・プライバシー保護の必要のあるデータを取得する用途に利用しないこと。
・プラットフォームの制限や規約を回避しようとしないこと。

Repro – UXオプティマイザー(ベータ版)

類似の他のサービス

公式ドキュメント、参考HP

まとめ

いかがだったでしょうか?

パラメータでアプリ内の挙動を変更する場合は Firebase Remote Config、 動的にダイアログを表示したい場合は Repro などのサービスを利用して実現できますし、ゲームのパラメータ変更や緊急性の高いバグ修正などは React Native の CodePush などで出来るようですね。

アプリ機能が大幅に変わるような変更は問題になりますが、思わぬ不具合に対応するために知っておくと便利ではないでしょうか。



ギャップロを運営しているアップフロンティア株式会社では、一緒に働いてくれる仲間を随時、募集しています。 興味がある!一緒に働いてみたい!という方は下記よりご応募お待ちしております。
採用情報をみる