7. Χρήση Python σε iOS¶
- Συγγραφείς:
Russell Keith-Magee (2024-03)
Η Python σε iOS διαφέρει από την Python σε πλατφόρμες επιτραπέζιων υπολογιστών. Σε μια πλατφόρμα επιτραπέζιων υπολογιστών, η Python εγκαθίσταται γενικά ως πόρος συστήματος που μπορεί να χρησιμοποιηθεί από οποιονδήποτε χρήστη αυτού του υπολογιστή. Στη συνέχεια, οι χρήστες αλληλεπιδρούν με την Python εκτελώντας ένα εκτελέσιμο αρχείο python και εισάγοντας εντολές σε μια διαδραστική γραμμή εντολών ή εκτελώντας ένα Python script.
Στο iOS, δεν υπάρχει η έννοια της εγκατάστασης ως πόρου συστήματος. Η μόνη μονάδα διανομής λογισμικού είναι μια «εφαρμογή». Επίσης, δεν υπάρχει κονσόλα που θα μπορούσατε να εκτελέσετε ένα εκτελέσιμο αρχείο python ή να αλληλεπιδράσετε με ένα Python REPL.
Ως αποτέλεσμα, ο μόνος τρόπος για να χρησιμοποιήσετε την Python σε iOS είναι σε ενσωματωμένη λειτουργία - δηλαδή, γράφοντας μια εγγενή εφαρμογή iOS και ενσωματώνοντας έναν διερμηνέα Python χρησιμοποιώντας το libPython, και καλώντας κώδικα Python χρησιμοποιώντας το Python embedding API. Ο πλήρης διερμηνέας Python, η τυπική βιβλιοθήκη και όλος ο κώδικας Python σας συσκευάζονται στην συνέχεια ως αυτόνομο πακέτο που μπορεί να διανεμηθεί μέσω του iOS App Store.
Αν θέλετε να πειραματιστείτε για πρώτη φορά με τη σύνταξη μιας εφαρμογής iOS σε Python, έργα όπως BeeWare και Kivy θα σας προσφέρουν μια πολύ πιο προσιτή εμπειρία χρήστη. Αυτά τα έργα διαχειρίζονται τις πολυπλοκότητες που σχετίζονται με την εκτέλεση ενός έργου iOS, επομένως χρειάζεται να ασχοληθείτε μόνο με τον ίδιο τον κώδικα Python.
7.1. Python κατά τον χρόνο εκτέλεσης σε iOS¶
7.1.1. Συμβατότητα έκδοσης iOS¶
Η ελάχιστη υποστηριζόμενη έκδοση iOS καθορίζεται κατά τη στιγμή της μεταγλώττισης, χρησιμοποιώντας την επιλογή --host για τη ρύθμιση παραμέτρων. Από προεπιλογή, όταν μεταγλωττίζεται για iOS, η Python θα μεταγλωττίζεται με μια ελάχιστη υποστηριζόμενη έκδοση iOS 13.0. Για να χρησιμοποιήστε μια διαφορετική ελάχιστη έκδοση iOS, δώστε τον αριθμό έκδοσης ως μέρος του ορίσματος --host - για παράδειγμα, το --host=arm64-apple-ios15.4-simulator θα μεταγλωττίσει μια έκδοση προσομοιωτή ARM64 με στόχο ανάπτυξης 15.4.
7.1.2. Αναγνώριση πλατφόρμας¶
Κατά την εκτέλεση σε iOS, το sys.platform θα αναφέρεται ως ios. Αυτή η τιμή θα επιστραφεί σε ένα iPhone ή iPad, ανεξάρτητα από το αν η εφαρμογή εκτελείται στον προσομοιωτή ή σε μια φυσική συσκευή.
Πληροφορίες σχετικά με το συγκεκριμένο περιβάλλον εκτέλεσης, συμπεριλαμβανομένης της έκδοσης iOS, του μοντέλου συσκευής και του εάν η συσκευή είναι προσομοιωτής, μπορούν να ληφθούν χρησιμοποιώντας την platform.ios_ver(). Η platform.system() θα αναφέρει iOS ή iPadOS, ανάλογα με τη συσκευή.
Η os.uname() αναφέρει λεπτομέρειες σε επίπεδο πυρήνα∙ θα αναφέρει ένα όνομα Darwin.
7.1.3. Διαθεσιμότητα τυπικής βιβλιοθήκης¶
Η τυπική βιβλιοθήκη Python έχει κάποιες αξιοσημείωτες παραλείψεις και περιορισμούς στο iOS. Δείτε στον οδηγό διαθεσιμότητας API availability guide for iOS για λεπτομέρειες.
7.1.4. Δυαδικά modules επέκτασης¶
Μια αξιοσημείωτη διαφορά σχετικά με το iOS ως πλατφόρμα είναι ότι η διανομή του App Store επιβάλλει αυστηρές απαιτήσεις σχετικά με τη συσκευασία μιας εφαρμογής. Μία από αυτές τις απαιτήσεις διέπει τον τρόπο διανομής των δυαδικών modules επέκτασης.
Το iOS App Store απαιτεί από όλα τα δυαδικά modules σε μια εφαρμογή iOS να είναι δυναμικές βιβλιοθήκες, που να περιέχονται σε ένα πλαίσιο με κατάλληλα μεταδεδομένα, αποθηκευμένα στον φάκελο Frameworks της συσκευασμένης εφαρμογής. Μπορεί να υπάρχει μόνο ένα δυαδικό αρχείο ανά πλαίσιο, και δεν μπορεί να υπάρχει εκτελέσιμο υλικό εκτός του φακέλου Frameworks.
Αυτό έρχεται σε αντίθεση με τη συνήθη προσέγγιση Python για τη διανομή δυαδικών αρχείων, η οποία επιτρέπει τη φόρτωση μιας δυαδικής επέκτασης module από οποιαδήποτε τοποθεσία στο sys.path. Για να διασφαλιστεί η συμμόρφωση με τις πολιτικές του App Store, ένα ενεργό iOS πρέπει να επεξεργαστεί εκ των υστέρων τυχόν πακέτα Python, μετατρέποντας τις δυαδικές μονάδες .so σε μεμονωμένα αυτόνομα πλαίσια με κατάλληλα μεταδεδομένα και υπογραφή. Για λεπτομέρειες σχετικά με τον τρόπο εκτέλεσης αυτή της μετα-επεξεργασίας, ανατρέξτε στον οδηγό adding Python to your project.
Για να βοηθηθεί η Python στην ανακάλυψη δυαδικών αρχείων στη νέα τους θέση, το αρχικό αρχείο .so στο sys.path αντικαθίσταται με ένα αρχείο .fwork. Αυτό το αρχείο είναι ένα αρχείο κειμένου που περιέχει τη θέση του δυαδικού αρχείου του framework, σε σχέση με το app bundle. Για να επιτραπεί στο framework να επιστρέψει στην αρχική του θέση, το framework πρέπει να περιέχει ένα αρχείο .origin που περιέχει τη θέση του αρχείου .fwork, σε σχέση με το app bundle.
Για παράδειγμα, εξετάστε την περίπτωση μιας εντολής εισαγωγής from foo.bar import _whiz, όπου το _whiz υλοποιείται με το δυαδικό module sources/foo/bar/_whiz.abi3.so, με το sources να είναι η τοποθεσία που έχει καταχωρηθεί στο sys.path, σε σχέση με το bundle της εφαρμογής. Αυτό το module πρέπει να διανεμηθεί ως Frameworks/foo.bar._whiz.framework/foo.bar._whiz (δημιουργώντας το όνομα του framework από την πλήρη διαδρομή εισαγωγής του module), με ένα αρχείο Info.plist στον φάκελο .framework που να ταυτοποιεί το δυαδικό ως framework. Το module foo.bar._whiz θα εκπροσωπείται στην αρχική του τοποθεσία με ένα αρχείο δείκτη sources/foo/bar/_whiz.abi3.fwork, το οποίο περιέχει τη διαδρομή Frameworks/foo.bar._whiz/foo.bar._whiz. Το framework θα περιέχει επίσης το Frameworks/foo.bar._whiz.framework/foo.bar._whiz.origin, το οποίο περιέχει τη διαδρομή προς το αρχείο .fwork.
Κατά την εκτέλεση σε iOS, ο διερμηνέας της Python θα εγκαταστήσει μια AppleFrameworkLoader, η οποία μπορεί να διαβάζει και να εισάγει αρχεία .fwork. Μόλις εισαχθεί, το χαρακτηριστικό __file__ του δυαδικού module θα αναφέρει ως τοποθεσία το αρχείο .fwork. Ωστόσο, η ModuleSpec για το φορτωμένο module θα αναφέρει ως origin την τοποθεσία του δυαδικού αρχείου στον φάκελο του framework.
7.1.5. Δυαδικά αρχεία προσομοίωσης μεταγλωττιστή¶
Το Xcode δεν παρέχει άμεσα ξεχωριστούς μεταγλωττιστές για iOS· αντ’ αυτού, χρησιμοποιεί ένα script xcrun που επιλύει την πλήρη διαδρομή του μεταγλωττιστή (π.χ. xcrun --sdk iphoneos clang για να πάρετε τον clang για μια συσκευή iPhone). Ωστόσο, η χρήση αυτού του script δημιουργεί δύο προβλήματα:
Η έξοδος του
xcrunπεριλαμβάνει διαδρομές που εξαρτώνται από τη συγκεκριμένη μηχανή, με αποτέλεσμα ένα module sysconfig να μην μπορεί να κοινοποιηθεί μεταξύ διαφορετικών χρηστών· καιΑυτό έχει ως αποτέλεσμα οι ορισμοί των
CC/CPP/LD/ARνα περιλαμβάνουν κενά. Υπάρχουν πολλά εργαλεία στο οικοσύστημα της C που υποθέτουν ότι η εντολή μπορεί να χωριστεί στον πρώτο κενό χαρακτήρα ώστε να βρεθεί η διαδρομή προς το εκτελέσιμο του μεταγλωττιστή∙ κάτι που δεν ισχύει όταν χρησιμοποιείται τοxcrun.
Για να αποφευχθούν αυτά τα προβλήματα, η Python παρέχει stubs για αυτά τα εργαλεία. Αυτά τα stubs είναι wrapper scripts κελύφους που τυλίγουν τα υποκείμενα εργαλεία του xcrun, και διανέμονται σε έναν φάκελο bin μαζί με το μεταγλωττισμένο iOS framework. Αυτά τα scripts μπορούν να προσαρμοστούν σε διαφορετικές τοποθεσίες, και πάντα θα δείχνουν στις σωστές τοπικές διαδρομές του συστήματος. Συμπεριλαμβάνοντας αυτά τα scripts στο φάκελο bin που συνοδεύει ένα framework, το περιεχόμενο του module sysconfig γίνεται χρήσιμο για τους τελικούς χρήστες, ώστε να μπορούν να μεταγλωττίζουν τα δικά τους modules. Όταν μεταγλωττίζετε τρίτα modules Python για iOS, πρέπει να βεβαιωθείτε ότι αυτά τα stub binaries είναι στο path σας.
7.2. Εγκατάσταση της Python σε iOS¶
7.2.1. Εργαλεία για την κατασκευή εφαρμογών iOS¶
Η κατασκευή εφαρμογών για iOS απαιτεί τη χρήση των εργαλείων Xcode της Apple.Συνιστάται έντονα να χρησιμοποιείτε την πιο πρόσφατη σταθερή έκδοση του Xcode. Αυτό θα απαιτήσει να έχετε την πιο πρόσφατη (ή τη δεύτερη πιο πρόσφατη) έκδοση του macOS, καθώς η Apple δεν υποστηρίζει παλαιότερες εκδόσεις macOS με νέες εκδόσεις Xcode. Τα εργαλεία γραμμής εντολών Xcode δεν επαρκούν για ανάπτυξη iOS∙ χρειάζεται μια πλήρης εγκατάσταση του Xcode.
Αν θέλετε να τρέξετε τον κώδικά σας στον προσομοιωτή iOS, θα χρειαστεί επίσης να εγκαταστήσετε μια Πλατφόρμα Προσομοίωσης iOS. Κατά την πρώτη εκκίνηση του Xcode, θα σας ζητηθεί να επιλέξετε μια Πλατφόρμα Προσομοίωσης iOS. Εναλλακτικά, μπορείτε να προσθέσετε μια Πλατφόρμα προσομοίωσηςiOS επιλέγοντας την από την καρτέλα Platforms στο πάνελ ρυθμίσεων του Xcode.
7.2.2. Προσθήκη Python σε ένα έργο iOS¶
Η Python μπορεί να προστεθεί σε οποιοδήποτε έργο iOS, χρησιμοποιώντας είτε Swift είτε Objective C. Τα ακόλουθα παραδείγματα θα χρησιμοποιήσουν Objective C∙ εάν χρησιμοποιείτε Swift, μπορεί να σας φανεί χρήσιμη μια βιβλιοθήκη όπως το PythonKit .
Για να προσθέσετε Python σε ένα έργο iOS Xcode:
Δημιουργήστε ή αποκτήστε ένα Python
XCFramework. Δείτε τις οδηγίες στο iOS/README.rst (στη διανομή πηγαίου κώδικα CPython) για λεπτομέρειες σχετικά με τον τρόπο δημιουργίας ενός PythonXCFramework. Κατ” ελάχιστον, θα χρειαστείτε μια έκδοση που υποστηρίζει τοarm64-apple-ios, καθώς και ένα από ταarm64-apple-ios-simulatorήx86_64-apple-ios-simulator.Μεταφέρετε το
XCframeworkστο iOS έργο σας. Στις ακόλουθες οδηγίες, θα υποθέσουμε ότι έχετε αποθέσει τοXCframeworkστη ρίζα του έργου σας ωστόσο, μπορείτε να χρησιμοποιήσετε οποιαδήποτε άλλη τοποθεσία θέλετε προσαρμόζοντας τις διαδρομές όπως απαιτείται.Προσθέστε τον κώδικα της εφαρμογής σας ως φάκελο στο έργο σας στο Xcode. Στις παρακάτω οδηγίες, θα υποθέσουμε ότι ο κώδικας του χρήστη βρίσκεται σε έναν φάκελο με όνομα
appστη ριζική τοποθεσία του έργου σας· μπορείτε να χρησιμοποιήσετε οποιαδήποτε άλλη τοποθεσία, προσαρμόζοντας αναλόγως τις διαδρομές. Βεβαιωθείτε ότι αυτός ο φάκελος έχει συσχετιστεί με τον στόχο (target) της εφαρμογής σας.Επιλέξτε τον στόχο της εφαρμογής επιλέγοντας τον ριζικό κόμβο του έργου σας στο Xcode και στη συνέχεια το όνομα του στόχου στην πλαϊνή στήλη που εμφανίζεται.
Στις ρυθμίσεις «General» , κάτω από «Frameworks, Libraries and Embedded Content», προσθέστε το
Python.xcframework, με επιλεγμένη την επιλογή «Embed & Sign»Στην καρτέλα «Build Settings» , τροποποιήστε τα εξής
Build Options
User Script Sandboxing: No
Enable Testability: Yes
Search Paths
Framework Search Paths:
$(PROJECT_DIR)Header Search Paths:
"$(BUILT_PRODUCTS_DIR)/Python.framework/Headers"
Apple Clang - Warnings - All languages
Quoted Include In Framework Header: No
Προσθέστε ένα βήμα κατασκευής που αντιγράφει τη βασική βιβλιοθήκη Python στην εφαρμογή σας. Στην καρτέλα «Build Phases», προσθέστε ένα νέο βήμα κατασκευής «Run Script» πριν από το βήμα «Embed Frameworks», αλλά μετά το βήμα «Copy Bundle Resources». Ονομάστε το βήμα «Install Target Specific Python Standard Library», απενεργοποιήστε το πλαίσιο επιλογής «Based on dependency analysis» και ορίστε το περιεχόμενο του script ως εξής:
set -e source $PROJECT_DIR/Python.xcframework/build/build_utils.sh install_python Python.xcframework app
Εάν έχετε τοποθετήσει το XCframework κάπου αλλού εκτός από τη ρίζα του έργου σας, τροποποιήστε τη διαδρομή στο πρώτο όρισμα.
Προσθέστε κώδικα Objective C για να αρχικοποιήσετε και να χρησιμοποιήσετε έναν διερμηνέα Python σε ενσωματωμένη λειτουργία. Θα πρέπει να βεβαιωθείτε ότι:
Η λειτουργία UTF-8 (
PyPreConfig.utf8_mode) είναι ενεργοποιημένη ∙Το Buffered stdio (
PyConfig.buffered_stdio) είναι απενεργοποιημένο ∙Η εγγραφή bytecode (
PyConfig.write_bytecode) είναι απενεργοποιημένη ∙Οι χειριστές σημάτων (
PyConfig.install_signal_handlers) είναι ενεργοποιημένοι ∙Η καταγραφή συστήματος (
PyConfig.use_system_logger) είναι ενεργοποιημένη (προαιρετική, αλλά συνίσταται ανεπιφύλακτα∙ είναι ενεργοποιημένη από προεπιλογή)∙Το
PYTHONHOMEγια τον διερμηνέα έχει ρυθμιστεί ώστε να δείχνει στον υποφάκελοpythonτης δέσμης της εφαρμογής σας∙ καιΤο
PYTHONPATHγια τον διερμηνέα περιλαμβάνει:τον υποφάκελο
python/lib/python3.Xτης δέσμης της εφαρμογής σας,τον υποφάκελο
python/lib/python3.X/lib-dynloadτης δέσμης της εφαρμογής σας, καιτον υποφάκελο
appτης δέσμης της εφαρμογής σας
Η τοποθεσία της εφαρμογής σας στο πακέτο μπορεί να προσδιοριστεί χρησιμοποιώντας την εντολή
[[NSBundle mainBundle] resourcePath].
Τα βήματα 7 και 8 αυτών των οδηγιών υποθέτουν ότι έχετε έναν μόνο φάκελο με καθαρό κώδικα εφαρμογής Python, με όνομα app. Εάν έχετε δυαδικά modules τρίτων στην εφαρμογή σας, θα απαιτηθούν επιπλέον βήματα:
Πρέπει να βεβαιωθείτε ότι τυχόν φάκελοι που περιέχουν δυαδικά αρχεία τρίτων είναι είτε συσχετισμένοι με τον στόχο της εφαρμογής είτε αντιγραμμένοι ως μέρος του βήματος 7. Το βήμα 7 θα πρέπει επίσης να καθαρίσει τυχόν δυαδικά αρχεία που δεν είναι κατάλληλα για την πλατφόρμα στην οποία στοχεύει μια συγκεκριμένη έκδοση (δηλαδή, να διαγράψει τυχόν δυαδικά αρχεία συσκευής εάν δημιουργείτε μια εφαρμογή που στοχεύει τον προσομοιωτή).
Εάν χρησιμοποιείτε ξεχωριστό φάκελο για πακέτα τρίτων, βεβαιωθείτε ότι ο φάκελος προστίθεται στο τέλος της κλήσης προς το
install_pythonστο βήμα 7, και ως μέρος της διαμόρφωσηςPYTHONPATHστο βήμα 8.Εάν οποιοιδήποτε από τους φακέλους που περιέχουν πακέτα τρίτων θα περιέχουν αρχεία
.pth, θα πρέπει να προσθέσετε αυτόν τον φάκελο ως site directory (χρησιμοποιώντας τηsite.addsitedir()), αντί να τον προσθέσετε απευθείας στοPYTHONPATHή στοsys.path.
7.2.3. Δοκιμή ενός πακέτου Python¶
Το δένδρο πηγαίου κώδικα της CPython περιέχει το a testbed project που χρησιμοποιείται για την εκτέλεση της σουίτας δοκιμών CPython στον προσομοιωτή iOS. Αυτό το δοκιμαστικό πλαίσιο μπορεί επίσης να χρησιμοποιηθεί ως έργο δοκιμαστικής πλατφόρμας για την εκτέλεση της σουίτας δοκιμών της βιβλιοθήκης Python σε iOS.
Αφού δημιουργήσετε ή αποκτήσετε ένα iOS XCFramework (δείτε το iOS/README.rst για λεπτομέρειες), δημιουργήστε ένα κλώνο του έργου δοκιμαστικής πλατφόρμας Python iOS. Εάν χρησιμοποιήσατε το script κατασκευής Apple για να δημιουργήσετε το XCframework, μπορείτε να εκτελέσετε:
$ python cross-build/iOS/testbed clone --app <path/to/module1> --app <path/to/module2> app-testbed
Ή, εάν έχετε δημιουργήσει το δικό σας XCframework, εκτελώντας:
$ python Apple/testbed clone --platform iOS --framework <path/to/Python.xcframework> --app <path/to/module1> --app <path/to/module2> app-testbed
Οποιοιδήποτε φάκελοι καθοριστούν με το flag --app θα αντιγραφούν στο κλωνοποιημένο έργο testbed. Το τελικό testbed θα δημιουργηθεί στον φάκελο app-testbed. Σε αυτό το παράδειγμα, τα module1 και module2 θα είναι module που μπορούν να εισαχθούν κατά τον χρόνο εκτέλεσης. Αν το έργο σας έχει επιπλέον εξαρτήσεις μπορείτε να τις εγκαταστήσετε στον φάκελο app-testbed/Testbed/app_packages (χρησιμοποιώντας το pip install --target app-testbed/Testbed/app_packages ή παρόμοια εντολή).
Μπορείτε στη συνέχεια να χρησιμοποιήσετε το φάκελο app-testbed για να εκτελέσετε τη σουίτα δοκιμών για την εφαρμογή σας. Για παράδειγμα, εάν το module1.tests ήταν το σημείο εισόδου για τη σουίτα δοκιμών σας, θα μπορούσατε να εκτελέσετε:
$ python app-testbed run -- module1.tests
Αυτό ισοδυναμεί με την εκτέλεση της εντολής python -m module1.tests σε μια έκδοση Python για επιτραπέζιους υπολογιστές. Οποιαδήποτε ορίσματα μετά το -- θα περαστούν στο testbed σαν να ήταν ορίσματα στην εντολή python -m σε έναν επιτραπέζιο υπολογιστή.
Μπορείτε επίσης να ανοίξετε το έργο δοκιμαστικής πλατφόρμας στο Xcode εκτελώντας:
$ open app-testbed/iOSTestbed.xcodeproj
Αυτό θα σας επιτρέψει να χρησιμοποιήσετε την πλήρη σουίτα εργαλείων Xcode για τον εντοπισμό σφαλμάτων.
Τα ορίσματα που χρησιμοποιούνται για την εκτέλεση της σουίτας δοκιμών ορίζονται ως μέρος του σχεδίου δοκιμών. Για να τροποποιήσετε το σχέδιο δοκιμών, επιλέξτε τον κόμβο του σχεδίου δοκιμών στο δέντρο του έργου (θα πρέπει να είναι το πρώτο παιδί του ριζικού κόμβου) και επιλέξτε την καρτέλα «Configurations». Τροποποιήστε την τιμή «Arguments Passed On Launch» για να αλλάξετε τα ορίσματα δοκιμής.
Το σχέδιο δοκιμών απενεργοποιεί επίσης τις παράλληλες δοκιμές και καθορίζει τη χρήση του αρχείου Testbed.lldbinit για την παροχή διαμόρφωσης του αποσφαλματωτή. Η προεπιλεγμένη διαμόρφωση του αποσφαλματωτή απενεργοποιεί τους αυτόματους σημερινούς σταθμούς (breakpoints) στα σήματα SIGINT, SIGUSR1, SIGUSR2, και SIGXFSZ.
7.3. Συμμόρφωση με το App Store¶
Ο μόνος μηχανισμός για τη διανομή εφαρμογών σε τρίτες συσκευές iOS είναι η υποβολή της εφαρμογής στο iOS App Store∙ οι εφαρμογές που υποβάλλονται για διανομή πρέπει να περάσουν τη διαδικασία αξιολόγησης εφαρμογών της Apple. Αυτή η διαδικασία περιλαμβάνει ένα σύνολο αυτοματοποιημένων κανόνων επικύρωσης που ελέγχουν τη δέσμη της υποβληθείσας εφαρμογής για προβληματικό κώδικα. Υπάρχουν ορισμένα βήματα που πρέπει να ληφθούν για να διασφαλιστεί ότι η εφαρμογή σας θα μπορεί να περάσει αυτά τα βήματα επικύρωσης.
7.3.1. Κώδικας ασύμβατος με την τυπική βιβλιοθήκη¶
Η τυπική βιβλιοθήκη Python περιέχει κώδικα που είναι γνωστό ότι παραβιάζει αυτούς τους αυτοματοποιημένους κανόνες. Ενώ αυτές οι παραβιάσεις φαίνεται να είναι ψευδώς θετικές, οι κανόνες αξιολόγησης της Apple δεν μπορούν να αμφισβητηθούν∙ επομένως, είναι απαραίτητο να τροποποιήσετε την τυπική βιβλιοθήκη Python για να περάσει μια εφαρμογή την αξιολόγηση του App Store.
Το δένδρο πηγαίου κώδικα της Python περιέχει a patch file που θα αφαιρέσει όλον τον κώδικα που είναι γνωστό ότι προκαλεί προβλήματα με τη διαδικασία αξιολόγησης του App Store. Αυτό το patch εφαρμόζεται αυτόματα κατά την κατασκευή για iOS.
7.3.2. Δηλώσεις απορρήτου¶
Τον Απρίλιο του 2025, η Apple εισήγαγε μια απαίτηση για ορισμένες βιβλιοθήκες τρίτων κατασκευαστών να παρέχουν μια Δήλωση Απορρήτου. Ως αποτέλεσμα, εάν έχετε ένα δυαδικό module που χρησιμοποιεί μία από τις επηρεαζόμενες βιβλιοθήκες, πρέπει να παρέχετε ένα αρχείο .xcprivacy για αυτήν τη βιβλιοθήκη. Το OpenSSL είναι μία βιβλιοθήκη που επηρεάζεται από αυτήν την απαίτηση, αλλά υπάρχουν και άλλες.
Εάν παράγετε ένα δυαδικό module με το όνομα mymodule.so, και χρησιμοποιήσετε το script κατασκευής Xcode που περιγράφεται στο βήμα 8 παραπάνω, μπορείτε να τοποθετήσετε ένα αρχείο mymodule.xcprivacy δίπλα στο mymodule.so, και η δήλωση απορρήτου θα εγκατασταθεί στην απαιτούμενη τοποθεσία όταν το δυαδικό module μετατραπεί σε framework.