Το App Thinning είναι μια τεχνολογία της Apple που μειώνει το μέγεθος της εγκατεστημένης εφαρμογής παραδίδοντας μόνο εκείνους τους πόρους που είναι απαραίτητοι για τη συγκεκριμένη συσκευή του χρήστη. Σύμφωνα με το Apple Developer Documentation, 2026, το App Thinning περιλαμβάνει τρεις μηχανισμούς: Slicing, Bitcode και On-Demand Resources. Ας εξετάσουμε κάθε συστατικό και την επίδρασή του στο μέγεθος διανομής.
Βασικά σημεία
App Thinning είναι μια ολοκληρωμένη τεχνολογία βελτιστοποίησης διανομής εφαρμογών iOS που εισήχθη από την Apple μαζί με το iOS 9 (Σεπτέμβριος 2015). Στόχος του App Thinning είναι η ελαχιστοποίηση του μεγέθους της εφαρμογής που ο χρήστης κατεβάζει στη συσκευή του, χωρίς αλλαγή του πηγαίου κώδικα και της λειτουργικότητας. Η τεχνολογία λειτουργεί σε τρία επίπεδα: στο στάδιο κατασκευής (μεταγλώττιση), στην πλευρά του App Store (παράδοση) και στη συσκευή (διαχείριση πόρων).
Πριν από την εμφάνιση του App Thinning, οι προγραμματιστές συμπεριλάμβαναν πόρους για όλες τις πιθανές συσκευές στο δυαδικό αρχείο — εικόνες @2x και @3x, 32-bit και 64-bit κώδικα, Metal shaders για διαφορετικές GPU. Αυτό οδηγούσε σε διόγκωση του μεγέθους της εφαρμογής: ο χρήστης ενός iPhone 6 Plus με οθόνη Retina HD λάμβανε διανυσματικούς πόρους για iPad Pro που δεν χρησιμοποιήθηκαν ποτέ. Η Apple έλυσε αυτό το πρόβλημα μεταφέροντας μέρος της εργασίας κατασκευής στους διακομιστές του App Store.
Σύμφωνα με έρευνα της Apple (WWDC 2015, Συνεδρία 412), μια τυπική εφαρμογή με υποστήριξη πολλαπλών αρχιτεκτονικών και αναλύσεων μπορεί να μειωθεί κατά 30-50% μετά την εφαρμογή του App Thinning. Για παιχνίδια με μεγάλο αριθμό λεπτομερών υφών, η εξοικονόμηση μπορεί να φτάσει το 70-80%. Η Apple συνεχίζει να βελτιώνει την τεχνολογία: στο iOS 17 προστέθηκε βελτιστοποίηση για ARM64e και βελτιώθηκε η εργασία με το On-Demand Resources για εφαρμογές που χρησιμοποιούν Swift Package Manager.
Το μέγεθος των εφαρμογών για κινητά αυξάνεται συνεχώς. Σύμφωνα με δεδομένα της Sensor Tower (2025), το μέσο μέγεθος μιας εφαρμογής iOS έχει αυξηθεί κατά 45% τα τελευταία 5 χρόνια. Για χρήστες με περιορισμένο πρόγραμμα δεδομένων ή αργό internet, κάθε megabyte έχει σημασία. Το App Thinning λύνει αυτό το πρόβλημα χωρίς τη συμμετοχή του προγραμματιστή — αρκεί να ενεργοποιήσετε την υποστήριξη στις ρυθμίσεις του έργου και να ανεβάσετε το build στο App Store Connect.
Η διαδικασία του App Thinning ξεκινά μετά τη μεταφόρτωση του αρχείου της εφαρμογής στο App Store Connect. Το App Store αναλύει το δυαδικό αρχείο και το διαχωρίζει σε τμήματα βάσει αρχιτεκτονικών (armv7, arm64, arm64e), αναλύσεων οθόνης (iPhone, iPad) και εκδόσεων iOS. Για κάθε συνδυασμό δημιουργείται μια ξεχωριστή παραλλαγή. Όταν ο χρήστης κάνει κλικ στο “Λήψη”, το App Store καθορίζει το μοντέλο συσκευής, την έκδοση iOS και τον τύπο σύνδεσης (Wi-Fi / δίκτυο κινητής) και στέλνει μόνο την αντίστοιχη παραλλαγή.
Για τον χρήστη, η διαδικασία είναι διαφανής — δεν υπάρχει επιλογή “ελαφριάς έκδοσης” ή διάλογος με ρυθμίσεις. Το App Store επιλέγει αυτόματα την καταλληλότερη παραλλαγή βάσει μεταδεδομένων συσκευής που αποστέλλονται στον διακομιστή κατά το αίτημα λήψης. Εάν η συσκευή χρησιμοποιεί Wi-Fi, το App Store μπορεί να στείλει μια παραλλαγή με πόρους υψηλότερης ποιότητας (π.χ., βίντεο ProRes για iPhone 16 Pro). Κατά τη λήψη μέσω δικτύου κινητής, χρησιμοποιείται το ελάχιστο δυνατό σύνολο.
Το δεύτερο επίπεδο βελτιστοποίησης — Bitcode. Με ενεργοποιημένη την επιλογή ENABLE_BITCODE, το Xcode μεταγλωττίζει την εφαρμογή όχι σε κώδικα μηχανής, αλλά σε ενδιάμεση αναπαράσταση LLVM. Το App Store μεταγλωττίζει εκ νέου το Bitcode για τη συγκεκριμένη αρχιτεκτονική επεξεργαστή του χρήστη, επιτρέποντας στην Apple να εφαρμόζει βελτιστοποιήσεις μεταγλωττιστή για νέες γενιές τσιπ (A17, M4) χωρίς ενημέρωση της εφαρμογής από τον προγραμματιστή. Το Bitcode είναι υποχρεωτικό για watchOS και tvOS, αλλά προαιρετικό για iOS.
Το App Thinning αποτελείται από τρεις ανεξάρτητους μηχανισμούς, καθένας από τους οποίους είναι υπεύθυνος για τη δική του πτυχή βελτιστοποίησης. Slicing (τεμαχισμός) διαχωρίζει το δυαδικό αρχείο σε παραλλαγές βάσει αρχιτεκτονικής και ανάλυσης οθόνης. Ο προγραμματιστής διαμορφώνει το Slicing μέσω του Asset Catalogs — το Xcode συμπεριλαμβάνει αυτόματα στο τεμάχιο μόνο εκείνους τους πόρους που αντιστοιχούν στη συσκευή-στόχο. Για παράδειγμα, το iPhone SE (τρίτης γενιάς) θα λάβει μόνο εικόνες @2x και κώδικα arm64, ενώ το iPad Pro M4 — εικόνες @3x και κώδικα arm64e.
Το Bitcode είναι LLVM IR (Intermediate Representation) — μια ανεξάρτητη από μηχανή αναπαράσταση του προγράμματος. Με την ενεργοποίηση του Bitcode, το Xcode δεν παράγει τελικό κώδικα μηχανής, αλλά αποθηκεύει την ενδιάμεση αναπαράσταση. Το App Store Connect κατά τη μεταφόρτωση του build λαμβάνει το Bitcode και το μεταγλωττίζει εκ νέου για τις αρχιτεκτονικές όλων των υποστηριζόμενων συσκευών. Το Bitcode επιτρέπει στην Apple να εφαρμόζει βελτιστοποιήσεις που δεν είναι διαθέσιμες στο στάδιο μεταγλώττισης από τον προγραμματιστή — για παράδειγμα, χρήση νέων εντολών επεξεργαστή (SME, SVE) σε τσιπ M4.
On-Demand Resources (ODR) — ο τρίτος μηχανισμός, που επιτρέπει την εκφόρτωση πόρων εφαρμογής μετά τη χρήση. Ο προγραμματιστής επισημαίνει πόρους (επίπεδα παιχνιδιού, εικόνες onboarding, βίντεο) με ετικέτες ODR. Το iOS φορτώνει τους επισημασμένους πόρους κατ' απαίτηση στο παρασκήνιο και τους εκφορτώνει σε περίπτωση έλλειψης μνήμης ή μετά τη χρήση. Το ODR είναι ιδιαίτερα αποτελεσματικό για παιχνίδια με πολύ περιεχόμενο — τα πρώτα επίπεδα μπορούν να παραδοθούν εντός της εφαρμογής και τα υπόλοιπα να φορτωθούν καθώς ο παίκτης προχωρά.
Η επιλογή μηχανισμών App Thinning εξαρτάται από τον τύπο εφαρμογής και το κοινό-στόχο. Το Slicing συνιστάται να είναι πάντα ενεργό — δεν απαιτεί πρόσθετες ενέργειες του προγραμματιστή πέρα από τη σωστή οργάνωση του Asset Catalogs και παρέχει σταθερή μείωση μεγέθους 20-30%. Το Bitcode αξίζει να ενεργοποιηθεί εάν η εφαρμογή χρησιμοποιεί προσαρμοσμένους Metal shaders ή σχεδιάζει να υποστηρίξει νέες αρχιτεκτονικές της Apple χωρίς εκ νέου μεταγλώττιση. Το ODR δικαιολογείται για εφαρμογές με μεγάλο όγκο περιεχομένου — παιχνίδια, επεξεργαστές φωτογραφιών, εφαρμογές ροής.
Για μια τυπική επιχειρηματική εφαρμογή (ροές δεδομένων, φόρμες, REST API), αρκούν το Slicing και η ελάχιστη διαμόρφωση ODR για εικόνες onboarding. Τα παιχνίδια με 3D γραφικά επωφελούνται και από τους τρεις μηχανισμούς: το Slicing αφαιρεί περιττούς shaders, το Bitcode βελτιστοποιεί την απόδοση για GPU και το ODR εκφορτώνει τα ολοκληρωμένα επίπεδα. Σύμφωνα με την Apple (WWDC 2024), ο συνδυασμός και των τριών μηχανισμών μειώνει το αρχικό μέγεθος εγκατάστασης κατά μέσο όρο 45-55% σε σύγκριση με το καθολικό δυαδικό αρχείο.
| Μηχανισμός | Τι κάνει | Πού λειτουργεί | Απαιτεί ενέργειες προγραμματιστή |
|---|---|---|---|
| Slicing | Αφαιρεί πόρους για άλλες συσκευές | App Store + συσκευή | Asset Catalogs |
| Bitcode | Εκ νέου μεταγλώττιση για αρχιτεκτονική | App Store | ENABLE_BITCODE=YES |
| ODR | Φόρτωση πόρων κατ' απαίτηση | Συσκευή | Ετικέτες ODR στο έργο |
Για να ενεργοποιήσετε το App Thinning σε ένα έργο Xcode, πρέπει να εκτελέσετε μερικά βήματα. Το Slicing διαμορφώνεται μέσω του App Thinning στις ρυθμίσεις build: Build Settings → App Thinning. Διατίθενται τρεις τιμές: None (χωρίς βελτιστοποίηση), Automatic (προεπιλεγμένη αυτόματη διαμόρφωση) και Manual με επιλογή συγκεκριμένων παραλλαγών για δοκιμή. Η Apple συνιστά το Automatic για τα περισσότερα έργα.
Για το Asset Catalogs, η σωστή οργάνωση πόρων είναι σημαντική: οι εικόνες τοποθετούνται σε έναν καθολικό κατάλογο με καθορισμό πλάτους/ύψους και το Xcode δημιουργεί αυτόματα τις παραλλαγές @1x, @2x και @3x. Το Xcode κατά την κατασκευή συμπεριλαμβάνει μόνο τις αναλύσεις που χρησιμοποιούνται στο έργο. Οι Metal shaders μεταγλωττίζονται ξεχωριστά για κάθε οικογένεια GPU — Apple GPU, PowerVR, Mali, που επίσης διαχειρίζεται μέσω του Asset Catalogs.
Το Bitcode ενεργοποιείται με τη σημαία ENABLE_BITCODE = YES στο Build Settings. Για iOS, αυτή η σημαία είναι προαιρετική (απενεργοποιημένη από προεπιλογή από το Xcode 14), αλλά για watchOS και tvOS είναι υποχρεωτική. Κατά την ενεργοποίηση του Bitcode σε ένα έργο που χρησιμοποιεί βιβλιοθήκες τρίτων, όλες πρέπει επίσης να έχουν κατασκευαστεί με Bitcode, διαφορετικά η κατασκευή θα αποτύχει με σφάλμα. Το Bitcode αυξάνει τον χρόνο μεταγλώττισης κατά 20-30%, αλλά παρέχει πλήρη συμβατότητα με μελλοντικές αρχιτεκτονικές.
Μετά τη μεταφόρτωση στο App Store Connect, μπορείτε να ελέγξετε τα μεγέθη των τεμαχίων στην ενότητα Activity → Build Metric. Το App Store Connect εμφανίζει το Εκτιμώμενο Μέγεθος App Store για διαφορετικές συσκευές. Για τοπικό έλεγχο, το Xcode παρέχει την εντολή xcodebuild με τη σημαία -exportArchive και την επιλογή thinning για δημιουργία τεμαχίων στην τοπική μηχανή. Το αποτέλεσμα του Slicing μπορεί να δει κανείς στο Organizer (Window → Organizer) μετά την αρχειοθέτηση — η καρτέλα App Thinning Profiles δείχνει τα μεγέθη για διαφορετικές συσκευές.
# Τοπικός έλεγχος Slicing
xcodebuild -exportArchive \
-archivePath "App.xcarchive" \
-exportPath "export/" \
-exportOptionsPlist "export.plist" \
-thinning "<thin-for-all-variants>"
Το Xcodebuild με τη σημαία -thinning δημιουργεί αρχεία .app για κάθε συνδυασμό αρχιτεκτονικής, bit και GPU. Η παράμετρος <thin-for-all-variants> δημιουργεί όλες τις πιθανές παραλλαγές — χρήσιμο για έλεγχο. Για αγωγούς CI, χρησιμοποιείται ένας συγκεκριμένος συνδυασμός, π.χ. iPhone14,4 (iPhone SE 3). Τα προκύπτοντα αρχεία .app μπορούν να αναλυθούν με το βοηθητικό πρόγραμμα app-size.
Το κύριο πλεονέκτημα του App Thinning είναι η μείωση του μεγέθους λήψης για τον τελικό χρήστη. Σύμφωνα με την Apple (WWDC 2024), μια τυπική εφαρμογή που χρησιμοποιεί και τους τρεις μηχανισμούς App Thinning κατεβαίνει κατά μέσο όρο 40% γρηγορότερα μέσω δικτύου κινητής και καταλαμβάνει 35% λιγότερο χώρο στον δίσκο. Αυτό επηρεάζει άμεσα τη μετατροπή εγκατάστασης: σύμφωνα με τη Sensor Tower, κάθε 10 MB μεγέθους εφαρμογής μειώνει τη μετατροπή κατά 1%.
Το δεύτερο πλεονέκτημα — βελτιστοποίηση για μελλοντικές συσκευές χάρη στο Bitcode. Η Apple μπορεί να μεταγλωττίσει εκ νέου εφαρμογές Bitcode για νέες αρχιτεκτονικές χωρίς τη συμμετοχή του προγραμματιστή. Για παράδειγμα, κατά τη μετάβαση από Intel σε Apple Silicon (M1), οι εφαρμογές Bitcode λειτουργούσαν σε macOS μέσω Rosetta 2 χωρίς πρόσθετη μεταγλώττιση. Οι προγραμματιστές που δεν ενεργοποίησαν το Bitcode αναγκάστηκαν να ξαναφτιάξουν τις εφαρμογές τους για arm64.
Το τρίτο πλεονέκτημα — το ODR (On-Demand Resources) μειώνει το φορτίο στον αποθηκευτικό χώρο της συσκευής. Παιχνίδια με δεκάδες επίπεδα, όπως το Asphalt 8: Airborne, χρησιμοποιούν ODR για φόρτωση νέων πιστών καθώς ο παίκτης προχωρά. Ο προγραμματιστής μπορεί να ορίσει Initial Install Tags για πόρους που φορτώνονται μαζί με την εφαρμογή και Prefetch Tags για περιεχόμενο που φορτώνεται στο παρασκήνιο μετά την εγκατάσταση. Η Apple ελέγχει τα όρια ODR: έως 512 MB ανά αίτημα και έως 20 GB συνολικής προσωρινής μνήμης στη συσκευή.
Το App Thinning έχει αρκετούς σημαντικούς περιορισμούς που πρέπει να ληφθούν υπόψη κατά τον σχεδιασμό της εφαρμογής. Πρώτον, το Slicing δεν εφαρμόζεται σε εφαρμογές που διανέμονται μέσω Enterprise (in-house) ή Ad Hoc — αυτά τα builds περιέχουν όλες τις παραλλαγές και δεν περνούν από το App Store. Για δοκιμή του Slicing, ο προγραμματιστής μπορεί να χρησιμοποιήσει το TestFlight, το οποίο επεξεργάζεται επίσης το Slicing από την πλευρά των διακομιστών της Apple.
Δεύτερον, το Bitcode αυξάνει τον χρόνο κατασκευής και το μέγεθος του αρχείου .xcarchive κατά περίπου 30-50%. Δεν υποστηρίζουν όλες οι βιβλιοθήκες τρίτων το Bitcode — εάν τουλάχιστον μία εξάρτηση έχει κατασκευαστεί χωρίς Bitcode, η κατασκευή του έργου με ENABLE_BITCODE θα αποτύχει. Η Apple συνιστά τον έλεγχο συμβατότητας των βιβλιοθηκών πριν από την ενεργοποίηση του Bitcode. Επιπλέον, το Bitcode δεν υποστηρίζει πλήρως το Swift Package Manager — ορισμένα πακέτα Swift μπορεί να σπάσουν την κατασκευή Bitcode.
Τρίτον, το On-Demand Resources δεν εγγυάται την άμεση διαθεσιμότητα περιεχομένου — η φόρτωση ODR γίνεται στο παρασκήνιο και μπορεί να καθυστερήσει εάν η συσκευή βρίσκεται σε λειτουργία χαμηλής μπαταρίας ή ασθενούς σήματος δικτύου. Ο προγραμματιστής πρέπει να υλοποιήσει τον χειρισμό καταστάσεων φόρτωσης ODR μέσω του NSBundleResourceRequest και να εμφανίσει στον χρήστη έναν δείκτη προόδου. Η αποτυχία φόρτωσης ODR δεν πρέπει να μπλοκάρει τη λειτουργικότητα της εφαρμογής — απαιτείται graceful fallback.
Συχνές ερωτήσεις
Όχι, το App Thinning δεν είναι υποχρεωτικό. Η εφαρμογή χωρίς App Thinning θα φορτωθεί στο App Store ως ένα ενιαίο καθολικό δυαδικό αρχείο που περιέχει όλες τις παραλλαγές πόρων. Ωστόσο, η Apple συνιστά ιδιαίτερα την ενεργοποίηση του App Thinning, καθώς βελτιώνει την εμπειρία χρήστη και μειώνει το φορτίο στους διακομιστές του App Store.
Το Xcode Organizer εμφανίζει το Εκτιμώμενο Μέγεθος App Store για διαφορετικές συσκευές μετά την αρχειοθέτηση. Το App Store Connect στην ενότητα Activity εμφανίζει τα ακριβή μεγέθη τεμαχίων μετά τη μεταφόρτωση του build. Για τοπικό έλεγχο, χρησιμοποιήστε το xcodebuild με τη σημαία -thinning.
Ναι, το App Thinning είναι πλήρως συμβατό με το SwiftUI. Το Slicing λειτουργεί με το Asset Catalogs, το οποίο χρησιμοποιείται από το SwiftUI μέσω των Image και Color. Το Bitcode υποστηρίζει έργα SwiftUI υπό την προϋπόθεση ότι όλες οι εξαρτήσεις έχουν επίσης κατασκευαστεί με Bitcode. Το ODR διαχειρίζεται μέσω του NSBundleResourceRequest ανεξάρτητα από το πλαίσιο.
Το Slicing δεν επηρεάζει τον χρόνο εκκίνησης — οι αφαιρεθέντες πόροι δεν φορτώνονται. Το Bitcode μπορεί να αυξήσει ελαφρώς τον χρόνο εκκίνησης κατά την πρώτη εκτέλεση λόγω μεταγλώττισης JIT. Το ODR μπορεί να αυξήσει τον χρόνο εκκίνησης εάν οι πόροι με ετικέτα Initial Install Tags δεν έχουν ακόμη φορτωθεί. Η Apple συνιστά την επισήμανση μόνο κρίσιμων πόρων ως Initial Install.
Εάν το έργο απαιτεί Bitcode αλλά η βιβλιοθήκη δεν το υποστηρίζει — δύο επιλογές: αφαιρέστε τη βιβλιοθήκη από το έργο και βρείτε μια εναλλακτική συμβατή με Bitcode ή απενεργοποιήστε το Bitcode για ένα συγκεκριμένο target μέσω ENABLE_BITCODE στο Build Settings. Η Apple επιτρέπει την απενεργοποίηση του Bitcode για iOS, αλλά τα watchOS και tvOS απαιτούν υποχρεωτική υποστήριξη.
Περίληψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης