AppleのHot Code Pushリジェクト問題、React Nativeへの影響は?

Rollout.io導入アプリがリジェクトされた話題は、3月7日にHackerNewsで盛大に盛り上がりました。
Hot Code Pushというのは、App Storeのレビューを通さずにアプリの挙動を変更できる仕組みのこと。
Rollout.ioはこの仕組みを利用してバグ修正が迅速に行えるサービスを提供していました。

上記Hacker Newsのコメ欄にRolloutのCEOのErezが出てきたりして、顔面蒼白ぶりがひしひしと感じられますねぇ。
これだからプラットフォーム依存は怖い!

ネイティブの動きを変えられるようにするのはダメ

何がダメかっていうと、以下のAPIを使って動的に挙動を変えられるようにすることです:

dlopen(), dlsym(), respondsToSelector:, performSelector:, method_exchangeImplementations()

いくら安全にこれを取り扱ったとしても、ハイジャックされてMITMアタックとかが起こりえるからダメというのがAppleの判断。
これ別に昔っからあるライセンス条項だったと思うんですけど、どうやら最近になって急に厳しく取り締まり始めたのが騒動の発端らしい。

React NativeのCode Pushはどうなの

このニュースを見て個人的に気になったのがReact Nativeアプリへの影響です。
React NativeにもCode Pushというライブラリがありますが、これもダメなんでしょうか?

調べてみると、React NativeのGitHub issueで既に結論が出ていました

Problem: Apps with the lib Rollout.io, JSPatch and similars are being rejected because they can dynamically change Swift / Objective-C code without passing through Apple Review process.

Libraries like Code Push only updates JavaScript code and were not affected, at least not yet.

React Native has nothing to do with this problem, don’t worry about it.

次にライセンスを確認してみます。

Apple Developer Program License Agreement

section 3.3.2より:

Except as set forth in the next paragraph, an Application may not download or install executable code. Interpreted code may only be used in an Application if all scripts, code and interpreters are packaged in the Application and not downloaded. The only exceptions to the foregoing are scripts and code downloaded and run by Apple’s built-in WebKit framework or JavascriptCore, provided that such scripts and code do not change the primary purpose of the Application by providing features or functionality that are inconsistent with the intended and advertised purpose of the Application as submitted to the App Store.

強調は筆者による。

大丈夫そう

上記の通りライセンスでは、WebKitとJavascriptCoreで実行されるコードに関しては例外としています。
また、React NativeとCode Pushでは先述の禁止されたAPIをExposeしていません。
Code PushはあくまでReact Nativeのbundleコードしか変更しません。

よって、この組み合わせは大丈夫!!!!

審査通ったよっていう報告も見つけました。

JSPatchとRolloutは使うな

要はネイティブの挙動は変えちゃダメよって話です。
JSPatchやRolloutはこれをしています。
同じような機能を提供しているライブラリも軒並みアウトでしょう。
気をつけてください。

投稿者:

Takuya

Digital crafts(man|dog). Love photography. Always making otherwise sleeping. born in 1984.

“AppleのHot Code Pushリジェクト問題、React Nativeへの影響は?” への2件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中