Native, cross-platform, or both — how the decision is actually made

Mobile18 Σεπτεμβρίου 20268 min

Το ερώτημα συνήθως μπαίνει ως θέμα προϋπολογισμού και απαντιέται με βάση την προτίμηση. Γι' αυτό απαντιέται τόσο συχνά λάθος. Native σημαίνει χωριστός κώδικας για iOS και για Android. Cross-platform σημαίνει ένας κοινός κώδικας για τα δύο. Το cross-platform δεν είναι απλώς φθηνότερο και το native δεν είναι απλώς καλύτερο. Το σωστό ερώτημα είναι πιο συγκεκριμένο: τι πρέπει να κάνει αυτό το app που αγγίζει το λειτουργικό σύστημα, και ποιος θα το κρατά ζωντανό τα επόμενα πέντε χρόνια. Απαντήστε σε αυτά τα δύο και η αρχιτεκτονική έχει αποφασιστεί. Το κόστος ακολουθεί, όχι το ανάποδο.

Αυτό που κερδίζετε πραγματικά με έναν κοινό κώδικα δεν βρίσκεται στην κατασκευή. Βρίσκεται σε όλα όσα έρχονται μετά. Μια λειτουργία ορίζεται μία φορά αντί για δύο, σχεδιάζεται μία φορά, δοκιμάζεται μία φορά και διορθώνεται μία φορά. Τις δύο νέες εκδόσεις λειτουργικού κάθε χρόνο τις αναλαμβάνει μία ομάδα αντί για δύο. Η εξοικονόμηση στην πρώτη έκδοση είναι πραγματική αλλά μέτρια, ίσως ένα τέταρτο, γιατί ο ορισμός του προϊόντος και ο σχεδιασμός της διεπαφής δεν μειώνονται στο μισό. Η εξοικονόμηση πολλαπλασιάζεται μετά, εκεί όπου βρίσκεται έτσι κι αλλιώς το μεγαλύτερο μέρος του κόστους ενός app.

Μετά, οι τέσσερις κατηγορίες που συνηγορούν υπέρ του native κώδικα, και είναι συγκεκριμένες, όχι θέμα αίσθησης. Συνεχής δουλειά στο παρασκήνιο: συνεχής τοποθεσία, ήχος στο παρασκήνιο, μακροχρόνιο Bluetooth. Λειτουργίες βαθιά δεμένες με το λειτουργικό: widgets, app για ρολόι, CarPlay ή Android Auto, App Clips, επεκτάσεις κοινοποίησης. Απαιτητικά γραφικά ή δουλειά με την κάμερα, όπου μετράει κάθε καρέ και η άμεση πρόσβαση στο hardware. Και SDK τρίτων που υπάρχουν μόνο σε native, δηλαδή στην πράξη τράπεζες, τερματικά πληρωμών, διαχείριση συσκευών (MDM), προμηθευτές βιομετρικών και αρκετός βιομηχανικός εξοπλισμός. Αν το brief περιέχει δύο ή περισσότερα από αυτά, το cross-platform θέλει ισχυρή αιτιολόγηση.

Τα briefs των μεγάλων εταιρειών έχουν και μια πέμπτη παράμετρο που δεν έχουν τα apps για το ευρύ κοινό. Ελεγχόμενη διανομή μέσω MDM, ρυθμίσεις που στέλνονται με πολιτική, certificate pinning, πιστοποίηση συσκευής, και ενιαία σύνδεση μέσω του δικού mobile SDK ενός παρόχου ταυτότητας. Όλα αυτά γίνονται από έναν cross-platform κώδικα, και όλα είναι τεκμηριωμένα κυρίως για native. Το πρόβλημα δεν είναι ότι δεν γίνονται. Είναι ότι οι περισσότεροι τα έχουν κάνει σε native. Και όταν χαλάσει κάτι σπάνιο, θα το ψάχνετε στη γέφυρα ανάμεσα στον κοινό και στον native κώδικα, όχι στον δικό σας.

Αυτό οδηγεί στην απάντηση στην οποία καταλήγουν οι περισσότερες ικανές ομάδες και λίγες προτάσεις λένε καθαρά: και τα δύο. Μια εφαρμογή React Native, με native modules γραμμένα σε Swift και Kotlin ακριβώς εκεί όπου το απαιτούν οι τέσσερις κατηγορίες. Το μερίδιο του native κώδικα είναι συνήθως μικρό και είναι πάντα γνωστό από πριν, γιατί αντιστοιχεί σε μια λίστα λειτουργιών που γράφεται την πρώτη εβδομάδα. Αυτό δεν είναι συμβιβασμός ανάμεσα σε δύο απόψεις. Είναι η σωστή απάντηση.

Τα υπόλοιπα τα κρίνει η ομάδα που θα το συντηρεί, και σε αυτή την αγορά αυτό γέρνει σταθερά προς τη μία πλευρά. Δύο native κώδικες χρειάζονται έμπειρους μηχανικούς Swift και έμπειρους μηχανικούς Kotlin, συνεχώς, για όσο υπάρχει το app. Στην Ελλάδα αυτή η ομάδα είναι ακριβή, όταν μπορεί καν να στηθεί. Και ο κίνδυνος δεν είναι η πρόσληψη. Είναι η αποχώρηση, τρία χρόνια μετά, του μόνου ανθρώπου που καταλάβαινε το build του Android. Έναν κοινό κώδικα TypeScript μπορεί να τον συντηρεί η ομάδα που ήδη συντηρεί την πλατφόρμα web, μοιράζοντας τους τύπους, το API και τις συμβάσεις της. Για έναν οργανισμό που η βασική του δουλειά δεν είναι το λογισμικό, αυτό είναι συνήθως το καθοριστικό στοιχείο.

Η απόφαση αλλάζει αργότερα μόνο προς τη μία κατεύθυνση, και αξίζει να ξέρετε ποια. Ένα cross-platform app μπορεί να απορροφά native modules επ' αόριστον, οθόνη οθόνη, μέχρι, στην ακραία περίπτωση, να έχει αντικατασταθεί από μέσα. Δύο native κώδικες δεν μπορούν να γίνουν ένας χωρίς να ξαναγραφτούν από την αρχή. Αν ξεκινήσετε cross-platform κρατάτε λοιπόν μια επιλογή ανοιχτή, ενώ αν ξεκινήσετε native την κλείνετε. Αυτό μετράει όταν τα πλάνα του τρίτου χρόνου δεν μοιάζουν καθόλου με εκείνα που δικαιολόγησαν την αρχική επιλογή.

Η μέθοδος λοιπόν, με τη σειρά. Γράψτε κάθε λειτουργία. Σημειώστε όσες αγγίζουν το λειτουργικό σύστημα και όχι το δίκτυο. Αν η λίστα είναι μικρή, φτιάξτε cross-platform και σχεδιάστε τα native modules τώρα, αντί να τα ανακαλύψετε αργότερα. Αν είναι μεγάλη, ή αν ένα υποχρεωτικό SDK προμηθευτή υπάρχει μόνο σε native, φτιάξτε native και σταματήστε να ψάχνετε μια εξοικονόμηση που δεν υπάρχει. Μετά γράψτε την απόφαση με τους λόγους της. Σε δύο χρόνια κάποιος θα ρωτήσει γιατί, και η απάντηση πρέπει να είναι ήδη γραμμένη, όχι να την ξαναθυμάται κανείς από το μηδέν.

Common questions

Είναι κατάλληλο το React Native για ένα app μεγάλης εταιρείας;
Συνήθως ναι, με native modules όπου χρειάζονται. Οι συνηθισμένες εξαιρέσεις είναι η συνεχής δουλειά στο παρασκήνιο, όπως συνεχής τοποθεσία ή Bluetooth, οι λειτουργίες βαθιά δεμένες με το λειτουργικό, όπως widgets ή app για ρολόι, τα απαιτητικά γραφικά και η κάμερα, και τα υποχρεωτικά SDK προμηθευτών που υπάρχουν μόνο σε native, κάτι συχνό σε τράπεζες, τερματικά πληρωμών και διαχείριση συσκευών.
Πόσο φθηνότερο είναι το cross-platform από δύο native apps;
Στην πρώτη έκδοση, περίπου ένα τέταρτο, γιατί ο ορισμός του προϊόντος, ο σχεδιασμός της διεπαφής και η δουλειά στο backend δεν μειώνονται στο μισό. Η μεγαλύτερη εξοικονόμηση είναι στη συντήρηση. Με έναν κοινό κώδικα, οι δύο νέες εκδόσεις λειτουργικού κάθε χρόνο, κάθε αλλαγή πολιτικής και κάθε διόρθωση γίνονται μία φορά αντί για δύο. Εκεί βρίσκεται το μεγαλύτερο μέρος του κόστους ενός app σε όλη του τη ζωή.
Μπορεί ένα cross-platform app να γίνει native αργότερα;
Κομμάτι κομμάτι, ναι. Native modules μπορούν να αντικαθιστούν μεμονωμένες οθόνες ή δυνατότητες επ' αόριστον. Το αντίστροφο δεν ισχύει: δύο χωριστοί native κώδικες δεν ενώνονται σε έναν χωρίς ξαναγράψιμο. Αν ξεκινήσετε cross-platform κρατάτε ανοιχτή μια επιλογή που το native την κλείνει.
Τι κρίνει την επιλογή στην πράξη;
Δύο πράγματα. Η λίστα των λειτουργιών που αγγίζουν το λειτουργικό σύστημα και όχι το δίκτυο, και ποιος θα συντηρεί το app για πέντε χρόνια. Μικρή λίστα και μια ομάδα που ήδη δουλεύει σε TypeScript δείχνουν cross-platform με native modules. Μεγάλη λίστα, ή ένα υποχρεωτικό SDK μόνο σε native, δείχνουν native.

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 που να νοιάζονται πραγματικά για το πώς θα μεγαλώσει η επιχείρησή σας.

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

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