Slicing — είναι ένας μηχανισμός του App Thinning κατά τον οποίο το App Store δημιουργεί αυτόματα πολλές παραλλαγές του δυαδικού αρχείου, κάθε μία περιέχει πόρους μόνο για ένα συγκεκριμένο μοντέλο συσκευής. Σύμφωνα με το Apple Developer Documentation, 2026, το Slicing εξαιρεί από τη διανομή πόρους για μη υποστηριζόμενες διαμορφώσεις, μειώνοντας το μέγεθος εγκατάστασης. Ας εξετάσουμε την αρχή λειτουργίας, τις παραλλαγές κοπής και τον έλεγχο αποτελεσμάτων.
Κύρια σημεία
Slicing — είναι το στοιχείο του App Thinning που είναι υπεύθυνο για τη δημιουργία παραλλαγών (τεμαχίων) του δυαδικού αρχείου της εφαρμογής στην πλευρά του App Store. Όταν ο προγραμματιστής ανεβάζει ένα καθολικό δυαδικό αρχείο (fat binary) που περιέχει κώδικα και πόρους για όλες τις υποστηριζόμενες διαμορφώσεις, το App Store το αναλύει και δημιουργεί πολλά τεμάχια: ξεχωριστά για iPhone με επεξεργαστή A17, ξεχωριστά για iPad με M4, ξεχωριστά για Apple Watch. Κάθε τεμάχιο περιέχει μόνο εκείνα τα τμήματα κώδικα και πόρους που είναι απαραίτητα για αυτόν τον συνδυασμό αρχιτεκτονικής και ανάλυσης.
Πριν από το iOS 9, οι προγραμματιστές δημιουργούσαν χειροκίνητα ξεχωριστά δυαδικά αρχεία για διαφορετικές συσκευές ή παρείχαν ένα καθολικό fat binary που περιείχε τα πάντα ταυτόχρονα. Slicing αυτοματοποίησε πλήρως αυτή τη διαδικασία: ο προγραμματιστής προετοιμάζει ένα έργο στο Xcode, ανεβάζει ένα αρχείο στο App Store Connect και το Slicing στην πλευρά του διακομιστή δημιουργεί τον βέλτιστο αριθμό παραλλαγών. Ο χρήστης δεν βλέπει ποτέ τη διαδικασία κοπής — λαμβάνει ένα έτοιμο .app βελτιστοποιημένο για τη συσκευή του.
Το Slicing εφαρμόζεται όχι μόνο σε κώδικα και εικόνες, αλλά και σε shader Metal. Η Apple GPU χρησιμοποιεί το δικό της σύνολο εντολών (Metal Shading Language) που διαφέρει από τις εντολές PowerVR ή ARM Mali. Το Slicing περιλαμβάνει στο τεμάχιο μόνο shader για την οικογένεια GPU της συσκευής-στόχου. Αυτό είναι ιδιαίτερα σημαντικό για παιχνίδια με προσαρμοσμένα shader — για παράδειγμα, εφέ μετα-επεξεργασίας υψηλής λεπτομέρειας μεταγλωττίζονται μόνο για συσκευές με ισχυρή GPU (iPad Pro M4, iPhone 16 Pro Max).
Ο μεταγλωττιστής Xcode δημιουργεί ένα fat binary με πολλές αρχιτεκτονικές (armv7, arm64, arm64e), αλλά δεν αφαιρεί πόρους — όλες οι εικόνες για όλες τις αναλύσεις παραμένουν μέσα στο .app. Slicing πηγαίνει παραπέρα: αναλύει τα Asset Catalogs, τα shader Metal και τις βιβλιοθήκες Swift, αφαιρώντας από κάθε τεμάχιο ό,τι δεν χρειάζεται για έναν συγκεκριμένο σκοπό. Για παράδειγμα, από το τεμάχιο για iPhone SE δεν μπαίνουν γραφικά @3x, και από το τεμάχιο για iPad Air — ελεγκτές ειδικοί για iPhone (αν είναι ξεχωρισμένοι σε ξεχωριστούς πόρους).
Η διαδικασία Slicing ξεκινά μετά τη μεταφόρτωση του build στο App Store Connect και αποτελείται από τρία στάδια: ανάλυση, κοπή και συσκευασία. Στο στάδιο της ανάλυσης, ο διακομιστής App Store αναλύει το δυαδικό αρχείο, εξάγει πληροφορίες σχετικά με τις υποστηριζόμενες αρχιτεκτονικές, συσκευές, αναλύσεις οθόνης και εκδόσεις iOS. Το App Store χρησιμοποιεί την αντιστοίχιση όλων των εμπορικών μοντέλων Apple με τις τεχνικές προδιαγραφές τους — η βάση δεδομένων συσκευών (Device Database) ενημερώνεται με κάθε έκδοση iOS.
Στο στάδιο της κοπής, ο διακομιστής δημιουργεί ξεχωριστά αντίγραφα του δυαδικού αρχείου για κάθε μοναδικό συνδυασμό. Για αυτό, το App Store εξάγει από τα Asset Catalogs εικόνες με συγκεκριμένες ετικέτες (idiom, subtype, scale), επιλέγει μόνο εκείνες που αντιστοιχούν στη συσκευή-στόχο και συναρμολογεί ένα νέο πακέτο πόρων. Η τυποποιημένη βιβλιοθήκη Swift επίσης υπόκειται σε κοπή — από αυτήν αφαιρούνται σύμβολα και μέθοδοι που δεν χρησιμοποιούνται από τη συγκεκριμένη εφαρμογή (dead code stripping).
Στο στάδιο της συσκευασίας, κάθε τεμάχιο τοποθετείται σε ξεχωριστό πακέτο διανομής και συνδέεται με μεταδεδομένα — λίστα μοντέλων συσκευών για τα οποία προορίζεται αυτό το τεμάχιο. App Store κατά τη λήψη της εφαρμογής από τον χρήστη επιλέγει το κατάλληλο τεμάχιο με βάση το μοντέλο συσκευής, την έκδοση iOS και τον τύπο σύνδεσης. Εάν δεν υπάρχει ακριβής αντιστοιχία, ο διακομιστής χρησιμοποιεί το πλησιέστερο τεμάχιο ως προς τις προδιαγραφές. Η Apple αποθηκεύει όλες τις παραλλαγές στο δίκτυο CDN CloudKit για γρήγορη παράδοση παγκοσμίως.
Slicing — είναι ένας από τους τρεις μηχανισμούς του App Thinning, αλλά συνεισφέρει τα μέγιστα στη μείωση του μεγέθους λήψης. Bitcode είναι υπεύθυνο για τη βελτιστοποίηση κώδικα μηχανής, On-Demand Resources — για τη διαχείριση πόρων στη συσκευή, και Slicing — για την αφαίρεση πλεονάζοντων πόρων στο στάδιο διανομής. Χωρίς Slicing, οι πρώτοι δύο μηχανισμοί λειτουργούν, αλλά οι χρήστες λαμβάνουν πόρους για όλες τις συσκευές, γεγονός που αυξάνει το μέγεθος κατά 20-40% ανάλογα με τον αριθμό των Asset Catalogs.
Η διαφορά μεταξύ Slicing και Bitcode είναι στο σημείο εφαρμογής: το Slicing λειτουργεί σε επίπεδο πόρων (εικόνες, shader, αρχεία NIB), το Bitcode — σε επίπεδο κώδικα μηχανής. Το Slicing χωρίζει τον κώδικα κατά αρχιτεκτονικές (arm64 vs arm64e), το Bitcode επιτρέπει στην Apple να μεταγλωττίσει ξανά τον κώδικα για νέες αρχιτεκτονικές. Bitcode + Slicing μαζί δίνουν μέγιστη βελτιστοποίηση: το Bitcode παράγει κώδικα για συγκεκριμένη αρχιτεκτονική και το Slicing αφαιρεί τους περιττούς πόρους για αυτήν την αρχιτεκτονική.
Σχέση με το On-Demand Resources — το Slicing και το ODR δεν αλληλοεπικαλύπτονται. Το Slicing αποφασίζει ποιοι πόροι θα εισέλθουν στη διανομή στη συσκευή και το ODR διαχειρίζεται πότε αυτοί οι πόροι θα φορτωθούν και θα εκφορτωθούν. Ο προγραμματιστής μπορεί να επισημάνει έναν πόρο με ετικέτα ODR και το Slicing θα τον συμπεριλάβει στο τεμάχιο εάν αντιστοιχεί στη συσκευή. Apple συνιστά τη χρήση και των τριών μηχανισμών ταυτόχρονα για ελάχιστο μέγεθος εγκατάστασης.
| Μηχανισμός | Αντικείμενο βελτιστοποίησης | Πότε εφαρμόζεται | Επίδραση στο μέγεθος |
|---|---|---|---|
| Slicing | Πόροι (εικόνες, shader) | Στην πλευρά App Store | Αφαιρεί ~30% πλεονάζοντες πόρους |
| Bitcode | Κώδικας μηχανής | Κατά τη λήψη από τον χρήστη | Βελτιστοποίηση κώδικα για αρχιτεκτονική |
| ODR | Πόροι στη συσκευή | Μετά την εγκατάσταση | Μειώνει το αρχικό μέγεθος κατά 40-60% |
Το Slicing δημιουργεί ξεχωριστά τεμάχια βάσει πολλών διαστάσεων: αρχιτεκτονική επεξεργαστή, μέγεθος οθόνης (ανάλυση), έκδοση iOS και οικογένεια GPU (για Metal). Αρχιτεκτονική καθορίζει το σύνολο εντολών CPU: arm64 — βασικό 64-bit σύνολο (iPhone 5s — iPhone X), arm64e — εκτεταμένο σύνολο με υποστήριξη για Pointer Authentication και PAC (iPhone XS και νεότερα, iPad Pro με A12X+). Το τεμάχιο για arm64e περιλαμβάνει κώδικα με εντολές προστασίας μνήμης που δεν είναι διαθέσιμες σε συσκευές arm64.
Ανάλυση οθόνης — η δεύτερη βασική διάσταση του Slicing. Η Apple χρησιμοποιεί κλίμακες @1x (iPhone 3GS), @2x (iPhone 4 — iPhone SE 3), @3x (iPhone 6 Plus και νεότερα) και ειδικές για iPad (2x και 3x με πρόσθετες μετρήσεις). Το Slicing περιλαμβάνει στο τεμάχιο μόνο εικόνες με κλίμακα που αντιστοιχεί στη συσκευή-στόχο. Με τη σωστή οργάνωση των Asset Catalogs στο Xcode, αυτό εξαλείφει την ανάγκη χειροκίνητης διαχείρισης συνόλων πόρων — αρκεί να προσθέσετε την εικόνα στον κατάλογο, υποδεικνύοντας τους υποστηριζόμενους τύπους συσκευών.
Οικογένεια GPU — η τρίτη διάσταση, κρίσιμη για εφαρμογές Metal. Η Apple χρησιμοποιεί ταξινόμηση GPU κατά γενιές: Apple GPU family 1 (A7), family 2 (A8), ... family 8 (M4). Τα shader Metal μεταγλωττίζονται για κάθε οικογένεια ξεχωριστά, καθώς το σύνολο εντολών Metal Shading Language επεκτείνεται με κάθε γενιά GPU. Το Slicing περιλαμβάνει στο τεμάχιο μόνο shader για την οικογένεια GPU της συσκευής-στόχου, μειώνοντας σημαντικά το μέγεθος παιχνιδιών και εφαρμογών που χρησιμοποιούν Metal για απόδοση.
Αρχιτεκτονική CPU επηρεάζει άμεσα το μέγεθος τεμαχίου: ο κώδικας arm64e περιέχει πρόσθετες εντολές Pointer Authentication (PAC) και Signed Return Address που αυξάνουν το δυαδικό αρχείο κατά 5-10% σε σύγκριση με arm64. Ωστόσο, αυτή η αύξηση αντισταθμίζεται από το γεγονός ότι το Slicing περιλαμβάνει κώδικα arm64e μόνο σε τεμάχια για συσκευές με επεξεργαστές A12+. Για iPhone SE (τρίτης γενιάς) με A15 Bionic, το Slicing δημιουργεί ένα ξεχωριστό τεμάχιο βελτιστοποιημένο για τις δυνατότητες αυτού του τσιπ.
Η διαμόρφωση του Slicing στο Xcode είναι ελάχιστη — η κύρια διαμόρφωση γίνεται μέσω Asset Catalogs και Build Settings. Asset Catalog πρέπει να περιέχει πόρους οργανωμένους ανά τύπο συσκευής (Any, iPhone, iPad, Apple Watch, Apple TV) με σωστή ένδειξη κλίμακας και λειτουργίας εμφάνισης. Το Xcode συμπεριλαμβάνει αυτόματα στη μεταγλώττιση μόνο εκείνους τους πόρους που αντιστοιχούν στις συσκευές-στόχους που καθορίζονται στις ρυθμίσεις Deployment Target.
Η βασική ρύθμιση Slicing στο Xcode — Build Setting App Thinning. Διαθέσιμες τιμές:
Targeted Device Families στο General → Deployment Info καθορίζει για ποιους τύπους συσκευών μεταγλωττίζεται η εφαρμογή (iPhone / iPad / Universal). Το Slicing βασίζεται σε αυτήν την παράμετρο κατά την κοπή — εάν η εφαρμογή υποστηρίζει μόνο iPhone, το τεμάχιο για iPad δεν δημιουργείται. Deployment Target (ελάχιστη έκδοση iOS) επηρεάζει επίσης το Slicing: για παλιές εκδόσεις iOS μπορεί να απαιτούνται τεμάχια armv7 που δεν χρειάζονται για iOS 13+. Η Apple συνιστά να ορίζετε το Deployment Target στην τελευταία σταθερή έκδοση iOS — αυτό μειώνει τον αριθμό τεμαχίων και το μέγεθος του δυαδικού αρχείου.
Για μέγιστη αποδοτικότητα Slicing, τα Asset Catalogs πρέπει να χρησιμοποιούν συγκεκριμένες ετικέτες για κάθε πόρο. Xcode παρέχει στο Attributes Inspector για εικόνες: Width Class (Any, Compact, Regular), Height Class (Any, Compact, Regular), Gamut (sRGB, Display P3), Memory (Any, Low, High), Graphics (Any, Low, High). Συνδυάζοντας αυτές τις ετικέτες, ο προγραμματιστής ελέγχει σε ποια τεμάχια θα εισέλθει κάθε εικόνα. Για παράδειγμα, μια εικόνα για iPad με ετικέτα Regular Width + Regular Height θα μπει μόνο σε τεμάχια για iPad σε οριζόντιο προσανατολισμό.
# Εξαγωγή τεμαχίου για συγκεκριμένη συσκευή
xcodebuild -exportArchive \
-archivePath "App.xcarchive" \
-exportPath "sliced/" \
-exportOptionsPlist "export.plist" \
-thinning "iPhone17,2" # iPhone 16 Pro Max
Xcodebuild με παράμετρο -thinning και αναγνωριστικό μοντέλου δημιουργεί τεμάχιο μόνο για αυτό το μοντέλο. Η λίστα αναγνωριστικών βρίσκεται στο Apple Device Database (μορφή: iPhone17,2 — iPhone 16 Pro Max, iPad14,1 — iPad Pro 11 M4). Αυτή η μέθοδος είναι χρήσιμη για τον έλεγχο μεγέθους τεμαχίου πριν από την αποστολή στο App Store Connect. CI/CD μπορεί να χρησιμοποιήσει αυτήν την εντολή για αυτόματη επαλήθευση — εάν το μέγεθος τεμαχίου υπερβαίνει το όριο (π.χ. 100 MB για λήψη κινητού), το pipeline εκδίδει προειδοποίηση.
Μετά τη μεταφόρτωση του αρχείου στο App Store Connect, η Apple παρέχει λεπτομερή στατιστικά σχετικά με τα μεγέθη τεμαχίων. App Store Connect → Activity → επιλέξτε build → App Thinning — εμφανίζει το Estimated App Store Size για κάθε κατηγορία συσκευών: iPhone, iPad, Apple Watch, tvOS. Τα μεγέθη χωρίζονται ανά έκδοση iOS και τύπο επεξεργαστή. Εάν κάποιο τεμάχιο υπερβαίνει το αναμενόμενο μέγεθος, το App Store Connect το επισημαίνει με κίτρινη προειδοποίηση.
Τοπικός έλεγχος μέσω Xcode Organizer: μετά την αρχειοθέτηση, ανοίξτε το Window → Organizer, επιλέξτε το αρχείο και κάντε κλικ στο App Thinning Profiles. Το Xcode θα εμφανίσει τα μεγέθη για κάθε πιθανό τεμάχιο βάσει της τρέχουσας διαμόρφωσης του έργου. Διατίθεται επίσης η επιλογή Export για δημιουργία IPA με συγκεκριμένο προφίλ Slicing. Xcode δημιουργεί το αρχείο .app-thinning.plist με πληροφορίες σχετικά με το ποιοι πόροι εισήλθαν σε κάθε τεμάχιο.
Για αυτοματοποίηση ελέγχου Slicing σε CI/CD, χρησιμοποιήστε το xcodebuild με -thinning και αναλύστε το μέγεθος των δημιουργηθέντων αρχείων .app. Apple παρέχει το εργαλείο γραμμής εντολών app-size (εγκαθίσταται μέσω Xcode Command Line Tools) που εμφανίζει λεπτομερή αναφορά: μέγεθος κώδικα, μέγεθος πόρων ανά κατηγορία (εικόνες, shader, NIB), μέγεθος βιβλιοθηκών Swift. Η σύγκριση μεγεθών τεμαχίων πριν και μετά τη βελτιστοποίηση Asset Catalogs βοηθά στον εντοπισμό πόρων που δεν συμμετέχουν στο Slicing λόγω εσφαλμένης διαμόρφωσης.
# Ανάλυση μεγέθους τεμαχίου
app-size -m "sliced/App.app" \
--format json
App-size εμφανίζει αναφορά JSON με ανάλυση ανά κατηγορία πόρων. Εάν το Slicing έχει ρυθμιστεί σωστά, στην ενότητα „images” θα υπάρχει μόνο ένα σύνολο κλίμακας (@2x ή @3x), όχι όλες οι παραλλαγές. Το σφάλμα διαμόρφωσης Asset Catalogs εκδηλώνεται με το ότι όλες οι κλίμακες (@1x, @2x, @3x) είναι παρούσες στο τεμάχιο — αυτό σημαίνει ότι το Xcode δεν μπόρεσε να καθορίσει τη συσκευή-στόχο για αυτές τις εικόνες και το Slicing δεν λειτούργησε.
Συχνές ερωτήσεις
Ναι, το TestFlight υποστηρίζει επίσης Slicing. Όταν ο δοκιμαστής κατεβάζει την εφαρμογή μέσω TestFlight, ο διακομιστής Apple παραδίδει ένα τεμάχιο βελτιστοποιημένο για τη συσκευή του δοκιμαστή. App Store Connect επεξεργάζεται αυτόματα το Slicing για όλες τις διανομές, συμπεριλαμβανομένου του TestFlight, εκτός από τις εκδόσεις Enterprise και Ad Hoc.
Ναι, στα Asset Catalogs για κάθε εικόνα μπορείτε να αφαιρέσετε τις σημάνσεις για συγκεκριμένους τύπους συσκευών. Xcode επιτρέπει στο Attributes Inspector να καθορίσετε για ποιο Idiom (iPhone, iPad, Apple Watch, Mac) και κλίμακες πρέπει να συμπεριληφθεί ο πόρος. Εάν ο πόρος χρειάζεται σε όλες τις συσκευές, χρησιμοποιήστε Universal με οποιαδήποτε κλίμακα.
Τα προσαρμοσμένα framework (.framework) συμμετέχουν επίσης στο Slicing εάν είναι μεταγλωττισμένα ως XCFramework (με πολλές αρχιτεκτονικές). App Store περιλαμβάνει στο τεμάχιο μόνο εκείνη την αρχιτεκτονική του framework που αντιστοιχεί στη συσκευή-στόχο. Οι στατικές βιβλιοθήκες (.a) δεν υπόκεινται σε Slicing — ενσωματώνονται πλήρως στο δυαδικό αρχείο.
Xcode Organizer εμφανίζει estimated size — εκτιμώμενο μέγεθος χωρίς να λαμβάνει υπόψη την πραγματική κοπή στους διακομιστές Apple. Το App Store Connect εμφανίζει το πραγματικό μέγεθος μετά το Slicing, το οποίο μπορεί να είναι 10-15% μικρότερο από την εκτίμηση, επειδή ο διακομιστής εφαρμόζει πρόσθετες βελτιστοποιήσεις (αλγόριθμοι συμπίεσης LZFSE, Zstandard) που δεν είναι διαθέσιμες τοπικά.
Ναι, το Slicing είναι πλήρως συμβατό με SwiftUI. Asset Catalogs χρησιμοποιούνται από το SwiftUI μέσω των τύπων Image, Color, SymbolImage. Το Slicing εφαρμόζεται σε διανυσματικές και ραστεροποιημένες εικόνες, σύμβολα SF Symbols και shader Metal, ανεξάρτητα από το αν χρησιμοποιείται SwiftUI ή UIKit για την κατασκευή της διεπαφής.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης