React Native クライアント SDK
重要
Visual Studio App Center は、2025 年 3 月 31 日に廃止される予定です。 完全に廃止されるまで Visual Studio App Center を引き続き使用できますが、移行を検討できる推奨される代替手段がいくつかあります。
このプラグインは CodePush サービスのクライアント側統合を提供し、React Native アプリに動的更新エクスペリエンスを簡単に追加できます。
それはどのように機能するのでしょうか。
React Native アプリは、JavaScript ファイルと関連するイメージで構成され、パッケージャーによってバンドルされ、プラットフォーム固有のバイナリ (.ipa
または .apk
ファイル) の一部として配布されます。 アプリがリリースされると、JavaScript コード (バグ修正の作成、新機能の追加など) またはイメージ資産を更新するには、バイナリ全体を再コンパイルして再配布する必要があります。これには、発行先のストアのレビュー時間が含まれます。
CodePush プラグインは、JavaScript とイメージを CodePush サーバーにリリースした更新プログラムと同期することで、エンド ユーザーの前で製品の改善をすぐに得るのに役立ちます。 これにより、アプリはオフライン モバイル エクスペリエンスの利点と、サイドローディング更新プログラムが利用可能になるとすぐに "Web に似た" 機敏性を得ることができます。
エンド ユーザーが常に機能しているバージョンのアプリを持っていることを確認するために、CodePush プラグインは以前の更新プログラムのコピーを保持するため、クラッシュを含む更新プログラムを誤ってプッシュした場合は、自動的にロールバックできます。 これにより、サーバーに ロールバック する前に、新しいリリースの機敏性によってユーザーがブロックされることはありません。
注意
ネイティブ コードに触れる製品の変更 ( AppDelegate.m/MainActivity.java ファイルの変更、新しいプラグインの追加など) は CodePush 経由で配布できないため、適切なストアを介して更新する必要があります。
サポートされているReact Native プラットフォーム
- iOS (7 以降)
- Android (5.0 以降)
- Windows (UWP)
以前のバージョンのReact Nativeとの下位互換性を維持するために最善を尽くしていますが、プラットフォームの性質上、リリース間に破壊的変更が存在するため、使用しているReact Nativeの正確なバージョンをサポートするために、特定のバージョンの CodePush プラグインを使用する必要がある可能性があります。 次の表は、それぞれのReact Nativeバージョンを公式にサポートする CodePush プラグインのバージョンの概要を示しています。
React Nativeバージョン | CodePush バージョンのサポート |
---|---|
<0.14 | サポート対象外 |
v0.14 | v1.3 (Android サポートが導入されました) |
v0.15-v0.18 | v1.4-v1.6 (iOS 資産のサポートが導入されました) |
v0.19-v0.28 | v1.7-v1.17 (Android 資産のサポートが導入されました) |
v0.29-v0.30 | v1.13-v1.17 (RN リファクターネイティブ ホスティング コード) |
v0.31-v0.33 | v1.14.6-v1.17 (RN リファクターネイティブ ホスティング コード) |
v0.34-v0.35 | v1.15-v1.17 (RN リファクターネイティブ ホスティング コード) |
v0.36-v0.39 | v1.16-v1.17 (RN リファクタリングされた再開ハンドラー) |
v0.40-v0.42 | v1.17 (RN によってリファクタリングされた iOS ヘッダー ファイル) |
v0.43-v0.44 | v2.0 以降 (RN リファクタリングされた uimanager 依存関係) |
v0.45 | v3.0 以降 (RN リファクタリングされたインスタンス マネージャー コード) |
v0.46 | v4.0 以降 (RN リファクター js バンドル ローダー コード) |
v0.46-v0.53 | v5.1 以降 (RN によって JS モジュールの未使用の登録が削除されました) |
v0.54-v0.55 | v5.3 以降 (Android Gradle プラグイン 3.x 統合) |
v0.56-v0.58 | v5.4 以降 (ANDROID ツールの RN アップグレードバージョン) |
v0.59 | v5.6 以降 (RN リファクター js バンドル ローダー コード) |
v0.60-v0.61 | v6.0 以降 (RN が自動リンクに移行) |
私たちは新しいReact Nativeリリースに対応するために努力していますが、時には私たちを壊します。 このグラフを各React Nativeリリースで更新して、ユーザーが公式サポートの内容を確認チェックできるようにします。
サポートされているコンポーネント
React Native アセット システム (構文の使用など) を使用する場合、次の一覧は、CodePush を介require("./foo.png")
して参照されるイメージとビデオの更新をサポートするコア コンポーネント (および props) のセットを表します。
コンポーネント | Prop(s) |
---|---|
Image |
source |
MapView.Marker ( react-native-maps >=O.3.2 が必要) |
image |
ProgressViewIOS |
progressImage , trackImage |
TabBarIOS.Item |
icon , selectedIcon |
ToolbarAndroid (React Native 0.21.0 以降) |
actions[].icon , logo , overflowIcon |
Video |
source |
次の一覧は、静的イメージとビデオ (構文の使用など) に依存しているため、CodePush を介して更新される資産を現在サポートしていないコンポーネント (および props) のセットを { uri: "foo" }
表しています。
コンポーネント | Prop(s) |
---|---|
SliderIOS |
maximumTrackImage , minimumTrackImage , thumbImage , trackImage |
Video |
source |
この一覧は、資産の参照をサポートする新しいコア コンポーネントがリリースされると更新され、ユーザーが CodePush を使用して更新が期待できることを正確に把握できるようにします。
注意
CodePush は、ソース prop で を使用 require
する場合にのみ Video コンポーネントで動作します。例えば:
<Video source={require("./foo.mp4")} />
ストア ガイドラインのコンプライアンス
Google Play と内部分散アプリ (Enterprise、Fabric、App Center など) には CodePush を使用して更新プログラムを発行する方法に制限はありませんが、iOS App Storeとそれに対応するガイドラインには、アプリケーション内にソリューションを統合する前に注意する必要があるより正確なルールがあります。
Apple の開発者プログラム使用許諾契約書(段落 3.3.2 の下)では、JavaScript と資産の完全に許可された、最新バージョン (20210607) で ダウンロード可能な この判決はさらに広範です。
解釈されたコードはアプリケーションにダウンロードできますが、(a) がアプリケーションの主な目的を変更しない限り、(b) 他のコード App Storeまたはアプリケーションのストアまたはネットショップは作成されません。 および (c) は、OS の署名、サンドボックス、またはその他のセキュリティ機能をバイパスしません。
CodePush を使用すると、プッシュする更新プログラムによって、製品が元のApp Store承認された意図から大幅に逸脱しない限り、これらの規則に完全に準拠できます。
Apple のガイドラインにさらに準拠し続けるために、App Store分散アプリでは、 を呼び出sync
すときに オプションを有効にupdateDialog
しないことをお勧めします。これは、App Storeレビュー ガイドラインでは次のように記述されているためです。
アプリは、アプリの評価、アプリの確認、他のアプリのダウンロード、またはアプリの機能、コンテンツ、または使用にアクセスするための他の同様のアクションをユーザーに強制してはなりません。
ユーザーに新しいバージョンのダウンロードを強制するわけではないため、これは必ずしも当 updateDialog
てはまらないが、少なくともそれを表示することにした場合は、その判決に注意する必要がある。
アプリ/スターターの例
React Nativeコミュニティは、作業を開始する開発者の例として役立つ素晴らしいオープンソースアプリをいくつか優れた方法で作成しました。 次の一覧は、CodePush も使用している OSS React Native アプリの一覧であり、他のユーザーがサービスをどのように使用しているかを確認するために使用できます。
- F8 アプリ - F8 2016 の公式会議アプリ。
- Product Hunt のネコ - Product Hunt 用の Android クライアント。
- GeoEncoding - Lynx IT Digital によるアプリ。多数のReact Nativeコンポーネントとモジュールを使用する方法を示します。
- 数学の事実 - より簡単に数学の事実を記憶するのに役立つカーンアカデミーによるアプリ。
さらに、React Native + CodePush を使い始め、素晴らしいスターター キットを探している場合は、次のチェックする必要があります。
-
注意
CodePush を使用してReact Native アプリを開発した場合は、オープンソースでお知らせください。 このリストに追加したいと思います。
継続的インテグレーション/デリバリー
CodePush CLI を使用してリリース更新プログラムを "手動で" リリースすることに加えて、アプリに継続的に更新プログラムを配信するための反復可能で持続可能なソリューションを作成することが重要であると考えています。 そうすることで、自分またはチームがアジャイル デプロイのリズムを作成して維持するのに十分なシンプルさになります。 CodePush ベースの CD パイプラインの設定を支援するには、さまざまな CI サーバーとの次の統合を参照してください。
- Azure DevOps - Azure DevOps (旧称 VSTS) には 、App Center と Google Play ストアに発行するための拡張機能も含まれているため、一般的に非常に優れたモバイル CD ソリューションが提供されます。
- Travis CI
TypeScript の使用
このモジュールでは、そのファイルを NPM パッケージの一部として提供 *.d.ts
します。これにより import
、サポート エディター (Visual Studio Code など) で IntelliSense を受け取り、TypeScript を使用している場合はコンパイル時の型チェックを受け取ることができます。 ほとんどの場合、この動作はすぐに動作しますが、ファイルの または module
コンパイラ オプションtsconfig.json
のtarget
値として指定es6
している場合は、 オプションも にnode
設定moduleResolution
してください。 これにより、TypeScript コンパイラは、 内で node_modules
インポートされたモジュールの型定義を探します。 それ以外の場合は、モジュールをインポートしようとすると、次のようなエラーがreact-native-code-push
発生します。 error TS2307: Cannot find module 'react-native-code-push'