React Native Client SDK
重要
Visual Studio App Center は、2025 年 3 月 31 日に廃止される予定です。 完全に廃止されるまで Visual Studio App Center を引き続き使用できますが、移行を検討できる推奨される代替手段がいくつかあります。
このプラグインは、CodePush サービスのクライアント側統合を提供するため、React Native アプリに動的更新エクスペリエンスを簡単に追加できます。
それはどのように機能しますか?
React Native アプリは、JavaScript ファイルと関連する images で構成され、 packager によってバンドルされ プラットフォーム固有のバイナリ ( .ipa
または .apk
ファイル) の一部として配布されます。 アプリがリリースされると、JavaScript コード (バグ修正の作成、新機能の追加など) またはイメージ資産を更新するには、バイナリ全体を再コンパイルして再配布する必要があります。これには、公開先のストアのレビュー時間が含まれます。
CodePush プラグインは、JavaScript とイメージを CodePush サーバーにリリースした更新プログラムと同期させることで、エンド ユーザーの前で製品の改善をすぐに実現するのに役立ちます。 これにより、アプリはオフライン モバイル エクスペリエンスの利点と、更新プログラムが利用可能になるとすぐにサイドローディングの "Web に似た" 機敏性を得られます。
エンド ユーザーが常に機能しているバージョンのアプリを持っていることを確認するために、CodePush プラグインは以前の更新プログラムのコピーを保持するため、クラッシュを含む更新プログラムを誤ってプッシュした場合は、自動的にロールバックできます。 これにより、サーバーでをに登録する前に、新しいリリースの機敏性によってユーザーがブロックされることはありません。
Note
ネイティブ コードに触れる製品の変更 ( AppDelegate.m/MainActivity.java ファイルの変更、新しいプラグインの追加など) は CodePush 経由で配布できないため、適切なストアを介して更新する必要があります。
サポートされている React Native プラットフォーム
- iOS (7 以降)
- Android (5.0 以降)
- Windows (UWP)
以前のバージョンの React Native とのプラグインの下位互換性を維持するために最善を尽くしていますが、プラットフォームの性質とリリース間に破壊的変更が存在するため、使用している React Native の正確なバージョンをサポートするために、特定のバージョンの CodePush プラグインを使用する必要がある可能性があります。 次の表は、各 React Native バージョンを正式にサポートする CodePush プラグインのバージョンの概要を示しています。
React ネイティブ バージョン | 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 以降の (RN アップグレードバージョンの Android ツール) |
v0.59 | v5.6+ (RN リファクタリング js バンドル ローダー コード) |
v0.60-v0.61 | v6.0+ (RN が自動リンクに移行) |
新しい React Native リリースに対応するために努力していますが、時には中断することがあります。 このグラフは、ユーザーが公式のサポート内容を確認できるように、各 React Native リリースで更新します。
サポートされているコンポーネント
React Native アセット システム ( require("./foo.png")
構文の使用など) を使用する場合、次の一覧は、CodePush を介して参照されるイメージとビデオの更新をサポートするコア コンポーネント (および小道具) のセットを表します。
コンポーネント | 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 |
次の一覧は、( { uri: "foo" }
構文の使用など) 静的なイメージとビデオへの依存関係のため、CodePush を介して更新されるアセットを現在サポートしていないコンポーネント (および小道具) のセットを表しています。
コンポーネント | Prop(s) |
---|---|
SliderIOS |
maximumTrackImage 、 minimumTrackImage 、 thumbImage 、 trackImage |
Video |
source |
この一覧は、アセットの参照をサポートする新しいコア コンポーネントがリリースされると更新され、CodePush を使用した更新が期待される内容をユーザーが正確に把握できるようにします。
Note
CodePush は、ソース プロパティで require
を使用する場合にのみ Video コンポーネントで動作します。例えば:
<Video source={require("./foo.mp4")} />
ストア ガイドラインのコンプライアンス
Google Play と内部分散型アプリ (Enterprise、Fabric、App Center など) には CodePush を使用して更新プログラムを発行する方法に制限はありませんが、iOS App Store とそれに対応するガイドラインには、アプリケーション内にソリューションを統合する前に注意する必要があるより正確なルールがあります。
Apple の開発者プログラム使用許諾契約書、段落 3.3.2 の下で、JavaScript とアセットの完全に許可された、最新バージョン (20210607) ダウンロード可能です この規定はさらに広範です。
解釈されたコードは、アプリケーションにダウンロードできますが、(a) App Store に送信されたアプリケーションの意図された目的およびアドバタイズされた目的と矛盾する機能を提供することによって、アプリケーションの主な目的を変更しない場合、(b) 他のコードまたはアプリケーションのストアまたはネットショップは作成されません。 および (c) は、OS の署名、サンドボックス、またはその他のセキュリティ機能をバイパスしません。
CodePush を使用すると、プッシュする更新プログラムが元の App Store で承認された意図から製品を大幅に逸脱しない限り、完全に準拠してこれらのルールに従うことができます。
Apple のガイドラインをさらに遵守するために、sync
を呼び出すときに App Store 分散アプリでupdateDialog
オプションを有効にしないことをお勧めします。これは、App Store レビュー ガイドラインで次の内容が記述されているためです。
アプリは、アプリの評価、アプリのレビュー、他のアプリのダウンロード、またはアプリの機能、コンテンツ、または使用にアクセスするための他の同様のアクションをユーザーに強制してはなりません。
ユーザーが新しいバージョンをダウンロードすることを強制しないため、これは必ずしも updateDialog
の場合ではありませんが、少なくともそれを表示する場合は、その判断に注意する必要があります。
サンプル アプリ/スターター
React Native コミュニティでは、作業を開始する開発者向けの例として役立つ優れたオープンソース アプリを優れた方法で作成しました。 次の一覧は、CodePush も使用している OSS React Native アプリの一覧であり、他のユーザーがサービスをどのように使用しているかを確認するために使用できます。
- F8 アプリ - F8 2016 の公式会議アプリ。
- Product Hunt のネコ - Product Hunt 用の Android クライアント。
- GeoEncoding - 多数の React ネイティブ コンポーネントとモジュールを使用する方法を示す、Lynx IT Digital によるアプリ。
- 数学の事実 - より簡単に数学の事実を暗記するのに役立つカーンアカデミーによるアプリ。
さらに、React Native + CodePush の使用を開始し、素晴らしいスターター キットを探している場合は、次を確認する必要があります。
-
Note
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 を使用している場合はコンパイル時の型チェックを受け取ることができます。 ほとんどの場合、この動作は既定で機能しますが、tsconfig.json
ファイルで target
または module
compiler オプションの値としてes6
を指定した場合は、moduleResolution
オプションも node
に設定していることを確認してください。 これにより、TypeScript コンパイラは、インポートされたモジュールの型定義を node_modules
内で確認できます。 それ以外の場合は、 react-native-code-push
モジュールをインポートしようとすると、次のようなエラーが発生します: error TS2307: Cannot find module 'react-native-code-push'
。