Over-the-air updates: what you can fix without a store review

Mobile21 Οκτωβρίου 20268 min

Κάθε ομάδα app ζει κάποια στιγμή το ίδιο βράδυ. Ένα bug φτάνει στους χρήστες: μια ημερομηνία που φαίνεται μία μέρα νωρίτερα, ένα κουμπί που δεν κάνει τίποτα σε μια έκδοση Android, μια τιμή που διαφωνεί με το checkout. Η διόρθωση γράφεται σε δέκα λεπτά. Το ερώτημα είναι πόσο θα πάρει για να φτάσει στα κινητά. Σε ένα πλήρως native app, η απάντηση είναι ένα νέο build, ένας έλεγχος από το store και η αργή διαδικασία μέχρι να ενημερώσουν οι χρήστες. Σε ένα app React Native πάνω στο Expo, για τα περισσότερα bugs, η απάντηση είναι λίγα λεπτά. Αξίζει να καταλάβετε τη διαφορά με ακρίβεια. Η γραμμή ανάμεσα σε ό,τι μπορεί να σταλεί over the air (ασύρματα, χωρίς νέα έκδοση στο store) και σε ό,τι όχι είναι αυστηρή. Αν την περάσετε κατά λάθος, οι ενημερώσεις over the air χαλάνε apps αντί να τα διορθώνουν.

Ξεκινήστε από το τι είναι ένα app. Ένα app React Native έχει δύο στρώματα. Το native στρώμα είναι το μεταγλωττισμένο κέλυφος: ο κώδικας iOS και Android, τα native modules, οι άδειες που δηλώνονται στο λειτουργικό σύστημα, το εικονίδιο και η οθόνη εκκίνησης. Το στρώμα JavaScript είναι όλα όσα σχεδιάζονται από πάνω: οι οθόνες, οι ροές, οι επιχειρηματικοί κανόνες, τα κείμενα και οι εικόνες που συνοδεύουν. Το build του store περιέχει και τα δύο. Μια ενημέρωση over the air αντικαθιστά μόνο το δεύτερο.

Αυτό δίνει τον κανόνα σε μία πρόταση. Αν η αλλαγή βρίσκεται εξ ολοκλήρου στο στρώμα JavaScript και στα αρχεία του, μπορεί να σταλεί ως ενημέρωση. Αν αγγίζει οτιδήποτε native, χρειάζεται νέο build και έλεγχο από το store. Native αλλαγή είναι μια νέα native βιβλιοθήκη, μια αναβάθμιση του React Native ή του Expo SDK, μια νέα άδεια, μια αλλαγή στις ρυθμίσεις του app, το εικονίδιο. Τα περισσότερα καθημερινά bugs ανήκουν στην πρώτη πλευρά. Οι περισσότερες νέες δυνατότητες ανήκουν στη δεύτερη.

Στο Expo, τις ενημερώσεις τις παραδίδει το expo-updates. Στη συνηθισμένη ρύθμιση, το app ελέγχει για νέα ενημέρωση όταν ανοίγει, την κατεβάζει στο παρασκήνιο και την εφαρμόζει την επόμενη φορά που θα ξεκινήσει. Έτσι ο χρήστης δεν διακόπτεται ποτέ στη μέση μιας ενέργειας. Αυτή η προεπιλογή μετράει όταν σχεδιάζετε μια διόρθωση. Η ενημέρωση φτάνει σε ένα κινητό στο επόμενο άνοιγμα μετά από αυτό που την κατέβασε. Για ένα app που ανοίγει συχνά αυτό είναι ώρες, για ένα που ανοίγει σπάνια μπορεί να είναι μέρες. Όπου μια διόρθωση δεν μπορεί να περιμένει, το app μπορεί να ελέγξει και να ξαναφορτώσει νωρίτερα. Αυτό όμως είναι απόφαση του σχεδιασμού, όχι κάτι που αποφασίζεται στη μέση ενός προβλήματος.

Η πιο σημαντική έννοια είναι το runtime version. Κάθε build έχει ένα, και κάθε ενημέρωση δημοσιεύεται για ένα. Μια ενημέρωση παραδίδεται μόνο σε builds με το ίδιο runtime version. Αυτό εμποδίζει κώδικα JavaScript γραμμένο για ένα νεότερο native στρώμα να φορτωθεί σε ένα παλαιότερο που δεν έχει όσα χρειάζεται. Το Expo μπορεί να βγάλει το runtime version από την έκδοση του app ή από ένα αποτύπωμα (fingerprint) του native project, ώστε κάθε native αλλαγή να δημιουργεί αυτόματα νέο runtime. Αυτό δεν είναι προαιρετικό. Μια ενημέρωση με λάθος αντιστοίχιση είναι ο κλασικός τρόπος να στείλετε μια σωστή διόρθωση σε ένα build που δεν μπορεί να την τρέξει. Το αποτέλεσμα είναι ένα app που ανοίγει σε λευκή οθόνη.

Τα channels και τα branches οργανώνουν τα υπόλοιπα. Κάθε build είναι δεμένο σε ένα channel: την παραγωγή, μια προεπισκόπηση για δοκιμαστές, ένα build staging. Κάθε channel δείχνει σε ένα branch ενημερώσεων. Οι διορθώσεις δημοσιεύονται πρώτα στο channel της προεπισκόπησης, ανοίγονται σε πραγματικά κινητά, και μόνο μετά προωθούνται στην παραγωγή. Το βήμα κοστίζει λίγα λεπτά. Πιάνει την ενημέρωση που δούλευε στην ανάπτυξη και αποτυγχάνει σε μια πιο αργή συσκευή Android.

Οι επαναφορές πρέπει να έχουν αποφασιστεί πριν χρειαστούν. Αν μια ενημέρωση χειροτερέψει τα πράγματα, μπορεί να ξαναδημοσιευτεί η προηγούμενη, ή το channel να δείξει πάλι στον κώδικα που είναι ενσωματωμένος στο build του store. Οι ενημερώσεις μπορούν επίσης να βγουν πρώτα σε ένα ποσοστό χρηστών και να επεκταθούν όταν τα crashes μένουν σταθερά, με την ίδια πειθαρχία που έχει η σταδιακή διάθεση στα stores. Και το expo-updates προστατεύει μόνο του από το χειρότερο σενάριο. Αν μια ενημέρωση που μόλις κατέβηκε κρασάρει καθώς ανοίγει το app, γυρίζει στην τελευταία έκδοση που δούλευε. Έτσι μια κακή ενημέρωση δεν κλειδώνει τους χρήστες έξω από το app.

Μετά, οι κανόνες των stores, που είναι αρκετά σαφείς για να ειπωθούν απλά. Η σύμβαση developer της Apple επιτρέπει σε ένα app να κατεβάζει κώδικα που διερμηνεύεται, όπως JavaScript, αρκεί να μην αλλάζει τον βασικό σκοπό του app ούτε να παρακάμπτει τον έλεγχο. Οι πολιτικές του Google Play επιτρέπουν το ίδιο για κώδικα που τρέχει σε περιβάλλον JavaScript. Οι ενημερώσεις over the air είναι κανάλι επισκευής: διόρθωση ενός bug, ενός κειμένου, μιας διάταξης, αλλαγή ενός κανόνα που το app είχε ήδη. Δεν είναι τρόπος να βγάλετε ένα διαφορετικό app, να προσθέσετε λειτουργίες που θα ήθελε να δει ένας ελεγκτής, ή να ενεργοποιήσετε κάτι που ήταν κρυμμένο κατά τον έλεγχο. Μέσα σε αυτά τα όρια, οι ενημερώσεις over the air είναι συνηθισμένη και αποδεκτή πρακτική. Έξω από αυτήν βάζουν σε κίνδυνο τον λογαριασμό developer.

Μερικές πρακτικές συνήθειες κρατούν το κανάλι αξιόπιστο. Κάθε ενημέρωση έχει ένα μήνυμα που λέει τι διορθώνει, ώστε το ιστορικό να διαβάζεται στο επόμενο πρόβλημα. Οι ενημερώσεις δημοσιεύονται από τον ίδιο κώδικα από τον οποίο βγήκε το build του store, ποτέ από ένα μισοτελειωμένο branch ενός developer. Τα analytics και οι αναφορές crashes καταγράφουν το αναγνωριστικό της ενημέρωσης μαζί με την έκδοση του app. Ένα crash στην έκδοση 2.3 λέει λίγα όταν κυκλοφορούν τρεις διαφορετικές ενημερώσεις της 2.3. Και οι native εξαρτήσεις αναβαθμίζονται με πρόγραμμα, με build για το store, και όχι όποτε αποτύχει μια ενημέρωση επειδή η JavaScript προχώρησε πέρα από ό,τι υποστηρίζει το native στρώμα, χωρίς να το προσέξει κανείς.

