On-Demand Resources: τι είναι, μηχανισμός αιτήματος και αποθήκευση πόρων

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-04-17 Χρόνος ανάγνωσης: 9 λεπ

On-Demand Resources " είναι η τεχνολογία της Apple για καθυστερημένη φόρτωση περιεχομένου εφαρμογής. Αντί να συμπεριλάβει όλους τους πόρους στο πακέτο εγκατάστασης, ο προγραμματιστής τους τοποθετεί στους διακομιστές του App Store και τους ζητά όταν χρειάζεται. Σύμφωνα με τον Apple ODR Guide, αυτό επιτρέπει τη μείωση του μεγέθους αρχικής εγκατάστασης και την προσθήκη νέου περιεχομένου χωρίς ενημέρωση της έκδοσης της εφαρμογής.

Κύρια σημεία

  • On-Demand Resources " μηχανισμός φόρτωσης πόρων κατόπιν ζήτησης μετά την εγκατάσταση της εφαρμογής
  • Πόροι αποθηκεύονται στους διακομιστές της Apple και ζητούνται μέσω NSBundleResourceRequest
  • Ετικέτες ομαδοποιούν τους πόρους ανά λειτουργικά μπλοκ της εφαρμογής
  • Prefetching επιτρέπει την εκ των προτέρων φόρτωση πόρων για βελτίωση της UX
  • Ποσοστώσεις αποθήκευσης είναι περιορισμένες και απαιτούν παρακολούθηση από τον προγραμματιστή

Τι είναι τα On-Demand Resources στο iOS

On-Demand Resources (ODR) " είναι ένα σύστημα διαχείρισης περιεχομένου ενσωματωμένο στο iOS, tvOS και macOS. Επιτρέπει στον προγραμματιστή να διαχωρίσει τους πόρους της εφαρμογής σε υποχρεωτικούς (μέρος του πακέτου εγκατάστασης) και φορτώσιμους κατόπιν ζήτησης (αποθηκευμένους στο App Store και λήψη όταν χρειάζεται).

Βασικές έννοιες ODR

Το σύστημα ODR λειτουργεί με τρεις βασικές οντότητες: ετικέτες, πακέτα πόρων και αιτήματα. Η ετικέτα είναι μια συμβολοσειρά αναγνωριστικού που ενώνει μια ομάδα αρχείων. Το πακέτο πόρων είναι ένα σύνολο δεδομένων που σχετίζεται με μια ετικέτα. Το αίτημα είναι μια προγραμματιστική κλήση NSBundleResourceRequest που ξεκινά τη φόρτωση του πακέτου.

Κύκλος ζωής αιτήματος πόρου

Η φόρτωση πόρου περνά από διάφορα στάδια: αρχικοποίηση αιτήματος με καθορισμό ετικετών, έλεγχος διαθεσιμότητας στην τοπική αποθήκευση, λήψη από τους διακομιστές της Apple σε περίπτωση απουσίας, ειδοποίηση της εφαρμογής για ετοιμότητα και απελευθέρωση του πόρου μετά τη χρήση. Το σύστημα διαχειρίζεται αυτόματα την προσωρινή αποθήκευση και τη διαγραφή αχρησιμοποίητων πόρων.

ΣτάδιοΕνέργεια συστήματοςΧρόνος εκτέλεσης
ΑρχικοποίησηΔημιουργία NSBundleResourceRequest με ετικέταΆμεσα
Έλεγχος προσωρινής μνήμηςΑναζήτηση πόρου στην τοπική αποθήκευση0,1–0,5 δευτ.
ΛήψηΛήψη από το CDN της AppleΕξαρτάται από το μέγεθος
ΕιδοποίησηΚλήση completion handler ή εκπροσώπουΆμεσα
ΑπελευθέρωσηΣήμανση πόρου ως διαγράψιμου από το σύστημαΚατόπιν αιτήματος iOS

Πώς λειτουργεί το ODR στο iOS

