# ITMS-90683: διόρθωση «Missing purpose string» με Expo

> ITMS-90683 Missing purpose string: γιατί η Apple απορρίπτει το build σου, ποιο κλειδί βάζεις στο app.json με Expo και πώς βρίσκεις τα κλειδιά που λείπουν.

Αρχική σελίδα: [ITMS-90683: διόρθωση «Missing purpose string» με Expo](https://devoria.fr/el/blog/itms-90683-missing-purpose-string-expo)
Συγγραφέας: [Mehdi Azizi](https://devoria.fr/el/mehdi-azizi)
Δημοσίευση: 2026-10-09
Τελευταία αναθεώρηση περιεχομένου: 2026-10-09


ITMS-90683 είναι αυτόματη απόρριψη της Apple: έρχεται με e-mail λίγο μετά την αποστολή του build σου, πριν από οποιονδήποτε ανθρώπινο έλεγχο. Σημαίνει ότι στο αρχείο Info.plist λείπει η πρόταση που εξηγεί γιατί η εφαρμογή έχει πρόσβαση σε ευαίσθητα δεδομένα. **Η διόρθωση θέλει δύο κινήσεις: προσθέτεις το κλειδί που αναφέρει το μήνυμα στο `ios.infoPlist` και ξαναφτιάχνεις build.**

Τη φάγαμε με το Solys, το ξυπνητήρι μου με μίνι παιχνίδια, για δεδομένα που η εφαρμογή ούτε καν χρησιμοποιεί. Δες τι σημαίνει το μήνυμα, γιατί εμφανίζεται και πώς το αποφεύγεις.

## Τι σημαίνει το σφάλμα ITMS-90683;

Ο πλήρης τίτλος του μηνύματος είναι «ITMS-90683: Missing purpose string in Info.plist». Λέει ότι ο κώδικας της εφαρμογής σου αναφέρεται σε ένα API που αγγίζει ευαίσθητα δεδομένα (φωτογραφίες, κάμερα, μικρόφωνο, τοποθεσία, επαφές) και ότι το Info.plist σου δεν περιέχει το αντίστοιχο κλειδί περιγραφής. Το μήνυμα κατονομάζει το κλειδί, για παράδειγμα `NSPhotoLibraryUsageDescription`.

Αυτή η πρόταση περιγραφής λέγεται «purpose string». Είναι το κείμενο που δείχνει το iOS στο παράθυρο που ζητάει άδεια. Η Apple το γράφει στην τεκμηρίωσή της για την [πρόσβαση σε προστατευμένους πόρους](https://developer.apple.com/documentation/uikit/requesting-access-to-protected-resources): το App Review απορρίπτει εφαρμογές που ο κώδικάς τους έχει πρόσβαση σε αυτούς τους πόρους χωρίς purpose string.

Δεν είναι απόρριψη από reviewer. Ο έλεγχος είναι αυτόματος και γίνεται κατά την παράδοση του build, πριν μπει σε review, όπως το [ITMS-91053](https://devoria.fr/el/blog/itms-91053-missing-api-declaration-expo) για το privacy manifest. Το build απορρίπτεται και πρέπει να στείλεις καινούργιο.

## Γιατί η Apple απορρίπτει ενώ η εφαρμογή σου δεν χρησιμοποιεί αυτά τα δεδομένα

Αυτό είναι που ξαφνιάζει. **Η Apple αναλύει τον κώδικα που περιέχει το build σου, όχι αυτό που κάνει στην πράξη η εφαρμογή.** Αν μια βιβλιοθήκη που ενσωματώνεις περιέχει αναφορά στη βιβλιοθήκη φωτογραφιών, το κλειδί απαιτείται, ακόμα κι αν καμία οθόνη δεν ζητήσει ποτέ πρόσβαση στις φωτογραφίες. Το ίδιο το μήνυμα της Apple το διευκρινίζει: μια εξωτερική βιβλιοθήκη ή SDK μπορεί να αναφέρεται σε αυτά τα API, και το purpose string παραμένει υποχρεωτικό.

Η δική μου περίπτωση, 26 Σεπτεμβρίου 2026. Καθαρίζοντας τις ρυθμίσεις του Solys, είχα αφαιρέσει το κλειδί `NSPhotoLibraryUsageDescription`, αφού η εφαρμογή δεν αγγίζει καμία φωτογραφία. Το επόμενο build απορρίφθηκε με ITMS-90683. Η αιτία: δύο βιβλιοθήκες του Expo που χρησιμοποιεί η εφαρμογή, το `expo-image` και το `expo-file-system`, περιέχουν κώδικα που αναφέρεται στη βιβλιοθήκη φωτογραφιών. Το προηγούμενο build περνούσε, γιατί το κλειδί υπήρχε ακόμα.

**Το μάθημα**: ένα κλειδί περιγραφής δεν το αφαιρείς «επειδή δεν το χρησιμοποιείς». Το αφαιρείς μόνο όταν καμία βιβλιοθήκη του build δεν αναφέρεται πια στο API.

## Τα πιο συνηθισμένα κλειδιά

- `NSPhotoLibraryUsageDescription`: ανάγνωση ή εγγραφή φωτογραφιών.
- `NSPhotoLibraryAddUsageDescription`: προσθήκη φωτογραφιών, χωρίς ανάγνωση.
- `NSCameraUsageDescription`: κάμερα.
- `NSMicrophoneUsageDescription`: μικρόφωνο.
- `NSLocationWhenInUseUsageDescription`: τοποθεσία κατά τη χρήση.
- `NSContactsUsageDescription`: επαφές.
- `NSUserTrackingUsageDescription`: διαφημιστική παρακολούθηση ([App Tracking Transparency](https://devoria.fr/el/blog/guideline-5-1-2-third-party-ai-att-data-sharing)).

Η Apple περιγράφει κάθε κλειδί στην τεκμηρίωσή της, για παράδειγμα αυτό του [NSPhotoLibraryUsageDescription](https://developer.apple.com/documentation/bundleresources/information-property-list/nsphotolibraryusagedescription): απαιτείται μόλις η εφαρμογή χρησιμοποιεί ένα API που διαβάζει ή γράφει στη βιβλιοθήκη φωτογραφιών.

## Διόρθωση του ITMS-90683 σε εφαρμογή Expo

1. **Σημείωσε το κλειδί που αναφέρει το e-mail της Apple.** Το μήνυμα δίνει το ακριβές όνομά του.
2. **Πρόσθεσέ το στις ρυθμίσεις σου**, κάτω από το `ios.infoPlist`, όπως λέει η [τεκμηρίωση του Expo για τις άδειες](https://docs.expo.dev/guides/permissions/):

```json
{
  "expo": {
    "ios": {
      "infoPlist": {
        "NSPhotoLibraryUsageDescription": "Το Solys δεν έχει πρόσβαση στις φωτογραφίες σου. Αυτή η άδεια δεν ζητείται ποτέ."
      }
    }
  }
}
```

3. **Φτιάξε ξανά build.** Το Expo το διευκρινίζει: μια αλλαγή στο Info.plist δεν περνάει με απομακρυσμένη ενημέρωση, χρειάζεται νέο binary.
4. **Στείλε ξανά το build** στην Apple και μετά επίλεξέ το στην έκδοσή σου.

Μια παγίδα αν η εφαρμογή σου είναι μεταφρασμένη: τα αρχεία γλώσσας μεταφράζουν ένα κλειδί, δεν το δηλώνουν. Το κλειδί πρέπει πρώτα να υπάρχει στο `ios.infoPlist` (ή στις ρυθμίσεις του αντίστοιχου plugin). Αλλιώς η εφαρμογή μπορεί να κρασάρει στην πρώτη κλήση.

## Τι πρόταση γράφεις αν η εφαρμογή σου δεν χρησιμοποιεί τα δεδομένα;

Η Apple ζητάει μια περιγραφή ακριβή, χρήσιμη και συγκεκριμένη. Αν η εφαρμογή σου όντως χρησιμοποιεί τα δεδομένα, πες σε τι χρησιμεύουν, με μία πρόταση: «Η εφαρμογή χρησιμοποιεί την κάμερα για να σκανάρει το barcode του εισιτηρίου σου.»

Αν το κλειδί υπάρχει μόνο εξαιτίας μιας βιβλιοθήκης, η Apple δίνει δύο λύσεις: να γράψεις την πρόταση ή να αφαιρέσεις τον κώδικα που έχει πρόσβαση στα δεδομένα. Όταν αυτός ο κώδικας έρχεται από βιβλιοθήκη, δεν μπορείς να τον αφαιρέσεις εύκολα. Στο Solys λοιπόν έγραψα την αλήθεια: «Το Solys δεν έχει πρόσβαση στις φωτογραφίες σου. Αυτή η άδεια δεν ζητείται ποτέ.» Είναι πρακτική επιλογή: το επόμενο build πέρασε την παράδοση, αλλά δεν μπορώ να σου πω ότι η Apple θα δέχεται πάντα αυτή την πρόταση.

## Βρες τα κλειδιά που λείπουν πριν την αποστολή

Από τη ρίζα του project σου, αυτή η εντολή εμφανίζει τα αρχεία των βιβλιοθηκών που ο κώδικας iOS τους αναφέρεται στα πιο ελεγχόμενα API:

```bash
grep -rlE "PHPhotoLibrary|AVCaptureDevice|CLLocationManager|CNContactStore|EKEventStore|ATTrackingManager" \
  node_modules/*/ios node_modules/@*/*/ios
```

Κάθε όνομα αντιστοιχεί σε ένα είδος δεδομένων: `PHPhotoLibrary` για τις φωτογραφίες, `AVCaptureDevice` για την κάμερα και το μικρόφωνο, `CLLocationManager` για την τοποθεσία, `CNContactStore` για τις επαφές, `EKEventStore` για το ημερολόγιο, `ATTrackingManager` για την παρακολούθηση. Για κάθε αποτέλεσμα, έλεγξε ότι το αντίστοιχο κλειδί περιγραφής υπάρχει στις ρυθμίσεις σου.

Αυτό το δίχτυ πιάνει τις περιπτώσεις που συνάντησα. Δεν αντικαθιστά την ανάγνωση του e-mail της Apple, που μένει η μόνη σίγουρη λίστα, όπως και για τα μη δημόσια API του ITMS-90338. Από εκείνη την απόρριψη, αυτός ο έλεγχος γίνεται πριν από κάθε build: παίρνει λίγα δευτερόλεπτα, ενώ μια απόρριψη ITMS-90683 κοστίζει ένα build και τον χρόνο να το ξαναφτιάξεις.

## Στείλε το build σου χωρίς δυσάρεστες εκπλήξεις

Το ITMS-90683 διορθώνεται γρήγορα όταν ξέρεις να το διαβάσεις, όπως και το ITMS-90725, που αφορά την έκδοση του Xcode. Οι απορρίψεις που έρχονται μετά, από reviewer, θέλουν περισσότερη ψυχραιμία: η διαδικασία είναι στη σελίδα [εφαρμογή που απέρριψε η Apple](https://devoria.fr/el/expertise/app-rejected-by-apple), και οι πιο συχνοί λόγοι στο [γιατί η Apple απορρίπτει μια εφαρμογή](https://devoria.fr/el/blog/aporripsi-app-apple-app-store-aities).

Για να ελέγξεις τον φάκελό σου πριν την αποστολή, το [Apple Review Kit](https://devoria.fr/el/kits/review-apple) περιέχει τη checklist μου και skills του Claude Code που ξαναδιαβάζουν το project σου. Αν η αποστολή σου κολλάει και θέλεις ανθρώπινη ματιά, [κλείσε μία ώρα μαζί μου](https://devoria.fr/el/coaching): δουλεύουμε το project σου σε βιντεοκλήση, στην οθόνη σου. Κι αν ετοιμάζεις την πρώτη σου κυκλοφορία, [κάνε το δωρεάν διαγνωστικό σου](https://devoria.fr/el/diagnostic): βάζει τα βήματα σε σειρά και σου στέλνει τη checklist μου κατά των απορρίψεων της Apple.

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

### Είναι το ITMS-90683 απόρριψη του App Review;

Όχι με την έννοια ανθρώπινου reviewer. Είναι αυτόματος έλεγχος στο build κατά την παράδοσή του, πριν μπει σε review, όπως το ITMS-90717 για το εικονίδιο. Κανείς δεν άνοιξε την εφαρμογή σου. Το build απορρίπτεται: πρέπει να διορθώσεις το Info.plist και να στείλεις καινούργιο.

### Γιατί η Apple ζητάει κλειδί για δεδομένα που η εφαρμογή μου δεν χρησιμοποιεί;

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

### Διορθώνεται το ITMS-90683 με απομακρυσμένη ενημέρωση;

Όχι. Το κλειδί που λείπει βρίσκεται στο Info.plist, που είναι μέρος του binary. Μια απομακρυσμένη ενημέρωση δεν αλλάζει αυτό το αρχείο: πρέπει να ξαναφτιάξεις build και να το στείλεις ξανά στην Apple.

### Πού προσθέτω το NSPhotoLibraryUsageDescription σε project Expo;

Στις ρυθμίσεις της εφαρμογής σου, κάτω από το `ios.infoPlist`, με μια πρόταση που περιγράφει τη χρήση. Κάποιες βιβλιοθήκες προσφέρουν και ειδική ρύθμιση στο plugin τους, που μπορεί να προσθέσει κι άλλα κλειδιά, όπως ένα background mode. Και στις δύο περιπτώσεις, το κλειδί πρέπει να υπάρχει στις βασικές ρυθμίσεις, όχι μόνο στα αρχεία μετάφρασης.

### Πρέπει να αφαιρώ τα κλειδιά περιγραφής που δεν χρησιμοποιώ;

Μόνο αν καμία βιβλιοθήκη του build δεν αναφέρεται πια στο αντίστοιχο API. Αλλιώς η επόμενη αποστολή θα απορριφθεί με ITMS-90683. Πριν αφαιρέσεις ένα κλειδί, ψάξε το όνομα του API στον κώδικα iOS των εξαρτήσεών σου.


## Το project σου

[Apple Review Kit](https://devoria.fr/el/kits/review-apple): Η checklist για το App Store review που χρησιμοποιώ, οι απορρίψεις μου από την Apple διορθωμένες, οι σημειώσεις για τον reviewer και δύο skills του Claude Code που ελέγχουν την app σου. 29 €.

[iOS Kit](https://devoria.fr/el/kits/ios): Φτιάξε την app σου για iPhone με το Claude Code: ο κώδικας εκκίνησης των apps μου, τα skills που ελέγχουν τη δουλειά του, και τα Apple Review Kit, App Store Screenshots Kit και ASO Kit. 129,99 €.
