React Native Client SDK
Importante
Visual Studio App Center è pianificato per il ritiro il 31 marzo 2025. Anche se è possibile continuare a usare Visual Studio App Center fino a quando non viene completamente ritirato, esistono diverse alternative consigliate a cui è possibile considerare la migrazione.
Altre informazioni sulle sequenze temporali e sulle alternative di supporto.
Questo plug-in fornisce l'integrazione lato client per il servizio CodePush, consentendo di aggiungere facilmente un'esperienza di aggiornamento dinamico alle app React Native.
Come funziona?
Le app React Native sono costituite da file JavaScript e da eventuali immagini associate, raggruppate dal packager e distribuite come parte di un file binario specifico della piattaforma (un .ipa
file o .apk
). Quando l'app viene rilasciata, l'aggiornamento del codice JavaScript (ad esempio, la correzione di bug, l'aggiunta di nuove funzionalità) o gli asset di immagine, richiede di ricompilare e ridistribuire l'intero file binario, che include qualsiasi tempo di revisione per gli archivi in cui si sta pubblicando.
Il plug-in CodePush consente di ottenere immediatamente miglioramenti al prodotto davanti agli utenti finali, mantenendo sincronizzati JavaScript e le immagini con gli aggiornamenti rilasciati al server CodePush. In questo modo, l'app offre i vantaggi di un'esperienza per dispositivi mobili offline, nonché l'agilità "web-like" degli aggiornamenti sideload non appena sono disponibili.
Per assicurarsi che gli utenti finali abbiano sempre una versione funzionante dell'app, il plug-in CodePush mantiene una copia dell'aggiornamento precedente, in modo che, nel caso in cui si eseva accidentalmente un aggiornamento che includa un arresto anomalo, può eseguire automaticamente il rollback. In questo modo, è possibile assicurarsi che la nuova agilità di rilascio non comporterà il blocco degli utenti prima di avere la possibilità di eseguire il rollback sul server.
Nota
Tutte le modifiche apportate al prodotto che toccano il codice nativo (ad esempio, la modifica del file appDelegate.m/MainActivity.java, l'aggiunta di un nuovo plug-in) non possono essere distribuite tramite CodePush e quindi devono essere aggiornate tramite gli archivi appropriati.
Piattaforme React Native supportate
- iOS (7+)
- Android (5.0+)
- Windows (UWP)
Cerchiamo di mantenere la compatibilità con le versioni precedenti del plug-in con le versioni precedenti di React Native, ma a causa della natura della piattaforma e l'esistenza di modifiche di rilievo tra le versioni, è possibile che sia necessario usare una versione specifica del plug-in CodePush per supportare la versione esatta di React Native in uso. La tabella seguente illustra le versioni del plug-in CodePush che supportano ufficialmente le rispettive versioni di React Native:
Versioni native di React | Supporto delle versioni codePush |
---|---|
<0.14 | Non supportata |
v0.14 | v1.3 (introdotto il supporto per Android) |
v0.15-v0.18 | v1.4-v1.6 (è stato introdotto il supporto degli asset iOS) |
v0.19-v0.28 | v1.7-v1.17 (è stato introdotto il supporto delle risorse Android) |
v0.29-v0.30 | v1.13-v1.17 (codice di hosting nativo refactoring RN) |
v0.31-v0.33 | v1.14.6-v1.17 (codice di hosting nativo refactoring RN) |
v0.34-v0.35 | v1.15-v1.17 (codice di hosting nativo refactoring RN) |
v0.36-v0.39 | v1.16-v1.17 (gestore ripreso refactoring RN) |
v0.40-v0.42 | v1.17 (file di intestazione iOS refactoring RN) |
v0.43-v0.44 | v2.0+ (dipendenze uimanager con refactoring RN) |
v0.45 | v3.0+ (codice di gestione istanze refactoring RN) |
v0.46 | v4.0+ (codice del caricatore bundle js refactored js) |
v0.46-v0.53 | v5.1+ (RN rimossa la registrazione inutilizzata dei moduli JS) |
v0.54-v0.55 | v5.3+ (integrazione di Android Gradle Plugin 3.x) |
v0.56-v0.58 | v5.4+ (versioni aggiornate di RN per gli strumenti Android) |
v0.59 | v5.6+ (codice del caricatore bundle js refactoring RN) |
v0.60-v0.61 | v6.0+ (RN migrato a Collegamento automatico) |
Lavoriamo duramente per rispondere alle nuove versioni di React Native, ma a volte ci interrompono. Questo grafico verrà aggiornato con ogni versione di React Native, in modo che gli utenti possano verificare che cos'è il supporto ufficiale.
Componenti supportati
Quando si usa il sistema di asset React Native (ad esempio usando la require("./foo.png")
sintassi), l'elenco seguente rappresenta il set di componenti di base (e prop) che supportano l'aggiornamento delle immagini e dei video a cui si fa riferimento tramite CodePush:
Componente | Prop/s |
---|---|
Image |
source |
MapView.Marker (Richiede 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 |
L'elenco seguente rappresenta il set di componenti (e proprietà) che attualmente non supportano l'aggiornamento degli asset tramite CodePush, a causa della dipendenza da immagini e video statici (ad esempio usando la { uri: "foo" }
sintassi):
Componente | Prop/s |
---|---|
SliderIOS |
maximumTrackImage , minimumTrackImage , thumbImage trackImage |
Video |
source |
Questo elenco verrà aggiornato man mano che vengono rilasciati i nuovi componenti principali, che supportano il riferimento agli asset, per assicurarsi che gli utenti sappiano esattamente cosa possono aspettarsi di aggiornare usando CodePush.
Nota
CodePush funziona solo con i componenti video quando si usa require
nella proprietà di origine. Per esempio:
<Video source={require("./foo.mp4")} />
Conformità delle linee guida per l'archiviazione
Anche se Google Play e le app distribuite internamente (ad esempio Enterprise, Fabric, App Center) non hanno limitazioni su come pubblicare gli aggiornamenti usando CodePush, l'App Store iOS e le relative linee guida hanno regole più precise da tenere presenti prima di integrare la soluzione all'interno dell'applicazione.
Il Contratto di licenza per sviluppatori di Apple, ai sensi del paragrafo 3.3.2, ha completamente consentito gli aggiornamenti over-the-air di JavaScript e asset - e nella sua versione più recente (20210607) scaricabile qui questa decisione è ancora più ampia:
Il codice interpretato può essere scaricato in un'applicazione, ma solo a condizione che tale codice: (a) non modifica lo scopo principale dell'applicazione fornendo funzionalità o funzionalità non coerenti con lo scopo previsto e annunciato dell'applicazione come inviato all'App Store, (b) non crea uno store o una vetrina per altre applicazioni o codice, e (c) non ignora la firma, la sandbox o altre funzionalità di sicurezza del sistema operativo.
CodePush consente di seguire queste regole in conformità completa, purché l'aggiornamento push non devi in modo significativo il prodotto dalla finalità approvata dall'App Store originale.
Per continuare a rispettare le linee guida di Apple, è consigliabile che le app distribuite in App Store non consentano di abilitare l'opzione updateDialog
quando si chiama sync
, perché in App Store Review Guidelines it's written that:
Le app non devono imporre agli utenti di valutare l'app, esaminare l'app, scaricare altre app o altre azioni simili per accedere a funzionalità, contenuto o uso dell'app.
Questo non è necessariamente il caso di updateDialog
, perché non forza l'utente a scaricare la nuova versione, ma almeno si dovrebbe essere a conoscenza di tale decisione se si decide di mostrarlo.
App di esempio/Starters
La community React Native ha creato alcune app open source straordinarie che possono essere usate come esempi per gli sviluppatori che iniziano a usare. L'elenco seguente è costituito dalle app React Native osS che usano anche CodePush e possono essere usate per vedere come altri usano il servizio:
- F8 App : app ufficiale per conferenze per F8 2016.
- Feline for Product Hunt - Un client Android per Product Hunt.
- GeoEncoding : un'app di Lynx IT Digital, che illustra come usare numerosi componenti e moduli React Native.
- Math Facts - Un'app di Khan Academy per memorizzare i fatti matematici più facilmente.
Inoltre, se si sta cercando di iniziare a usare React Native + CodePush e si sta cercando un kit di avvio impressionante, è consigliabile consultare quanto segue:
-
Nota
Se hai sviluppato un'app React Native usando CodePush, è open source, comunicaci. Ci piacerebbe aggiungerlo a questo elenco!
Integrazione continua/Recapito
Oltre a usare l'interfaccia della riga di comando di CodePush per gli aggiornamenti delle versioni "manualmente", riteniamo che sia importante creare una soluzione ripetibile e sostenibile per il recapito continuo degli aggiornamenti all'app. In questo modo, è abbastanza semplice per te o il tuo team creare e mantenere il ritmo delle distribuzioni agile. Per facilitare la configurazione di una pipeline cd basata su CodePush, fare riferimento alle integrazioni seguenti con vari server di integrazione continua:
- Azure DevOps - Azure DevOps (noto in precedenza come VSTS) include anche estensioni per la pubblicazione in App Center e Google Play Store, quindi offre una soluzione CD per dispositivi mobili piuttosto efficace in generale.
- Travis CI
Utilizzo di TypeScript
Questo modulo include il *.d.ts
file come parte del pacchetto NPM, che consente di usarlo import
e ricevere intellisense negli editor di supporto (ad esempio Visual Studio Code), nonché nel controllo dei tipi in fase di compilazione se si usa TypeScript. Nella maggior parte dei casi, questo comportamento dovrebbe funzionare correttamente, tuttavia, se è stato specificato es6
come valore per l'opzione del target
compilatore o module
nel tsconfig.json
file, assicurarsi di impostare anche l'opzione moduleResolution
su node
. In questo modo il compilatore TypeScript cercherà all'interno di node_modules
per le definizioni dei tipi dei moduli importati. In caso contrario, si riceverà un errore simile al seguente quando si tenta di importare il react-native-code-push
modulo: error TS2307: Cannot find module 'react-native-code-push'
.