Το Info.plist είναι ένα αρχείο XML παραμετροποίησης εφαρμογών iOS και macOS που περιέχει μεταδεδομένα, άδειες και ρυθμίσεις εκκίνησης. Επεξεργάζεται από το σύστημα πριν από την αρχικοποίηση του κώδικα της εφαρμογής. Σύμφωνα με το Apple Developer, 2025, χωρίς σωστά παραμετροποιημένο Info.plist, η εφαρμογή δεν περνάει από τον έλεγχο του App Store. Info.plist καθορίζει το αναγνωριστικό bundle, την έκδοση build, τις αιτούμενες άδειες και τις υποστηριζόμενες προσανατολίσεις οθόνης.
Κύρια σημεία
Το Info.plist είναι ένα αρχείο σε μορφή XML με ριζικό στοιχείο dict που περιέχει ζεύγη κλειδιού-τιμής με τη μορφή property list. Βρίσκεται μέσα στο bundle της εφαρμογής και διαβάζεται από το σύστημα σε κάθε εκκίνηση πριν από την εκτέλεση κώδικα. Η μορφή plist υποστηρίζει συμβολοσειρές, αριθμούς, πίνακες, λεξικά, ημερομηνίες και boolean τιμές, επιτρέποντας την περιγραφή σύνθετων παραμετροποιήσεων.
Η Apple χρησιμοποιεί το Info.plist για να καθορίσει την ταυτότητα της εφαρμογής, τις δυνατότητες και τις απαιτήσεις της. Η αλλαγή ορισμένων κλειδιών απαιτεί ανακατασκευή του bundle επειδή επηρεάζουν τα μεταδεδομένα που ελέγχει το App Store κατά τη μεταφόρτωση ενός build. Για παράδειγμα, η αλλαγή του CFBundleVersion ή του CFBundleIdentifier μετά τη δημοσίευση μπορεί να διαταράξει τη διαδικασία ενημέρωσης της εφαρμογής, καθώς το App Store Connect χρησιμοποιεί αυτές τις τιμές για την αναγνώριση εκδόσεων.
Τα βασικά κλειδιά δημιουργούνται αυτόματα κατά τη δημιουργία ενός έργου στο Xcode, αλλά τα περισσότερα ρυθμίσεις προστίθενται χειροκίνητα καθώς αναπτύσσεται η λειτουργικότητα της εφαρμογής. Το Xcode παρέχει ένα γραφικό πρόγραμμα επεξεργασίας Info.plist με αναπτυσσόμενες λίστες για τυπικά κλειδιά, μειώνοντας τον κίνδυνο τυπογραφικών λαθών. Ωστόσο, για σύνθετες παραμετροποιήσεις όπως Scene Manifest ή Background Modes, συνιστάται η άμεση επεξεργασία του πηγαίου XML.
Ορισμένα κλειδιά Info.plist είναι υποχρεωτικά για δημοσίευση στο App Store. Η απουσία τους οδηγεί σε απόρριψη του build στο στάδιο επικύρωσης. Η Apple ελέγχει αυτόματα αυτά τα κλειδιά κατά τη μεταφόρτωση του αρχείου μέσω Xcode Organizer ή Transporter. Ο προγραμματιστής πρέπει να διασφαλίσει ότι όλα τα υποχρεωτικά πεδία έχουν συμπληρωθεί σωστά πριν από την αποστολή για έλεγχο.
Το κλειδί CFBundleIdentifier ορίζει ένα μοναδικό αναγνωριστικό της εφαρμογής σε αντίστροφη σημειογραφία τομέα (com.εταιρεία.όνομαεφαρμογής). Χρησιμοποιείται για υπογραφή κώδικα, ειδοποιήσεις Push, CloudKit, App Groups και πολλές άλλες υπηρεσίες Apple. Η αλλαγή του αναγνωριστικού μετά τη δημοσίευση θεωρείται από το App Store ως νέα εφαρμογή και οι υπάρχοντες χρήστες δεν θα λάβουν ενημέρωση. Επομένως, το αναγνωριστικό πρέπει να παραμένει αμετάβλητο καθ' όλη τη διάρκεια ζωής της εφαρμογής.
<key>CFBundleIdentifier</key>
<string>com.itsectr.myapp</string>
Τα κλειδιά CFBundleShortVersionString (εμφανιζόμενη έκδοση) και CFBundleVersion (αριθμός build) χρησιμοποιούνται από το App Store Connect και το σύστημα για τη διαχείριση ενημερώσεων. Η έκδοση καθορίζεται σε μορφή major.minor.patch. Ο αριθμός build πρέπει να αυξάνεται με κάθε build που μεταφορτώνεται στο App Store Connect, ακόμα κι αν η έκδοση της εφαρμογής δεν αλλάζει. Η Apple χρησιμοποιεί το CFBundleVersion για να καθορίσει εάν το build είναι νέο ή αντίγραφο ενός ήδη μεταφορτωμένου. Εάν ο αριθμός build συμπίπτει με έναν προηγουμένως μεταφορτωμένο, εμφανίζεται το σφάλμα ITMS-90161.
<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>42</string>
Τα κλειδιά UISupportedInterfaceOrientations καθορίζουν τους υποστηριζόμενους προσανατολισμούς οθόνης για iPhone. Για iPad, χρησιμοποιείται ξεχωριστό κλειδί UISupportedInterfaceOrientations~ipad με κατάληξη συσκευής. Κάθε προσανατολισμός καθορίζεται από μια συμβολοσειρά: UIInterfaceOrientationPortrait, UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight, UIInterfaceOrientationPortraitUpsideDown. Εάν η εφαρμογή υποστηρίζει μόνο κατακόρυφο προσανατολισμό, το App Store θα απορρίψει το build, εκτός εάν είναι μόνο για iPhone και έχει καθοριστεί μόνο κατακόρυφο για iPad.
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
</array>
Από το iOS 10, η Apple απαιτεί περιγραφή κάθε αιτούμενης άδειας μέσω κλειδιών με πρόθεμα NS (NeXTStep). Η περιγραφή εμφανίζεται στο χρήστη στο παράθυρο διαλόγου συστήματος κατά το πρώτο αίτημα πρόσβασης σε ιδιωτικά API. Η απουσία του αντίστοιχου κλειδιού NS κατά την κλήση ενός API που απαιτεί άδεια οδηγεί σε άμεσο τερματισμό της εφαρμογής με μια εξαίρεση που καταγράφεται μόνο στα αρχεία καταγραφής σφαλμάτων.
| Κλειδί | Σκοπός |
|---|---|
| NSCameraUsageDescription | Πρόσβαση στην κάμερα για φωτογραφία και βίντεο |
| NSPhotoLibraryUsageDescription | Πρόσβαση στη βιβλιοθήκη φωτογραφιών |
| NSLocationWhenInUseUsageDescription | Γεωτοποθεσία κατά την ενεργή χρήση |
| NSMicrophoneUsageDescription | Πρόσβαση στο μικρόφωνο για εγγραφή ήχου |
| NSContactsUsageDescription | Πρόσβαση στις επαφές συσκευής |
Κάθε κλειδί απορρήτου πρέπει να περιέχει μια κατανοητή για το χρήστη περιγραφή του λόγου του αιτήματος. Κενά ή τυποποιημένα κείμενα, όπως “Για τη λειτουργία της εφαρμογής” ή “Απαιτείται πρόσβαση”, οδηγούν σε απόρριψη από το App Store. Η περιγραφή πρέπει να εξηγεί τη συγκεκριμένη λειτουργικότητα: “Η πρόσβαση στην κάμερα είναι απαραίτητη για τη σάρωση κωδικών QR και τη δημιουργία φωτογραφιών προφίλ”. Συνιστάται η χρήση μεταφρασμένων εκδόσεων των περιγραφών μέσω αρχείων InfoPlist.strings για κάθε υποστηριζόμενη γλώσσα.
Η απουσία του απαιτούμενου κλειδιού NS κατά την κλήση ενός API με πρόσβαση σε ιδιωτικά δεδομένα προκαλεί σφάλμα της εφαρμογής. Το σύστημα τερματίζει τη διαδικασία με μια εξαίρεση, ορατή μόνο στα αρχεία καταγραφής αναφορών σφαλμάτων από το Xcode ή το Firebase Crashlytics. Ο χρήστης βλέπει μόνο το ξαφνικό κλείσιμο της εφαρμογής χωρίς καμία εξήγηση. Επομένως, πριν προσθέσετε νέα λειτουργικότητα που χρησιμοποιεί κάμερα, μικρόφωνο ή γεωτοποθεσία, πρέπει πρώτα να προσθέσετε το αντίστοιχο κλειδί απορρήτου στο Info.plist και στη συνέχεια να υλοποιήσετε την κλήση API.
Το κλειδί CFBundleURLTypes καταχωρεί προσαρμοσμένα σχήματα URL για βαθιούς συνδέσμους στην εφαρμογή. Αυτό επιτρέπει το άνοιγμα της εφαρμογής από πρόγραμμα περιήγησης, email ή άλλες εφαρμογές μέσω συνδέσμων της μορφής myapp://profile/123. Κάθε σχήμα αναγνωρίζει μοναδικά την εφαρμογή: εάν δύο εφαρμογές καταχωρήσουν το ίδιο σχήμα, το σύστημα εμφανίζει στο χρήστη ένα παράθυρο διαλόγου επιλογής.
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.itsectr.myapp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>
Για υποστήριξη Universal Links, απαιτείται το κλειδί com.apple.developer.associated-domains στο αρχείο Entitlements, όχι στο Info.plist. Τα Universal Links λειτουργούν μόνο εάν υπάρχει ένα παραμετροποιημένο αρχείο apple-app-site-association στον διακομιστή που συνδέει τον τομέα με την εφαρμογή. Σε αντίθεση με τα προσαρμοσμένα σχήματα URL, τα Universal Links δεν εμφανίζουν παράθυρο διαλόγου επιβεβαίωσης και δεν έρχονται σε σύγκρουση με άλλες εφαρμογές, επειδή χρησιμοποιούν συνδέσμους HTTPS αντί για προσαρμοσμένα σχήματα. Ωστόσο, απαιτούν έναν τομέα με έγκυρο πιστοποιητικό SSL.
Τα προσαρμοσμένα σχήματα μπορεί να έρχονται σε σύγκρουση με τα τυπικά σχήματα iOS. Συνιστάται η χρήση σχημάτων μήκους τουλάχιστον 4 χαρακτήρων για ελαχιστοποίηση συγκρούσεων με άλλες εφαρμογές. Για παράδειγμα, το σχήμα „fb” είναι πολύ σύντομο και μπορεί να προκαλέσει συγκρούσεις. Είναι καλύτερο να χρησιμοποιείτε αντίστροφη σημειογραφία: myapp:// αντί για app://. Αξίζει επίσης να θυμάστε ότι εάν η εφαρμογή διαγραφεί αλλά μια άλλη εφαρμογή έχει καταχωρήσει το ίδιο σχήμα, ο χρήστης μπορεί να αντιμετωπίσει απροσδόκητη συμπεριφορά κατά την πλοήγηση μέσω ενός συνδέσμου.
Το κλειδί UIBackgroundModes δηλώνει τις δυνατότητες παρασκηνίου της εφαρμογής. Κάθε λειτουργία απαιτεί αντίστοιχη περιγραφή στο Info.plist και επιβεβαίωση στις δυνατότητες του έργου Xcode. Χωρίς καθορισμό λειτουργίας, το σύστημα μπορεί να τερματίσει αναγκαστικά την εργασία παρασκηνίου μετά από 30 δευτερόλεπτα ή σε περίπτωση έλλειψης πόρων.
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
<string>location</string>
<string>processing</string>
</array>
Το κλειδί UIApplicationSupportsMultipleScenes ενεργοποιεί την υποστήριξη πολλαπλών εργασιών σε iPad και Mac Catalyst. Χωρίς αυτό το κλειδί, η εφαρμογή δεν μπορεί να χρησιμοποιήσει SwiftUI ScenePhase ή UIKit UISceneDelegate για διαχείριση πολλαπλών παραθύρων. Στο iPadOS, οι χρήστες μπορούν να ανοίξουν πολλαπλά παράθυρα της ίδιας εφαρμογής, να σύρουν περιεχόμενο μεταξύ τους και να χρησιμοποιήσουν το Split View. Εάν η εφαρμογή δεν υποστηρίζει λειτουργία πολλαπλών παραθύρων, η ρύθμιση αυτού του κλειδιού σε false απενεργοποιεί την αντίστοιχη λειτουργικότητα.
Το κλειδί LSRequiresIPhoneOS απαγορεύει την εγκατάσταση της εφαρμογής σε iPad. Χρησιμοποιείται για εφαρμογές μόνο για iPhone που δεν υποστηρίζουν τη διεπαφή iPad ή δεν έχουν προσαρμοστεί για μεγάλη οθόνη. Ωστόσο, η Apple δεν συνιστά τη χρήση αυτού του κλειδιού χωρίς ανάγκη, καθώς οι χρήστες αναμένουν ότι οι εφαρμογές θα λειτουργούν σε όλες τις συσκευές με iOS και iPadOS. Εάν η εφαρμογή εξακολουθεί να περιορίζεται σε iPhone, βεβαιωθείτε ότι αυτή η απαίτηση είναι τεχνικά δικαιολογημένη και αναφέρεται στην περιγραφή του App Store.
Το κλειδί UIViewControllerBasedStatusBarAppearance ελέγχει το στυλ της γραμμής κατάστασης. Εάν οριστεί σε NO, το στυλ της γραμμής κατάστασης ορίζεται καθολικά μέσω του κλειδιού UIStatusBarStyle στο Info.plist. Εάν YES (προεπιλογή από iOS 7), κάθε ViewController μπορεί να διαχειριστεί τη δική του γραμμή κατάστασης μέσω παράκαμψης του preferredStatusBarStyle. Για σύγχρονες εφαρμογές, συνιστάται να αφήσετε το YES για να έχετε διαφορετική γραμμή κατάστασης σε διαφορετικές οθόνες, για παράδειγμα ανοιχτόχρωμη σε σκούρο φόντο και σκούρα σε ανοιχτόχρωμο φόντο.
Το κλειδί UIApplicationExitsOnSuspend αναγκάζει την εφαρμογή να τερματιστεί πλήρως κατά τη μετάβαση σε λειτουργία παρασκηνίου αντί να ανασταλεί. Χρησιμοποιείται σπάνια, μόνο για εφαρμογές με υψηλές απαιτήσεις ασφαλείας: τραπεζικές εφαρμογές ή εφαρμογές για εργασία με εμπιστευτικά δεδομένα. Σε αυτήν την περίπτωση, ο χρήστης χάνει τη δυνατότητα γρήγορης επιστροφής στην εφαρμογή και κάθε εκκίνηση γίνεται από καθαρή κατάσταση. Το App Store μπορεί να ζητήσει αιτιολόγηση της χρήσης αυτού του κλειδιού κατά τον έλεγχο.
Το κλειδί NSAppTransportSecurity διαχειρίζεται τις συνδέσεις δικτύου της εφαρμογής. Από το iOS 9, το App Transport Security (ATS) αποκλείει από προεπιλογή όλες τις συνδέσεις HTTP, απαιτώντας HTTPS. Για προσωρινή άδεια αιτημάτων HTTP σε συγκεκριμένους τομείς, χρησιμοποιείται το λεξικό NSExceptionDomains μέσα στο NSAppTransportSecurity. Για ανάπτυξη, επιτρέπεται η πλήρης απενεργοποίηση του ATS μέσω NSAllowsArbitraryLoads = true, αλλά η Apple απαιτεί αιτιολόγηση και δεν επιτρέπει τέτοια builds χωρίς σοβαρό λόγο. Στο build παραγωγής, το ATS πρέπει να είναι ενεργοποιημένο για όλους τους τομείς που αλληλεπιδρούν με δεδομένα χρήστη.
Συχνές ερωτήσεις
Το αρχείο Info.plist βρίσκεται στο φάκελο του έργου με όνομα που συμπίπτει με το όνομα της εφαρμογής. Στο Xcode, εμφανίζεται στον πλοηγό έργων μέσα στην ομάδα Supporting Files με εικονίδιο μπλε βιβλίου. Μπορεί επίσης να βρεθεί μέσω αναζήτησης Spotlight στο έργο.
Ναι, το Info.plist μπορεί να επεξεργαστεί σε οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου ή μέσω της γραφικής διεπαφής του Xcode. Η χειροκίνητη επεξεργασία παρέχει πλήρη έλεγχο στο περιεχόμενο, αλλά απαιτεί προσοχή στη σύνταξη XML: κάθε ανοιχτή οδηγία <key> πρέπει να έχει μια αντίστοιχη </key>, και οι τύποι δεδομένων πρέπει να αντιστοιχούν στις προσδοκίες της Apple.
Σε έργα SwiftUI, το Info.plist λειτουργεί πανομοιότυπα με έργα UIKit. Επιπλέον, μπορεί να απαιτείται το κλειδί UIApplicationSceneManifest για τη διαμόρφωση του Scene Configuration, εάν το έργο δεν χρησιμοποιεί το πρωτόκολλο App για διαχείριση σκηνών. Το SwiftUI App protocol δημιουργεί αυτόματα τη διαμόρφωση σκηνών, αλλά για προσαρμογή απαιτείται χειροκίνητη προσθήκη κλειδιών.
Ανοίξτε το Info.plist στο Xcode, κάντε κλικ στο συν και εισάγετε το όνομα του κλειδιού. Για προσαρμοσμένα κλειδιά, χρησιμοποιήστε το πρόθεμα της εταιρείας για αποφυγή συγκρούσεων με τα κλειδιά συστήματος Apple, για παράδειγμα ITSCustomKey αντί για CustomKey. Ο τύπος τιμής (String, Number, Array, Dictionary) επιλέγεται ανάλογα με την αναμενόμενη μορφή δεδομένων.
Τυπικές αιτίες: απουσία κλειδιών απορρήτου για τις αιτούμενες άδειες, λανθασμένο CFBundleIdentifier, αναντιστοιχία έκδοσης μεταξύ Info.plist και App Store Connect, κενές τιμές κλειδιών NS. Ελέγξτε όλα τα κλειδιά NS για τα χρησιμοποιούμενα API και βεβαιωθείτε ότι κάθε περιγραφή περιέχει ουσιαστική εξήγηση στη γλώσσα εντοπισμού της εφαρμογής.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης