Η δημοσίευση μιας .NET MAUI εφαρμογής σε App Store και Google Play το 2026 απαιτεί τέσσερα βασικά βήματα: ρύθμιση code signing (Apple Developer profile και Android keystore), δημιουργία release build με dotnet publish για κάθε πλατφόρμα, υποβολή του .ipa στο App Store Connect μέσω Transporter, και τέλος upload του Android App Bundle (.aab) στο Google Play Console. Σε αυτόν τον οδηγό περπατάμε ολόκληρη τη διαδικασία deployment .NET MAUI για iOS και Android, με τις απαιτήσεις του 2026 (privacy manifests, target API level 35, App Tracking Transparency) και ένα πλήρες CI/CD pipeline σε GitHub Actions. Στο πιο πρόσφατο project που έστησα, χάσαμε σχεδόν μία εβδομάδα σε rejections επειδή αγνοήσαμε δύο μικρές λεπτομέρειες· γι' αυτό θα τις δούμε αναλυτικά.
Η Apple απαιτεί υποχρεωτικά privacy manifest (PrivacyInfo.xcprivacy) και ορθές δηλώσεις για required reason APIs από την 1η Μαΐου 2024 και μετά. Χωρίς αυτό, η υποβολή απορρίπτεται αυτόματα.
Το Google Play απαιτεί target API level 35 (Android 15) για νέες εφαρμογές και ενημερώσεις από τον Αύγουστο 2025, καθώς και υποβολή αποκλειστικά σε μορφή Android App Bundle (.aab).
Για iOS χρειάζεσαι Apple Developer Program ($99/έτος), provisioning profile τύπου App Store και distribution certificate. Για Android, ένα upload keystore και ενεργοποιημένο Play App Signing.
Το dotnet publish -f net9.0-ios -c Release παράγει .ipa, ενώ το dotnet publish -f net9.0-android -c Release -p:AndroidPackageFormat=aab παράγει .aab έτοιμο για υποβολή.
Με ένα CI/CD pipeline σε GitHub Actions ή Azure DevOps μπορείς να αυτοματοποιήσεις signing, build και upload σε TestFlight και Google Play Internal Testing με κάθε push σε main.
Προαπαιτούμενα για δημοσίευση το 2026
Πριν ξεκινήσεις τη διαδικασία deployment, χρειάζεσαι έναν συγκεκριμένο συνδυασμό λογαριασμών, εργαλείων και ρυθμίσεων. Στην πράξη, η λίστα δεν έχει αλλάξει δραματικά από το 2024. Όμως οι απαιτήσεις target API και τα privacy manifests κάνουν τη ζωή πιο δύσκολη σε όσους αμελούν την προετοιμασία.
Apple Developer Program: $99/έτος, με ενεργοποιημένο τον λογαριασμό σου στο App Store Connect.
Google Play Console: $25 εφάπαξ τέλος. Από το 2024 απαιτείται επιπλέον επαλήθευση ταυτότητας (D-U-N-S ή προσωπικό ID), και η νέα εφαρμογή σου χρειάζεται 20 closed testers για 14 ημέρες πριν το production rollout.
Mac με Xcode 16+ για iOS builds. Ακόμη και όταν χρησιμοποιείς Visual Studio σε Windows, χρειάζεσαι remote pair Mac για signing.
.NET 9 SDK με workloads maui, ios, android εγκατεστημένα μέσω dotnet workload install maui. Πάντα καλό να ελέγξεις την επίσημη τεκμηρίωση .NET MAUI της Microsoft για τις τρέχουσες εκδόσεις.
App icon και splash στις σωστές αναλύσεις, screenshots σε όλες τις απαιτούμενες συσκευές (iPhone 6.9", iPhone 6.5", iPad Pro 12.9", Android phone/tablet) και πλήρης περιγραφή στα ελληνικά για την ελληνική αγορά.
Code signing και provisioning για iOS
Το iOS code signing παραμένει ένα από τα πιο μπερδεμένα κομμάτια του deployment. Στην ουσία, χρειάζεσαι τρία πράγματα: ένα Distribution Certificate στο Keychain σου, ένα App ID καταχωρημένο στο Apple Developer portal, και ένα Provisioning Profile τύπου "App Store" που τα συνδέει.
Στο .NET MAUI, ορίζεις ποιο profile και ποιο certificate θα χρησιμοποιηθεί απευθείας στο .csproj ή στο publish command:
<PropertyGroup Condition="'$(Configuration)' == 'Release' and $(TargetFramework.Contains('-ios'))">
<RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
<CodesignKey>Apple Distribution: Your Company (TEAMID)</CodesignKey>
<CodesignProvision>MyMauiApp AppStore Profile</CodesignProvision>
<CodesignEntitlements>Platforms/iOS/Entitlements.plist</CodesignEntitlements>
<ArchiveOnBuild>true</ArchiveOnBuild>
</PropertyGroup>
Το CodesignProvision πρέπει να ταιριάζει ακριβώς με το Name του profile, όχι το UUID. (Σ' αυτό το σημείο έχω χάσει αρκετές ώρες σε προηγούμενα projects.) Αν δουλεύεις σε CI, κατέβασε το .mobileprovision και τοποθέτησέ το στο ~/Library/MobileDevice/Provisioning Profiles/ πριν τρέξεις build. Για το certificate, χρησιμοποίησε το Apple-Actions/import-codesign-certs action, που εισάγει αυτόματα .p12 αρχείο στο runner keychain.
Keystore και Play App Signing για Android
Για Android χρειάζεσαι ένα upload keystore που υπογράφει τοπικά το .aab πριν το ανεβάσεις στο Play Console. Το Google αναλαμβάνει την υπογραφή για διανομή (Play App Signing), κρατώντας ένα ξεχωριστό app signing key. Αυτό σημαίνει ότι αν χάσεις το upload keystore, μπορείς να αιτηθείς reset· δεν χάνεις την εφαρμογή σου, σε αντίθεση με παλιότερες εποχές.
Μη βάλεις ποτέ τα passwords σε commit. Πέρνα τα σαν environment variables στο CI ή χρησιμοποίησε dotnet user-secrets τοπικά. Για περισσότερα μοτίβα ασφαλείας στο .NET MAUI, δες τον οδηγό μας για ασφάλεια εφαρμογών .NET MAUI με SecureStorage και OAuth.
Πώς να φτιάξεις το .ipa αρχείο για App Store
Με ρυθμισμένο code signing, η δημιουργία ενός υπογεγραμμένου .ipa είναι μία εντολή. Από Mac terminal, μέσα στον φάκελο του project:
Το Google Play δεν δέχεται πλέον .apk για νέες εφαρμογές. Μόνο Android App Bundle (.aab). Η διαφορά είναι ότι το AAB περιέχει όλα τα assets, locales και ABI splits, και το Google παράγει βελτιστοποιημένα APK για κάθε συσκευή στο install time. Αυτό μειώνει το μέγεθος εγκατάστασης κατά 30–50% σε σύγκριση με universal APK. Αρκετά καλό deal, αν θες τη γνώμη μου.
Στο ./artifacts/android θα βρεις το com.acme.mymauiapp-Signed.aab. Πριν το ανεβάσεις, επιβεβαίωσε με bundletool ότι το AAB είναι έγκυρο και τρέχει σωστά σε device με bundletool build-apks --bundle=app.aab --output=app.apks.
Από την 1η Μαΐου 2024 και μετά, η Apple απαιτεί privacy manifest (PrivacyInfo.xcprivacy) για κάθε νέα ή ενημερωμένη εφαρμογή. Αν η εφαρμογή σου ή κάποιο SDK που χρησιμοποιείς (π.χ. Firebase, Sentry, ή τρίτων NuGet packages) καλεί ένα από τα required reason APIs, όπως UserDefaults ή FileManager.creationDate, πρέπει να δηλώσεις τον λόγο. Όλη η λίστα υπάρχει στην επίσημη τεκμηρίωση Apple για privacy manifests.
Δημιούργησε το αρχείο στο Platforms/iOS/PrivacyInfo.xcprivacy:
Αν εμφανίζεις διαφημίσεις ή κάνεις cross-app tracking, χρειάζεσαι App Tracking Transparency (ATT). Στο .NET MAUI χρησιμοποίησε το AppTrackingTransparency bindings ή το Plugin.MauiAppTracking. Πρόσθεσε επίσης NSUserTrackingUsageDescription στο Info.plist· χωρίς αυτό, η app crashάρει όταν καλέσεις το prompt. (Αυτό ακριβώς το bug με έπιασε σε μία υποβολή πέρυσι· hard-fail στο App Review και άμεσο rejection.)
TestFlight και Google Play Internal Testing
Μη ανεβάσεις ποτέ απευθείας σε production. Και οι δύο πλατφόρμες προσφέρουν beta channels που σου επιτρέπουν να δοκιμάσεις την υποβολή πριν τη ζωντανή κυκλοφορία.
TestFlight (Apple)
Όταν ανεβάσεις ένα build στο App Store Connect, εμφανίζεται αυτόματα στο TestFlight μετά την επεξεργασία (συνήθως 10–30 λεπτά). Μπορείς να καλέσεις έως 100 internal testers (μέλη του Apple Developer team) και έως 10.000 external testers μέσω public link. Τα external builds απαιτούν beta App Review, συνήθως 24 ώρες.
Google Play Internal Testing
Στο Play Console, δημιούργησε ένα Internal testing track και πρόσθεσε emails ή Google Groups. Σε αντίθεση με το TestFlight, η διανομή είναι σχεδόν άμεση. Νέο για το 2024+: για νέους personal developer accounts απαιτούνται 20 testers για 14 ημέρες πριν προωθήσεις την εφαρμογή σε production. Σχεδίασε το roadmap σου ανάλογα.
CI/CD με GitHub Actions
Ένα πλήρες pipeline σε GitHub Actions αυτοματοποιεί κάθε βήμα: checkout, restore, build, signing, upload. Παράδειγμα workflow για iOS:
Για Android, το ισοδύναμο pipeline τρέχει σε ubuntu-latest, υπογράφει με AndroidKeyStore properties από secrets, και ανεβάζει με r0adkll/upload-google-play στο internal track. Επειδή τα Release builds του .NET MAUI ενεργοποιούν βελτιστοποιήσεις απόδοσης όπως compiled bindings και NativeAOT, αναμένουμε build times γύρω στα 8–15 λεπτά ανά πλατφόρμα σε GitHub-hosted runners.
Συχνοί λόγοι απόρριψης και πώς να τους αποφύγεις
Σύμφωνα με δεδομένα από το App Store Connect του 2025, πάνω από το 40% των απορρίψεων αφορά τους ίδιους πέντε λόγους. Έλεγξέ τους πριν υποβάλεις:
Λόγος απόρριψης
Apple App Store
Google Play
Λείπει privacy manifest / Data Safety form
Συχνότατο (Guideline 5.1.2)
Συχνό (Data Safety section)
Crash στο launch
Πολύ συχνό (Guideline 2.1)
Συχνό (pre-launch report)
Λανθασμένο target API/SDK
iOS 17 SDK minimum από Απρίλιος 2025
Target API 35 απαιτητικό
Demo account λείπει
Συχνό για apps με login
Σπάνιο
Παραπλανητικά screenshots/metadata
Guideline 2.3
Policy: Misrepresentation
ATT prompt χωρίς usage description
Crash στο review
Δεν ισχύει
Δοκίμασε πάντα την έκδοση σε φυσική συσκευή που δεν είναι το dev machine σου, γιατί πολλά crashes εμφανίζονται μόνο όταν τρέχει χωρίς attached debugger. Για apps με authentication, πρόσθεσε demo credentials στο πεδίο "App Review Information" του App Store Connect. Πίστεψέ με, ένα reject επειδή ο reviewer δεν μπόρεσε να μπει στην εφαρμογή σου είναι από τα πιο εκνευριστικά.
Συχνές ερωτήσεις
Πώς δημοσιεύω μια .NET MAUI εφαρμογή στο App Store;
Χρειάζεσαι Apple Developer Program λογαριασμό, distribution certificate, App Store provisioning profile και ένα Mac με Xcode 16+. Τρέξε dotnet publish -f net9.0-ios -c Release -p:ArchiveOnBuild=true για να φτιάξεις υπογεγραμμένο .ipa και ανέβασέ το στο App Store Connect μέσω Transporter ή iTMSTransporter.
Υποστηρίζει το .NET MAUI Android App Bundle (.aab);
Ναι, πλήρως. Πέρνα -p:AndroidPackageFormat=aab στο dotnet publish και το MAUI παράγει υπογεγραμμένο .aab έτοιμο για υποβολή στο Google Play. Από το 2021 το Google Play δέχεται μόνο AAB για νέες εφαρμογές.
Ποια είναι η διαφορά μεταξύ APK και AAB;
Το .apk είναι το παραδοσιακό Android πακέτο εγκατάστασης και περιέχει όλα τα assets για κάθε αρχιτεκτονική. Το .aab (Android App Bundle) είναι format υποβολής που περιέχει όλα τα assets, αλλά το Google δημιουργεί custom APK για κάθε συσκευή, μειώνοντας το μέγεθος εγκατάστασης κατά 30–50%.
Χρειάζομαι Mac για να δημοσιεύσω .NET MAUI iOS app;
Πρακτικά ναι. Η Apple απαιτεί υπογραφή και archiving μέσω εργαλείων που τρέχουν μόνο σε macOS. Μπορείς να αναπτύσσεις σε Windows με Visual Studio και Pair-to-Mac, ή να χρησιμοποιείς macOS GitHub Actions runners σε CI χωρίς να έχεις φυσικό Mac.
Πόσο διαρκεί η διαδικασία App Review;
Το 2026, το 90% των iOS υποβολών εγκρίνονται εντός 24 ωρών. Το Google Play για νέες εφαρμογές χρειάζεται 3–7 ημέρες, ενώ updates συνήθως εγκρίνονται σε λίγες ώρες. Νέοι personal accounts στο Google Play απαιτούν επιπλέον 14 ημέρες closed testing με 20 testers πριν το production rollout.