Ο μηχανισμός ODR βασίζεται σε μια υπηρεσία παρασκηνίου που διαχειρίζεται αιτήματα πόρων από τον αποθηκευτικό χώρο cloud του App Store. Όταν η εφαρμογή ζητά μια ετικέτα, το σύστημα ελέγχει αν ο πόρος υπάρχει στην τοπική προσωρινή μνήμη. Αν όχι " ξεκινά τη λήψη μέσω μιας περιόδου σύνδεσης URL παρασκηνίου με υποστήριξη συνέχισης σε περίπτωση διακοπής σύνδεσης.

Διαχείριση αιτημάτων μέσω NSBundleResourceRequest

swift
import Foundation

class ResourceManager {
    let odrRequest = NSBundleResourceRequest(tags: ["level-3"])

    func loadLevel3() {
        odrRequest.conditionallyBeginAccessingResources { available in
            if available {
                self.startLevel3()
            } else {
                self.odrRequest.beginAccessingResources { error in
                    guard error == nil else { return }
                    self.startLevel3()
                }
            }
        }
    }

    func releaseResources() {
        odrRequest.endAccessingResources()
    }
}

Η μέθοδος conditionallyBeginAccessingResources ελέγχει τη διαθεσιμότητα του πόρου στην προσωρινή μνήμη χωρίς άμεση φόρτωση. Εάν η σημαία διαθεσιμότητας είναι θετική " η εφαρμογή συνεχίζει χωρίς καθυστέρηση. Εάν ο πόρος απουσιάζει, η beginAccessingResources ξεκινά τη λήψη με ένδειξη προόδου μέσω της ιδιότητας progress.

Φόρτωση παρασκηνίου και προτεραιότητες

Το σύστημα iOS διαχειρίζεται το ίδιο τις προτεραιότητες φόρτωσης πόρων ODR ανάλογα με την τρέχουσα δραστηριότητα της εφαρμογής. Εάν η εφαρμογή βρίσκεται στο προσκήνιο, η φόρτωση γίνεται με υψηλή προτεραιότητα. Στο παρασκήνιο, το iOS μπορεί να καθυστερήσει τη φόρτωση ή να τη διακόψει όταν η μπαταρία είναι χαμηλή.

  • Υψηλή προτεραιότητα " άμεση φόρτωση για πόρους που χρειάζονται αμέσως
  • Χαμηλή προτεραιότητα " καθυστερημένη φόρτωση για προφόρτωση και αρχική προσωρινή αποθήκευση
  • Παρασκήνιο " φόρτωση μόνο με ενεργό Wi-Fi και επαρκή μπαταρία

Τύποι πόρων και ετικέτες ODR

Οι πόροι ODR μπορούν να περιλαμβάνουν εικόνες, βίντεο, αρχεία ήχου, sprites, δεδομένα επιπέδων και οποιαδήποτε άλλα αρχεία που δεν είναι κρίσιμα για την εκκίνηση της εφαρμογής. Κάθε πόρος συνδέεται με μία ή περισσότερες ετικέτες που καθορίζουν την υπαγωγή του σε ένα λειτουργικό μπλοκ.

Επισήμανση περιεχομένου στο Xcode

Στο Xcode, οι ετικέτες ρυθμίζονται μέσω του επιθεωρητή Resource Tags στην καρτέλα Target Membership. Ο προγραμματιστής καθορίζει για κάθε αρχείο στο έργο εάν αποτελεί μέρος του κεντρικού πακέτου ή φορτώνεται μέσω ετικέτας. Ένα αρχείο μπορεί να ανήκει σε πολλές ετικέτες, επιτρέποντας την επαναχρησιμοποίηση πόρων μεταξύ διαφορετικών τμημάτων της εφαρμογής.

xml
<!-- Παράδειγμα διαμόρφωσης Resource Tags στο Info.plist -->
<key>NSBundleResourceRequestTags</key>
<dict>
    <key>level-3</key>
    <array>
        <string>levels/level3.scnassets</string>
        <string>textures/level3_tex.png</string>
    </array>
</dict>

Κατηγορίες ετικετών ανά διάρκεια ζωής