Έτσι τρέχουμε το TRVL AIR, στο App Store και στο Google Play: ένας κώδικας React Native, οι περισσότερες διορθώσεις over the air, οι νέες δυνατότητες μέσω των stores. Μια λάθος ημερομηνία ή μια χαλασμένη οθόνη διορθώνεται σε ώρες αντί για μέρες, και ο έλεγχος του store μένει για τις αλλαγές που τον αξίζουν πραγματικά. Αυτή είναι όλη η αξία των ενημερώσεων over the air. Όχι να αποφύγετε τον έλεγχο, αλλά να μην είναι ποτέ ο έλεγχος ο λόγος που ένα απλό bug μένει στα κινητά των ανθρώπων.

Common questions

Μπορεί ένα app React Native να ενημερωθεί χωρίς έλεγχο από το App Store ή το Google Play;
Εν μέρει. Οι αλλαγές στο στρώμα JavaScript και στα αρχεία του, δηλαδή οθόνες, ροές, κείμενα και επιχειρηματικοί κανόνες, μπορούν να σταλούν ως ενημερώσεις over the air με το expo-updates του Expo. Οι αλλαγές σε native κώδικα, native βιβλιοθήκες, άδειες, ρυθμίσεις του app, εικονίδιο ή στις εκδόσεις του React Native και του Expo SDK χρειάζονται νέο build και έλεγχο από το store.
Τι είναι το runtime version στις ενημερώσεις του Expo;
Μια ετικέτα κοινή για ένα build του store και τις ενημερώσεις που φτιάχνονται γι' αυτό. Μια ενημέρωση παραδίδεται μόνο σε builds με το ίδιο runtime version. Έτσι κώδικας JavaScript γραμμένος για νεότερο native στρώμα δεν φορτώνεται σε παλαιότερο build που δεν μπορεί να τον τρέξει. Το Expo μπορεί να το ορίσει από την έκδοση του app ή από ένα αποτύπωμα του native project.
Πότε φτάνει μια ενημέρωση over the air στους χρήστες;
Στη συνηθισμένη ρύθμιση του Expo, το app ελέγχει για ενημέρωση όταν ανοίγει, την κατεβάζει στο παρασκήνιο και την εφαρμόζει την επόμενη φορά που θα ξεκινήσει. Ένα app που ανοίγει συχνά παίρνει τη διόρθωση μέσα σε ώρες. Ένα που ανοίγει σπάνια μπορεί να θέλει μέρες. Όπου μια διόρθωση είναι επείγουσα, το app μπορεί να ρυθμιστεί να ελέγχει και να ξαναφορτώνει νωρίτερα.
Επιτρέπουν η Apple και η Google τις ενημερώσεις over the air;
Ναι, με όρια. Και οι δύο επιτρέπουν στα apps να κατεβάζουν κώδικα που διερμηνεύεται, όπως JavaScript, αρκεί να μην αλλάζει τον βασικό σκοπό του app ούτε να παρακάμπτει τον έλεγχο. Οι ενημερώσεις over the air γίνονται δεκτές για διορθώσεις bugs και μικρές αλλαγές. Αν βγάλετε έτσι νέες λειτουργίες ή ένα ουσιαστικά διαφορετικό app, παραβιάζετε τους κανόνες των stores.

The service behind it

Mobile App Development

Native και cross-platform εφαρμογές για iOS και Android, με την ίδια φροντίδα στον σχεδιασμό του interface όση και στον κώδικα.

Initiate the blueprint

Tell us what you are building.

Πείτε μας με τι δουλεύετε σήμερα, πότε το χρειάζεστε και τι σας δυσκολεύει. Απαντάμε σε κάθε μήνυμα μέσα σε δύο εργάσιμες.

Honestly? You’re going to regret switching tabs.

Δύσκολα θα βρείτε κορυφαίους custom developers που να νοιάζονται πραγματικά για το πώς θα μεγαλώσει η επιχείρησή σας.

Είμαστε οι καλύτεροι σε αυτό που κάνουμε, και το δείχνει η δουλειά μας. Μη χάσετε χρόνο και χρήματα με κάτι λιγότερο.

Με πείσατε.
Ας μιλήσουμε.