Η Apple διακρίνει τρεις κατηγορίες ετικετών ODR ανάλογα με το πόσο χρόνο πρέπει να παραμείνει ο πόρος στη συσκευή. Οι Initial Install Tags φορτώνονται μαζί με την εφαρμογή και δεν διαγράφονται ποτέ από το σύστημα. Η Prefetch Tag Order καθορίζει τη σειρά φόρτωσης παρασκηνίου αμέσως μετά την εγκατάσταση. Οι κύριες ετικέτες φορτώνονται κατόπιν ζήτησης και μπορούν να διαγραφούν από το iOS σε περίπτωση έλλειψης χώρου.

Εκτός από τις κατηγορίες, κάθε ετικέτα μπορεί να έχει προτεραιότητα φόρτωσης. Οι ετικέτες με υψηλή προτεραιότητα φορτώνονται πριν από εκείνες με χαμηλή προτεραιότητα, ακόμα κι αν ζητήθηκαν αργότερα. Αυτό επιτρέπει στον προγραμματιστή να διαχειριστεί τη σειρά εμφάνισης περιεχομένου: πρώτα οι κρίσιμοι πόροι για την κύρια οθόνη, έπειτα τα πρόσθετα υλικά για τα βαθιά τμήματα της εφαρμογής.

  • Initial install tags " φορτώνονται κατά την αρχική εγκατάσταση, δεν διαγράφονται από το σύστημα
  • Prefetched tags " λαμβάνονται στο παρασκήνιο μετά την εγκατάσταση για βελτίωση UX
  • On-demand tags " ζητούνται προγραμματιστικά, μπορούν να διαγραφούν από το iOS σε περίπτωση έλλειψης χώρου

Ρύθμιση On-Demand Resources στο Xcode

Η ρύθμιση ODR στο Xcode περιλαμβάνει τρία στάδια: κατηγοριοποίηση πόρων ανά ετικέτα, διαμόρφωση παραμέτρων φόρτωσης στο Info.plist και προγραμματιστική υλοποίηση αιτημάτων μέσω NSBundleResourceRequest. Το μεγαλύτερο μέρος της εργασίας γίνεται στην πλευρά δημιουργίας του έργου.

Κατηγοριοποίηση στο Target Membership

swift
// Έλεγχος κατάστασης και παρακολούθηση προόδου ODR
func monitorODRProgress(tag: String) {
    let request = NSBundleResourceRequest(tags: [tag])
    let observer = request.progress.observe(\.fractionCompleted) { progress, _ in
        DispatchQueue.main.async {
            let percent = Int(progress.fractionCompleted * 100)
            print("ODR: \(percent)% φορτώθηκε")
        }
    }
}

Η πρόοδος φόρτωσης παρακολουθείται μέσω της ιδιότητας progress της κλάσης NSProgress με υποστήριξη παρατήρησης KVO. Η εφαρμογή μπορεί να εμφανίσει δείκτη προόδου στον χρήστη κατά τη λήψη πόρων. Μετά την ολοκλήρωση της φόρτωσης, οι πόροι είναι διαθέσιμοι στο κεντρικό πακέτο της εφαρμογής μέσω των τυπικών μηχανισμών FileManager και NSDataAsset.

Παράμετροι ποσοστώσεων και περιορισμών

Οι ποσοστώσεις ODR εξαρτώνται από την έκδοση iOS. Από το iOS 13, η συσκευή μπορεί να αποθηκεύσει έως 20 GB πόρων που έχουν ληφθεί κατόπιν ζήτησης ανά λογαριασμό. Αυτός ο όγκος κατανέμεται μεταξύ όλων των εφαρμογών που είναι εγκατεστημένες στη συσκευή " αν μια εφαρμογή καταλαμβάνει πολύ χώρο, λιγότερος απομένει για τις άλλες.

Η παρακολούθηση του κατειλημμένου χώρου γίνεται μέσω του NSBundleResourceRequest. Η εφαρμογή μπορεί να ελέγξει τον διαθέσιμο χώρο αποθήκευσης ODR και βάσει αυτού να αποφασίσει ποιους πόρους θα φορτώσει πρώτα. Συνιστάται η υλοποίηση μηχανισμού fallback: εάν ο χώρος ODR είναι γεμάτος, χρησιμοποιήστε πόρους από το κεντρικό πακέτο μειωμένης ποιότητας.

Κατά την υπέρβαση της ποσόστωσης, το σύστημα διαγράφει πόρους με ετικέτες On-Demand με σειρά λιγότερο πρόσφατης χρήσης, ξεκινώντας από τους παλαιότερους. Ο Resource Manager στον κώδικα της εφαρμογής μπορεί να παρακολουθεί τον τρέχοντα όγκο του κατειλημμένου χώρου ODR μέσω της ιδιότητας NSBundleResourceRequest.

Ο προγραμματιστής πρέπει να λάβει υπόψη ότι το iOS μπορεί ανά πάσα στιγμή να αποφασίσει τη διαγραφή πόρων On-Demand " η εφαρμογή πρέπει να χειριστεί σωστά την κατάσταση όπου ένας προηγουμένως φορτωμένος πόρος γίνεται ξαφνικά μη διαθέσιμος. Συνιστάται η σύλληψη σφαλμάτων πρόσβασης σε πόρους και η εκ νέου αίτησή τους μέσω beginAccessingResources. Για κρίσιμους πόρους χωρίς τους οποίους η εφαρμογή δεν μπορεί να λειτουργήσει, χρησιμοποιήστε Initial Install Tags που δεν διαγράφονται από το σύστημα.

Πλεονεκτήματα και περιορισμοί του ODR

Τα On-Demand Resources παρέχουν στον προγραμματιστή ένα ευέλικτο εργαλείο διαχείρισης του μεγέθους της εφαρμογής, αλλά επιβάλλουν μια σειρά περιορισμών σχετικά με τη διαθεσιμότητα δικτύου και τις πολιτικές αποθήκευσης iOS.

Πλεονεκτήματα χρήσης ODR

Το κύριο πλεονέκτημα του ODR " η δραστική μείωση του μεγέθους αρχικής εγκατάστασης. Παιχνίδια με πολλά επίπεδα, εφαρμογές με περιεχόμενο βίντεο ή μεγάλα σύνολα εικόνων μπορούν να φορτώνουν περιεχόμενο τμηματικά. Ο χρήστης αποκτά άμεση πρόσβαση στη βασική λειτουργικότητα, ενώ οι πρόσθετοι πόροι λαμβάνονται στο παρασκήνιο.

Περιορισμοί της τεχνολογίας

Το ODR απαιτεί μόνιμη σύνδεση στο διαδίκτυο για τη φόρτωση πόρων κατά την πρώτη πρόσβαση. Ο χρήστης σε περιοχή με κακή κάλυψη μπορεί να αντιμετωπίσει καθυστερήσεις και σφάλματα φόρτωσης. Επιπλέον, η Apple δεν εγγυάται ότι οι φορτωμένοι πόροι θα παραμείνουν στη συσκευή " σε περίπτωση έλλειψης χώρου, το iOS μπορεί να διαγράψει ετικέτες On-Demand χωρίς προειδοποίηση.

  • Ανάγκη δικτύου " το πρώτο αίτημα πόρου απαιτεί σύνδεση στο διαδίκτυο
  • Αυτόματη διαγραφή " το iOS μπορεί να καθαρίσει την προσωρινή μνήμη σε περίπτωση έλλειψης χώρου
  • Δυσκολία εντοπισμού σφαλμάτων " η αναπαραγωγή προβλημάτων φόρτωσης απαιτεί προσομοίωση διαφορετικών συνθηκών δικτύου
  • Μέγεθος ετικέτας " η Apple συνιστά να μην υπερβαίνει τα 512 MB ανά ετικέτα για βέλτιστη απόδοση
  • Διαχείριση σφαλμάτων " η εφαρμογή πρέπει να χειρίζεται σωστά τα σφάλματα φόρτωσης και να επαναλαμβάνει τα αιτήματα

Συχνές Ερωτήσεις

Μπορώ να χρησιμοποιήσω το ODR για δυναμική προσθήκη περιεχομένου χωρίς ενημέρωση της εφαρμογής;

Το ODR επιτρέπει την προσθήκη και τροποποίηση πόρων χωρίς δημοσίευση νέας έκδοσης στο App Store. Αρκεί να ενημερώσετε τα αρχεία στον διακομιστή της Apple μέσω Xcode και να τα αντιστοιχίσετε στις ίδιες ετικέτες. Στο επόμενο αίτημα, η εφαρμογή θα λάβει την τρέχουσα έκδοση του πόρου. Αυτό είναι βολικό για εποχιακό περιεχόμενο, προσωρινές προωθητικές ενέργειες και δοκιμές A/B νέων εικόνων και διατάξεων.

Πώς διαχειρίζεται το iOS τη διαγραφή πόρων ODR σε περίπτωση έλλειψης χώρου;

Το σύστημα διαγράφει πόρους με την ένδειξη On-Demand όταν χρειάζεται να ελευθερώσει χώρο για άλλες εφαρμογές. Οι πόροι Initial Install Tags δεν διαγράφονται. Η σειρά διαγραφής καθορίζεται από τον αλγόριθμο LRU (Least Recently Used) " πρώτα διαγράφονται οι πόροι στους οποίους δεν έχει γίνει πρόσβαση για το μεγαλύτερο χρονικό διάστημα.

Ποιο είναι το μέγιστο μέγεθος πόρων ODR για μία εφαρμογή;

Από το iOS 13, το συνολικό όριο αποθήκευσης ODR είναι 20 GB ανά Apple ID χρήστη. Το μέγεθος μιας ετικέτας δεν πρέπει να υπερβαίνει τα 512 MB για βέλτιστη απόδοση φόρτωσης. Σε περίπτωση υπέρβασης του ορίου, τα αιτήματα καταλήγουν σε σφάλμα NSBundleResourceRequestLowDiskSpaceError.

Λειτουργεί το ODR σε λειτουργία εκτός σύνδεσης μετά την αρχική φόρτωση;

Ναι, μετά τη φόρτωση, ο πόρος αποθηκεύεται στην τοπική προσωρινή μνήμη και είναι διαθέσιμος σε λειτουργία εκτός σύνδεσης χωρίς σύνδεση στο διαδίκτυο. Προβλήματα προκύπτουν μόνο εάν το iOS έχει διαγράψει τον πόρο λόγω έλλειψης χώρου και ο χρήστης προσπαθεί να τον προσεγγίσει χωρίς δίκτυο.

Σε τι διαφέρει το ODR από την απλή λήψη αρχείων μέσω URLSession;

Το ODR είναι ενσωματωμένο με την υποδομή του App Store: οι πόροι φιλοξενούνται στο CDN της Apple, διαχειρίζονται από το σύστημα προσωρινής αποθήκευσης και δεν απαιτούν από τον προγραμματιστή να οργανώσει δικό του διακομιστή. Το URLSession απαιτεί υποδομή διακομιστή, έλεγχο εκδόσεων και χειροκίνητη διαχείριση προσωρινής μνήμης. Το ODR επίσης χειρίζεται αυτόματα τη συνέχιση της λήψης μετά από διακοπή σύνδεσης.

Σύνοψη

  • On-Demand Resources " τεχνολογία καθυστερημένης φόρτωσης περιεχομένου σε εφαρμογές iOS και tvOS
  • Σύστημα βασισμένο σε ετικέτες που ομαδοποιούν πόρους και αιτήματα μέσω NSBundleResourceRequest
  • Υποστηρίζονται όλοι οι τύποι αρχείων: εικόνες, βίντεο, ήχος, sprites και δεδομένα επιπέδων
  • Κατηγορίες ετικετών " Initial Install, Prefetched και On-Demand με διαφορετικές πολιτικές αποθήκευσης
  • Όριο αποθήκευσης " 20 GB ανά Apple ID, έως 512 MB ανά ετικέτα
  • Μέγεθος εγκατάστασης μειώνεται μεταφέροντας πόρους από το κεντρικό πακέτο στους διακομιστές Apple
  • Σύσταση " χρησιμοποιήστε ODR για παιχνίδια, εφαρμογές με περιεχόμενο πολυμέσων και έργα με πολυεπίπεδη δομή

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης