[{"data":1,"prerenderedAt":2396},["ShallowReactive",2],{"\u002Fblog\u002Fios-27-sdk-requirement-april-2027-xcode-27-flutter\u002F":3,"\u002Fblog\u002Fios-27-sdk-requirement-april-2027-xcode-27-flutter\u002F-related":478,"\u002Fblog\u002Fios-27-sdk-requirement-april-2027-xcode-27-flutter\u002F-resources":2382},{"id":4,"title":5,"author":6,"body":10,"category":399,"createdAt":400,"description":401,"disclosure":402,"extension":403,"faq":404,"howTo":402,"lastVerified":402,"location":420,"meta":421,"navigation":427,"ogImage":402,"path":428,"primaryKeyword":429,"readingTime":430,"related":431,"seo":435,"sources":436,"stem":468,"tags":469,"takeaways":470,"updatedAt":400,"url":476,"__hash__":477},"blog\u002Fblog\u002Fios-27-sdk-requirement-april-2027-xcode-27-flutter.md","iOS 27 SDK Required April 2027: Xcode 27 Checklist",{"name":7,"social":8},"Simon Dziak",{"twitter":9},"@SzymonDziak",{"type":11,"value":12,"toc":382},"minimark",[13,21,24,30,35,155,164,168,171,174,179,182,194,198,201,209,213,216,238,245,249,252,263,275,279,282,286,289,292,295,299,302,356,359,366,370],[14,15,16,20],"p",{},[17,18,19],"strong",{},"Apple says that starting April 2027, iOS and iPadOS apps uploaded to App Store Connect must be built with the iOS 27 and iPadOS 27 SDK or later, which means building with Xcode 27."," Apple gives the month, not a day, and the same month brings a second requirement: iPhone Duo screenshots. For a Flutter app, the work is a newer build machine, the UIScene migration, and a test build before the deadline.",[14,22,23],{},"I checked each one on October 19, 2026. The facts below come from Apple's developer news, help and system requirements pages, and from Flutter's docs, as shown in the sources. Apple can change a date, so open the linked page before you plan around it.",[14,25,26,29],{},[17,27,28],{},"Disclosure:"," App369 is my studio. I build and fix Flutter and Firebase apps, and the last section mentions what I sell. Apple and Google don't pay me for anything on this page.",[31,32,34],"h2",{"id":33},"the-dated-timeline","The dated timeline",[36,37,38,54],"table",{},[39,40,41],"thead",{},[42,43,44,48,51],"tr",{},[45,46,47],"th",{},"Date",[45,49,50],{},"What happens",[45,52,53],{},"Source",[55,56,57,75,90,104,117,132],"tbody",{},[42,58,59,63,66],{},[60,61,62],"td",{},"September 9, 2026",[60,64,65],{},"Apple announces: \"Starting April 2027, apps and games uploaded to App Store Connect need to meet the following minimum requirements\" and lists the iOS 27 and iPadOS 27 SDK",[60,67,68],{},[69,70,74],"a",{"href":71,"rel":72},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002F?id=k1mtkt1k",[73],"nofollow","Apple news",[42,76,77,80,83],{},[60,78,79],{},"September 14, 2026",[60,81,82],{},"Xcode 27 released. Xcode 27.1 followed on October 15, 2026",[60,84,85],{},[69,86,89],{"href":87,"rel":88},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002Freleases\u002F",[73],"Apple releases",[42,91,92,95,98],{},[60,93,94],{},"October 5, 2026",[60,96,97],{},"Apple: \"Starting April 2027, any apps or games submitted will need to include screenshots for iPhone Duo.\"",[60,99,100],{},[69,101,74],{"href":102,"rel":103},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002F?id=kkphp5qo",[73],[42,105,106,109,112],{},[60,107,108],{},"October 23, 2026",[60,110,111],{},"iPhone Duo available to customers, per Apple",[60,113,114],{},[69,115,74],{"href":102,"rel":116},[73],[42,118,119,122,125],{},[60,120,121],{},"December 2, 2026",[60,123,124],{},"The CocoaPods registry becomes read-only, per Flutter's docs",[60,126,127],{},[69,128,131],{"href":129,"rel":130},"https:\u002F\u002Fdocs.flutter.dev\u002Fpackages-and-plugins\u002Fswift-package-manager\u002Ffor-app-developers",[73],"Flutter docs",[42,133,134,139,144],{},[60,135,136],{},[17,137,138],{},"April 2027",[60,140,141],{},[17,142,143],{},"iOS and iPadOS uploads must be built with the iOS 27 SDK or later. Submissions need iPhone Duo screenshots. No day is given",[60,145,146,150,151],{},[69,147,149],{"href":71,"rel":148},[73],"Apple news, SDK",", ",[69,152,154],{"href":102,"rel":153},[73],"Apple news, Duo",[14,156,157,158,163],{},"The requirement is not on Apple's ",[69,159,162],{"href":160,"rel":161},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002Fupcoming-requirements\u002F",[73],"upcoming requirements page"," yet. That page still lists the 2026 rule: since April 28, 2026, uploads must be built with Xcode 26 or later using an SDK for iOS 26. Because Apple gives the month, not a day, I treat April 1 as the working deadline.",[31,165,167],{"id":166},"what-the-rule-says-and-what-it-doesnt","What the rule says, and what it doesn't",[14,169,170],{},"Apple's September post lists the minimums for each platform. For iOS and iPadOS: \"iOS and iPadOS apps must be built with the iOS 27 & iPadOS 27 SDK or later.\" The tvOS, visionOS and watchOS lines say the same for their 27 SDKs.",[14,172,173],{},"Apple's submitting page adds a deployment target to the iOS line: built with the 27 SDK or later, \"and target iOS 15 or later.\" The news post I read doesn't include that clause. I'm quoting both because they differ, and the submitting page is the more specific one.",[175,176,178],"h3",{"id":177},"building-with-the-ios-27-sdk-does-not-drop-older-ios-versions","Building with the iOS 27 SDK does not drop older iOS versions",[14,180,181],{},"The SDK is what you compile against. The deployment target is the oldest iOS your app runs on. Apple's system requirements page lists Xcode 27's deployment targets as iOS 15 to 27, so one Xcode 27 build can still run on every iOS version from 15 up. The only floor is iOS 15. Apple's pages currently disagree on the floor. Its submitting page says \"target iOS 15 or later\" from April 2027, while the upcoming requirements page still says, since September 9, 2026, that uploads \"must target iOS 13 or later.\" Xcode 27 lists iOS 15 to 27 only, so if your project targets iOS 13 or 14, plan to raise it to iOS 15 before April.",[14,183,184,185,189,190,193],{},"My advice: after you switch to Xcode 27, check ",[186,187,188],"code",{},"IPHONEOS_DEPLOYMENT_TARGET"," in the Runner target and in ",[186,191,192],{},"ios\u002FPodfile",". Don't raise it past what your users need. Plugins may ask for more than iOS 15, and Flutter's Swift Package Manager page shows the error you get when a plugin requires a higher platform version than your app.",[31,195,197],{"id":196},"what-happens-if-you-upload-with-an-older-sdk","What happens if you upload with an older SDK",[14,199,200],{},"I found no Apple page that publishes the 2027 error text. The 2026 version of the same rule produces ITMS-90725, \"SDK version issue\", and it is reasonable to expect the 2027 rule to come back the same way, but that is my inference, not Apple's statement.",[14,202,203,204,208],{},"The practical point is the same as in 2026: the build machine decides the SDK, not your code. See my ",[69,205,207],{"href":206},"\u002Fblog\u002Fitms-90725-sdk-version-issue-xcode-26-flutter-2026\u002F","ITMS-90725 guide"," for the wording of the 2026 message, how to check which Xcode your command line uses, and the CI fix.",[31,210,212],{"id":211},"the-build-machine-macos-and-xcode-versions","The build machine: macOS and Xcode versions",[14,214,215],{},"Apple's Xcode system requirements page lists Xcode 27, 27.1 and the 27.2 beta 3 as needing \"macOS Tahoe 26.6 or later.\" That is the number that catches teams out. If your build Mac or CI image runs an older macOS, Xcode 27 can't run on it.",[217,218,219,226,232],"ul",{},[220,221,222,225],"li",{},[17,223,224],{},"Your own Mac:"," update to macOS Tahoe 26.6 or later, then install Xcode 27.1 from Apple's releases page.",[220,227,228,231],{},[17,229,230],{},"CI:"," check the Xcode versions and macOS image your provider offers. The GitHub runner images I covered in the ITMS-90725 guide are one example, and each provider has its own list.",[220,233,234,237],{},[17,235,236],{},"Old build Macs:"," if a Mac can't run macOS Tahoe 26.6, it can't build the upload after April 2027. I'd budget for replacing it or moving the build to CI.",[14,239,240,241,244],{},"Flutter's iOS setup page says to install the latest Xcode, and notes the simulator is renamed Device Hub in Xcode 27. It states no minimum macOS. Run ",[186,242,243],{},"xcodebuild -version"," on every machine that builds the app.",[31,246,248],{"id":247},"flutter-the-version-question","Flutter: the version question",[14,250,251],{},"Flutter's pages don't state a minimum Flutter version for Xcode 27. They say three things that matter:",[217,253,254,257,260],{},[220,255,256],{},"Flutter apps built with Xcode 27 that haven't adopted UIScene \"fail to launch on startup.\"",[220,258,259],{},"UIScene became the default in Flutter 3.41, and eligible apps are migrated automatically.",[220,261,262],{},"The docs reflect Flutter 3.47, the current stable release.",[14,264,265,266,269,270,274],{},"So the floor that matters in practice is the UIScene one. If your app is older than 3.41, or has a custom ",[186,267,268],{},"AppDelegate",", do the migration in my ",[69,271,273],{"href":272},"\u002Fblog\u002Fflutter-uiscene-migration-xcode-27-app-wont-launch-2026\u002F","UIScene guide"," before you build with Xcode 27. I won't repeat the code here.",[175,276,278],{"id":277},"cocoapods-and-swift-package-manager","CocoaPods and Swift Package Manager",[14,280,281],{},"Flutter's docs say that as of Flutter 3.44, Swift Package Manager support is on by default, and Flutter falls back to CocoaPods for dependencies that don't support it yet. They also say the CocoaPods registry permanently becomes read-only on December 2, 2026. I found nothing in Flutter's pages tying either change to Xcode 27, so treat them as a separate item on your list. My advice: upgrade Flutter and plugins before the Xcode switch, so you change one thing at a time.",[31,283,285],{"id":284},"iphone-duo-screenshots","iPhone Duo screenshots",[14,287,288],{},"Apple's October 5 post says iPhone Duo is available from October 23, 2026, that Xcode 27.1 adds development support for it, and that \"starting April 2027, any apps or games submitted will need to include screenshots for iPhone Duo.\"",[14,290,291],{},"Apple's screenshot specifications page lists two iPhone Duo sizes, each in both orientations: 1398 x 2034 pixels for the outer display and 2007 x 2853 pixels for the inner display. Its note words the rule as: \"Starting in April 2027, screenshots will be required for any app using the iOS 27.1 SDK or later.\" The two pages word it differently, one by submission and one by SDK. I plan for both, since building with Xcode 27.1 makes them the same thing.",[14,293,294],{},"Screenshots submitted for iPhone Duo also earn a badge on the product page, per Apple. For an app that already has phone screenshots, this is a design task, not a code task: capture or design the new sizes and upload them in App Store Connect. Apple's October 5 post says the new preview tool in App Store Connect shows how they look.",[31,296,298],{"id":297},"a-dated-checklist","A dated checklist",[14,300,301],{},"The Apple and Flutter dates are from the sources above. The other dates are my suggestions for working back from April.",[303,304,305,314,320,326,332,338,344,350],"ol",{},[220,306,307,310,311,313],{},[17,308,309],{},"By October 31, 2026:"," find every machine that builds the iOS app (laptops, CI, a client's Mac). Write down its macOS and ",[186,312,243],{},".",[220,315,316,319],{},[17,317,318],{},"By November 15, 2026:"," update the build Macs to macOS Tahoe 26.6 or later and install Xcode 27.1. Keep Xcode 26.6 installed next to it for now.",[220,321,322,325],{},[17,323,324],{},"By November 30, 2026:"," upgrade Flutter and plugins. Complete the UIScene migration. Confirm the deployment target is iOS 15 or later.",[220,327,328,331],{},[17,329,330],{},"December 2, 2026:"," CocoaPods registry goes read-only. Confirm your plugins resolve under Flutter's Swift Package Manager integration.",[220,333,334,337],{},[17,335,336],{},"By January 31, 2027:"," build with Xcode 27.1 and send a build through TestFlight. Test cold start from a push notification and a deep link.",[220,339,340,343],{},[17,341,342],{},"By February 28, 2027:"," create the iPhone Duo screenshots at Apple's listed sizes and upload them as a draft in App Store Connect.",[220,345,346,349],{},[17,347,348],{},"By March 15, 2027:"," switch your release pipeline to Xcode 27, and ship one normal update through it.",[220,351,352,355],{},[17,353,354],{},"April 1, 2027:"," treat this as the deadline. Apple gives only the month, so don't leave the first Xcode 27 upload for the last week.",[14,357,358],{},"My advice: ship one update built with Xcode 27 well before April. The first upload on a new SDK is where the surprises are.",[14,360,361,362,313],{},"For every other dated Apple, Google Play and Firebase requirement in 2026 and 2027, see ",[69,363,365],{"href":364},"\u002Fblog\u002Fapp-store-google-play-deadlines-2026-2027\u002F","App Store and Google Play deadlines for 2026 and 2027",[31,367,369],{"id":368},"need-a-hand","Need a hand?",[14,371,372,373,377,378,313],{},"If your Flutter iOS build breaks on Xcode 27, or you want the pipeline moved before April, the ",[69,374,376],{"href":375},"\u002Ffixed-price\u002Fflutter-firebase-bug-fix\u002F","App Fix Ticket"," covers it in two fixed-price steps. A $450 Diagnosis gives you the root cause with evidence and a fixed repair quote within 3 business days, credited toward the fix. If you go ahead, the $1,200 Fix takes 5 business days and comes as a pull request. Or ",[69,379,381],{"href":380},"\u002Fcontact\u002F","send me a short description",{"title":383,"searchDepth":384,"depth":384,"links":385},"",2,[386,387,391,392,393,396,397,398],{"id":33,"depth":384,"text":34},{"id":166,"depth":384,"text":167,"children":388},[389],{"id":177,"depth":390,"text":178},3,{"id":196,"depth":384,"text":197},{"id":211,"depth":384,"text":212},{"id":247,"depth":384,"text":248,"children":394},[395],{"id":277,"depth":390,"text":278},{"id":284,"depth":384,"text":285},{"id":297,"depth":384,"text":298},{"id":368,"depth":384,"text":369},"AI & Technology","2026-10-19T08:00:00.000Z","From April 2027, Apple says iOS and iPadOS uploads to App Store Connect must be built with the iOS 27 SDK, which means Xcode 27, and submissions need iPhone Duo screenshots. Apple gives the month only. A dated Flutter checklist, checked October 19, 2026.",null,"md",[405,408,411,414,417],{"question":406,"answer":407},"When exactly in April 2027 does the iOS 27 SDK rule start?","Apple hasn't said. Its September 9, 2026 news post says \"Starting April 2027\" and gives no day. As of October 19, 2026, Apple's upcoming requirements page had no entry for it yet. My advice: plan to be ready on April 1.",{"question":409,"answer":410},"Do I have to drop support for older iOS versions?","Not because of the SDK rule. The SDK you build with and the oldest iOS you support are separate settings. Apple's system requirements page lists iOS 15 to 27 as the deployment target range for Xcode 27, and its submitting page says iOS and iPadOS apps must target iOS 15 or later from April 2027. If your app supports something older than iOS 15, that is the setting to fix.",{"question":412,"answer":413},"What happens if I upload with an older SDK?","Apple hasn't published the 2027 error text that I can find. The 2026 rule produces ITMS-90725, \"SDK version issue\", and I expect the same kind of message, but that is my inference. See my ITMS-90725 guide for the 2026 wording and fix.",{"question":415,"answer":416},"Do I need iPhone Duo screenshots if I only build a phone app?","Apple's October 5, 2026 post says that starting April 2027, any apps or games submitted will need to include screenshots for iPhone Duo. The screenshot specifications page words it as required for any app using the iOS 27.1 SDK or later. Both point to April 2027, so plan to provide them. Apple lists the sizes on that page.",{"question":418,"answer":419},"Which Flutter version do I need for Xcode 27?","I found no stated minimum Flutter version for Xcode 27 on Flutter's pages. They say Flutter apps built with Xcode 27 must adopt UIScene, that UIScene became the default in Flutter 3.41, and that the docs reflect Flutter 3.47. My advice: build on the current stable and test with Xcode 27 before April.","Boynton Beach, FL",{"readingTimeStats":422},{"text":423,"minutes":424,"time":425,"words":426},"8 min read",7.575,454500,1515,true,"\u002Fblog\u002Fios-27-sdk-requirement-april-2027-xcode-27-flutter","ios 27 sdk required","8 min",[432,433,434],"app-store-google-play-deadlines-2026-2027","flutter-uiscene-migration-xcode-27-app-wont-launch-2026","itms-90725-sdk-version-issue-xcode-26-flutter-2026",{"title":5,"description":401},[437,439,441,443,446,449,451,454,457,460,463,465],{"title":438,"url":71},"Apple Developer, App Store submissions now open for the latest OS releases (September 9, 2026)",{"title":440,"url":102},"Apple Developer, Prepare and submit your apps for iPhone Duo (October 5, 2026)",{"title":442,"url":160},"Apple Developer, Upcoming requirements",{"title":444,"url":445},"Apple Developer, Submitting apps to the App Store","https:\u002F\u002Fdeveloper.apple.com\u002Fapp-store\u002Fsubmitting\u002F",{"title":447,"url":448},"Apple Developer, Xcode SDK and system requirements","https:\u002F\u002Fdeveloper.apple.com\u002Fxcode\u002Fsystem-requirements\u002F",{"title":450,"url":87},"Apple Developer, Releases",{"title":452,"url":453},"App Store Connect Help, Screenshot specifications","https:\u002F\u002Fdeveloper.apple.com\u002Fhelp\u002Fapp-store-connect\u002Freference\u002Fapp-information\u002Fscreenshot-specifications",{"title":455,"url":456},"Apple Developer, iPhone Duo","https:\u002F\u002Fdeveloper.apple.com\u002Fiphone-duo\u002F",{"title":458,"url":459},"Flutter docs, Set up iOS development (page last updated 2026-09-14)","https:\u002F\u002Fdocs.flutter.dev\u002Fplatform-integration\u002Fios\u002Fsetup",{"title":461,"url":462},"Flutter docs, UIScene adoption","https:\u002F\u002Fdocs.flutter.dev\u002Frelease\u002Fbreaking-changes\u002Fuiscenedelegate",{"title":464,"url":129},"Flutter docs, Swift Package Manager for app developers",{"title":466,"url":467},"Flutter docs, Release notes","https:\u002F\u002Fdocs.flutter.dev\u002Frelease\u002Frelease-notes","blog\u002Fios-27-sdk-requirement-april-2027-xcode-27-flutter","ios 27 sdk required april 2027, xcode 27 required app store connect, app store connect xcode 27, iphone duo screenshots required, flutter xcode 27, flutter ios 27 sdk, itms-90725 2027, app store april 2027 requirements, xcode 27 macos tahoe 26.6, flutter swift package manager xcode 27, ios deployment target ios 15",[471,472,473,474,475],"Apple says that starting April 2027, iOS and iPadOS apps uploaded to App Store Connect must be built with the iOS 27 and iPadOS 27 SDK or later. Apple gives the month, not a day.","Xcode 27 needs macOS Tahoe 26.6 or later, according to Apple's system requirements page. A build Mac or CI image on an older macOS can't run it.","Building with the iOS 27 SDK does not mean dropping every older iOS version. Apple lists iOS 15 to 27 as Xcode 27's deployment target range, and its submitting page says apps must target iOS 15 or later from April 2027. Apple's upcoming requirements page still lists iOS 13 as the current minimum.","Starting April 2027, Apple says any apps or games submitted will need screenshots for iPhone Duo. The App Store Connect specification page words it as apps using the iOS 27.1 SDK or later.","Flutter's docs say Flutter apps built with Xcode 27 that haven't adopted UIScene fail to launch, so the migration comes before the switch, not after.","https:\u002F\u002Fapp369.com\u002Fblog\u002Fios-27-sdk-requirement-april-2027-xcode-27-flutter\u002F","3ZStqkoYOpdxkeA215SC2mNj87q-wTThYoEobKfrr1U",[479,1316,1982],{"id":480,"title":481,"author":482,"body":484,"category":399,"createdAt":1245,"description":1246,"disclosure":402,"extension":403,"faq":1247,"howTo":402,"lastVerified":402,"location":420,"meta":1263,"navigation":427,"ogImage":402,"path":1269,"primaryKeyword":1270,"readingTime":1271,"related":1272,"seo":1275,"sources":1276,"stem":1305,"tags":1306,"takeaways":1307,"updatedAt":1313,"url":1314,"__hash__":1315},"blog\u002Fblog\u002Fapp-store-google-play-deadlines-2026-2027.md","App Store and Google Play Deadlines for 2026 and 2027",{"name":7,"social":483},{"twitter":9},{"type":11,"value":485,"toc":1237},[486,492,495,500,504,1142,1154,1157,1168,1171,1175,1192,1195,1199,1215,1218,1222,1228,1230],[14,487,488,491],{},[17,489,490],{},"The App Store and Google Play requirements that affect mobile app owners in 2026 and 2027 fit in one table: Xcode 26 uploads since April 28, 2026, target API 36 and Play Billing Library 8 since August 31, 2026, 16 KB page size support from February 1, 2027, and five Firebase shutdowns between March 22 and September 30, 2027."," The table below is sorted by date, and every row links to the page where the platform states it.",[14,493,494],{},"I checked each one on October 18, 2026. Rows whose date has passed are marked \"In effect\".",[14,496,497,499],{},[17,498,28],{}," App369 is my studio. I build and fix Android and iOS apps, mostly in Flutter, and the last section mentions what I sell. Apple and Google don't pay me for anything on this page.",[31,501,503],{"id":502},"all-dates-in-order","All dates, in order",[36,505,506,523],{},[39,507,508],{},[42,509,510,512,515,518,520],{},[45,511,47],{},[45,513,514],{},"What changes",[45,516,517],{},"Status",[45,519,53],{},[45,521,522],{},"My guide",[55,524,525,551,573,599,623,645,667,691,716,743,768,794,816,842,866,890,914,935,959,983,1006,1030,1050,1074,1097,1118],{},[42,526,527,530,536,539,545],{},[60,528,529],{},"January 31, 2026",[60,531,532,535],{},[17,533,534],{},"Apple."," Apple asked developers to answer the updated age rating questions in App Store Connect by this date, to avoid an interruption when submitting app updates. Affects: every app on the App Store.",[60,537,538],{},"In effect",[60,540,541],{},[69,542,544],{"href":160,"rel":543},[73],"Apple",[60,546,547],{},[69,548,550],{"href":549},"\u002Fblog\u002Fapp-store-age-rating-questions-update-2026\u002F","Age rating questions",[42,552,553,556,561,563,568],{},[60,554,555],{},"April 28, 2026",[60,557,558,560],{},[17,559,534],{}," Uploads to App Store Connect must be built with Xcode 26 or later, using an SDK for iOS 26, iPadOS 26, tvOS 26, visionOS 26 or watchOS 26. Affects: anyone uploading a build, including Flutter apps.",[60,562,538],{},[60,564,565],{},[69,566,544],{"href":160,"rel":567},[73],[60,569,570],{},[69,571,572],{"href":206},"ITMS-90725 and Xcode 26",[42,574,575,578,584,586,593],{},[60,576,577],{},"August 31, 2026",[60,579,580,583],{},[17,581,582],{},"Google Play."," New apps and app updates must target Android 16 (API level 36) or higher. Wear OS and Android Automotive OS apps need API 35, and Android XR apps need API 34. Affects: anyone publishing a new app or an update.",[60,585,538],{},[60,587,588],{},[69,589,592],{"href":590,"rel":591},"https:\u002F\u002Fsupport.google.com\u002Fgoogleplay\u002Fandroid-developer\u002Fanswer\u002F11926878",[73],"Play Console Help",[60,594,595],{},[69,596,598],{"href":597},"\u002Fblog\u002Fgoogle-play-target-api-36-android-16-requirement-2026\u002F","Target API 36",[42,600,601,603,608,610,617],{},[60,602,577],{},[60,604,605,607],{},[17,606,582],{}," New apps and updates must use Play Billing Library 8 or later. Version 7 is no longer accepted by default. Affects: apps with in-app purchases or subscriptions.",[60,609,538],{},[60,611,612],{},[69,613,616],{"href":614,"rel":615},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Fbilling\u002Fdeprecation-faq",[73],"Android Developers",[60,618,619],{},[69,620,622],{"href":621},"\u002Fblog\u002Fplay-billing-library-7-deprecated-update-to-8-2026\u002F","Billing Library 8",[42,624,625,628,633,635,641],{},[60,626,627],{},"September 2026",[60,629,630,632],{},[17,631,534],{}," Answers to the new social media questions in the age rating questionnaire are required when submitting new apps or updates, or apps for notarization for alternative distribution. Apple gives the month, not a day. Affects: every app on the App Store.",[60,634,538],{},[60,636,637],{},[69,638,544],{"href":639,"rel":640},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002F?id=tlur8uvi",[73],[60,642,643],{},[69,644,550],{"href":549},[42,646,647,649,654,656,661],{},[60,648,62],{},[60,650,651,653],{},[17,652,534],{}," iOS and iPadOS apps uploaded to App Store Connect must target iOS 13 or later. Affects: anyone uploading an iOS or iPadOS build.",[60,655,538],{},[60,657,658],{},[69,659,544],{"href":160,"rel":660},[73],[60,662,663],{},[69,664,666],{"href":665},"\u002Fblog\u002Fios-27-sdk-requirement-april-2027-xcode-27-flutter\u002F","iOS 27 SDK checklist",[42,668,669,671,676,678,686],{},[60,670,79],{},[60,672,673,675],{},[17,674,534],{}," Xcode 27 was released. Flutter's docs say Apple mandates the UIScene life cycle for UIKit apps built with the iOS 27 SDK, and that Flutter apps built with Xcode 27 without it fail to launch. Affects: anyone building with Xcode 27, including Flutter apps with a custom AppDelegate.",[60,677,538],{},[60,679,680,150,683],{},[69,681,131],{"href":462,"rel":682},[73],[69,684,544],{"href":87,"rel":685},[73],[60,687,688],{},[69,689,690],{"href":272},"UIScene migration",[42,692,693,696,702,704,710],{},[60,694,695],{},"September 30, 2026",[60,697,698,701],{},[17,699,700],{},"Google Play \u002F Android."," Developer verification protections begin for apps installed from participating stores in Brazil, Indonesia, Singapore and Thailand on certified devices running Android 7 or higher. Affects: anyone distributing Android apps.",[60,703,538],{},[60,705,706],{},[69,707,616],{"href":708,"rel":709},"https:\u002F\u002Fdeveloper.android.com\u002Fdeveloper-verification",[73],[60,711,712],{},[69,713,715],{"href":714},"\u002Fblog\u002Fandroid-developer-verification-requirement-2026\u002F","Developer verification",[42,717,718,721,727,730,737],{},[60,719,720],{},"October 30, 2026",[60,722,723,726],{},[17,724,725],{},"Google APIs."," Google says the legacy Fitbit Web API will be turned off and will no longer function or sync data. Support already ended on September 30, 2026. Affects: apps that read Fitbit data through the Fitbit Web API.",[60,728,729],{},"Upcoming",[60,731,732],{},[69,733,736],{"href":734,"rel":735},"https:\u002F\u002Fdevelopers.google.com\u002Fhealth",[73],"Google Health API",[60,738,739],{},[69,740,742],{"href":741},"\u002Fblog\u002Fgoogle-fit-api-deprecated-health-connect-2026\u002F","Google Fit to Health Connect",[42,744,745,747,753,755,762],{},[60,746,720],{},[60,748,749,752],{},[17,750,751],{},"Supabase."," New tables in the public schema stop getting automatic Data API access in existing projects, so they need an explicit grant. Affects: apps with a Supabase backend.",[60,754,729],{},[60,756,757],{},[69,758,761],{"href":759,"rel":760},"https:\u002F\u002Fsupabase.com\u002Fchangelog\u002F45329-breaking-change-tables-not-exposed-to-data-and-graphql-api-automatically",[73],"Supabase",[60,763,764],{},[69,765,767],{"href":766},"\u002Fblog\u002Fsupabase-permission-denied-new-tables-october-30-2026\u002F","Supabase permission denied",[42,769,770,773,778,780,788],{},[60,771,772],{},"November 1, 2026",[60,774,775,777],{},[17,776,582],{}," End of the extension Google offers for the target API 36 and Billing Library 7 deadlines. Affects: anyone who requested an extension.",[60,779,729],{},[60,781,782,150,785],{},[69,783,592],{"href":590,"rel":784},[73],[69,786,616],{"href":614,"rel":787},[73],[60,789,790,150,792],{},[69,791,598],{"href":597},[69,793,622],{"href":621},[42,795,796,799,804,806,812],{},[60,797,798],{},"End of 2026",[60,800,801,803],{},[17,802,725],{}," The Google Fit APIs, including the REST API, are supported only until the end of 2026. Affects: apps that read fitness data through Google Fit.",[60,805,729],{},[60,807,808],{},[69,809,616],{"href":810,"rel":811},"https:\u002F\u002Fdeveloper.android.com\u002Fhealth-and-fitness\u002Fhealth-connect\u002Fmigration\u002Ffit",[73],[60,813,814],{},[69,815,742],{"href":741},[42,817,818,821,827,829,836],{},[60,819,820],{},"January 1, 2027",[60,822,823,826],{},[17,824,825],{},"Firebase."," New users can no longer start using the FCM InstanceId server APIs and device groups. Firebase says new users can onboard before this date. Affects: new integrations that use those APIs.",[60,828,729],{},[60,830,831],{},[69,832,835],{"href":833,"rel":834},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fcloud-messaging\u002Ftroubleshooting",[73],"Firebase",[60,837,838],{},[69,839,841],{"href":840},"\u002Fblog\u002Ffcm-legacy-api-shutdown-http-v1-migration-2026\u002F","FCM migration",[42,843,844,847,852,854,860],{},[60,845,846],{},"Early 2027",[60,848,849,851],{},[17,850,534],{}," Existing apps in the EEA, UK or US whose category is Health & Fitness or Medical, or that are marked in the age rating questionnaire as containing frequent Medical or Treatment Information, must declare a regulated medical device status in App Store Connect. Without it, you can no longer submit app updates. New apps have needed it since March 26, 2026. Apple gives no exact date. Affects: health, fitness and medical apps.",[60,853,729],{},[60,855,856],{},[69,857,544],{"href":858,"rel":859},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002F?id=nyqbfz1y",[73],[60,861,862],{},[69,863,865],{"href":864},"\u002Fblog\u002Fapp-store-medical-device-status-declaration-2027\u002F","Medical device status",[42,867,868,871,876,878,884],{},[60,869,870],{},"January 27, 2027",[60,872,873,875],{},[17,874,582],{}," Four sensitive-permission changes take effect: the Contacts Permissions policy (use the Android Contact Picker unless the app needs broad access), the location button as the minimum for one-time precise location, no READ_CALL_LOG for phone-call account verification, and no geofencing as a foreground service use case. Google ties the contacts and location rules to apps that target Android 17 (API level 37) or later; its call log and geofencing pages give no target API. A 30-day self extension is available in Play Console. Affects: apps that request READ_CONTACTS, ACCESS_FINE_LOCATION or READ_CALL_LOG, or run geofencing in a foreground service.",[60,877,729],{},[60,879,880],{},[69,881,592],{"href":882,"rel":883},"https:\u002F\u002Fsupport.google.com\u002Fgoogleplay\u002Fandroid-developer\u002Ftable\u002F12921780",[73],[60,885,886],{},[69,887,889],{"href":888},"\u002Fblog\u002Fgoogle-play-contacts-permissions-policy-2027\u002F","Play permission changes",[42,891,892,895,900,902,908],{},[60,893,894],{},"February 1, 2027",[60,896,897,899],{},[17,898,582],{}," Updates that don't support 16 KB memory page sizes can't be released, for apps targeting Android 15 (API level 35) and higher. Affects: apps with native code, which includes Flutter apps.",[60,901,729],{},[60,903,904],{},[69,905,616],{"href":906,"rel":907},"https:\u002F\u002Fdeveloper.android.com\u002Fguide\u002Fpractices\u002Fpage-sizes",[73],[60,909,910],{},[69,911,913],{"href":912},"\u002Fblog\u002Fgoogle-play-16kb-page-size-flutter-android-2026\u002F","16 KB page size",[42,915,916,919,924,926,931],{},[60,917,918],{},"2027 (no month stated)",[60,920,921,923],{},[17,922,700],{}," Developer verification capability expands globally for all apps on certified Android devices. Affects: anyone distributing Android apps.",[60,925,729],{},[60,927,928],{},[69,929,616],{"href":708,"rel":930},[73],[60,932,933],{},[69,934,715],{"href":714},[42,936,937,940,945,947,953],{},[60,938,939],{},"March 22, 2027",[60,941,942,944],{},[17,943,825],{}," Firebase Studio shuts down and remaining data is permanently deleted. Affects: anyone with a Firebase Studio workspace.",[60,946,729],{},[60,948,949],{},[69,950,835],{"href":951,"rel":952},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fstudio\u002Fmigrating-project",[73],[60,954,955],{},[69,956,958],{"href":957},"\u002Fblog\u002Ffirebase-studio-shutting-down-migrate-project-2027\u002F","Firebase Studio shutdown",[42,960,961,964,969,971,977],{},[60,962,963],{},"March 31, 2027",[60,965,966,968],{},[17,967,825],{}," Firebase Extensions service shuts down. Installed extensions keep running, but you lose the ability to update, reconfigure or uninstall them through the console or CLI. Affects: apps with installed extensions.",[60,970,729],{},[60,972,973],{},[69,974,835],{"href":975,"rel":976},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fextensions\u002Ffaq-and-troubleshooting",[73],[60,978,979],{},[69,980,982],{"href":981},"\u002Fblog\u002Ffirebase-extensions-shutting-down-replace-2027\u002F","Firebase Extensions shutdown",[42,984,985,987,992,994,999],{},[60,986,138],{},[60,988,989,991],{},[17,990,534],{}," Apps uploaded to App Store Connect must be built with the iOS 27 and iPadOS 27 SDK or later (tvOS, visionOS and watchOS 27 SDKs for those platforms). Apple gives the month, not a day. Affects: every iOS and Flutter app that ships an update.",[60,993,729],{},[60,995,996],{},[69,997,544],{"href":71,"rel":998},[73],[60,1000,1001,150,1003],{},[69,1002,666],{"href":665},[69,1004,1005],{"href":272},"UIScene and Xcode 27",[42,1007,1008,1010,1015,1017,1026],{},[60,1009,138],{},[60,1011,1012,1014],{},[17,1013,534],{}," Apple's news post says any app or game submitted must include screenshots for iPhone Duo. Its screenshot specifications page says they will be required for any app using the iOS 27.1 SDK or later. Apple gives the month, not a day. Affects: App Store submissions.",[60,1016,729],{},[60,1018,1019,150,1022],{},[69,1020,74],{"href":102,"rel":1021},[73],[69,1023,1025],{"href":453,"rel":1024},[73],"Apple specs",[60,1027,1028],{},[69,1029,666],{"href":665},[42,1031,1032,1034,1039,1041,1046],{},[60,1033,138],{},[60,1035,1036,1038],{},[17,1037,534],{}," Apple's submitting page says iOS and iPadOS apps uploaded to App Store Connect must target iOS 15 or later. The upcoming requirements page still lists iOS 13 as the minimum since September 9, 2026. Apple gives the month, not a day. Affects: apps whose deployment target is iOS 13 or 14.",[60,1040,729],{},[60,1042,1043],{},[69,1044,544],{"href":445,"rel":1045},[73],[60,1047,1048],{},[69,1049,666],{"href":665},[42,1051,1052,1055,1060,1062,1068],{},[60,1053,1054],{},"June 15, 2027",[60,1056,1057,1059],{},[17,1058,825],{}," Firebase ML custom model hosting shuts down. Affects: apps that host custom models in Firebase ML.",[60,1061,729],{},[60,1063,1064],{},[69,1065,835],{"href":1066,"rel":1067},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fml\u002Fmigrate-to-cloud-storage",[73],[60,1069,1070],{},[69,1071,1073],{"href":1072},"\u002Fblog\u002Ffirebase-ml-model-hosting-shutting-down-migrate-2027\u002F","Firebase ML model hosting shutdown",[42,1075,1076,1079,1084,1086,1091],{},[60,1077,1078],{},"August 31, 2027",[60,1080,1081,1083],{},[17,1082,582],{}," Billing Library 8 reaches its own deadline. New apps and updates must use Billing Library 9 or later. Extension available until November 1, 2027. Affects: apps with in-app purchases or subscriptions.",[60,1085,729],{},[60,1087,1088],{},[69,1089,616],{"href":614,"rel":1090},[73],[60,1092,1093],{},[69,1094,1096],{"href":1095},"\u002Fblog\u002Fplay-billing-library-9-migration-deadline-2027\u002F","Billing Library 9",[42,1098,1099,1102,1107,1109,1114],{},[60,1100,1101],{},"September 29, 2027",[60,1103,1104,1106],{},[17,1105,825],{}," The FCM InstanceId server APIs and device groups are decommissioned. Affects: servers that manage topics or tokens through the old APIs.",[60,1108,729],{},[60,1110,1111],{},[69,1112,835],{"href":833,"rel":1113},[73],[60,1115,1116],{},[69,1117,841],{"href":840},[42,1119,1120,1123,1128,1130,1136],{},[60,1121,1122],{},"September 30, 2027",[60,1124,1125,1127],{},[17,1126,825],{}," Firebase Test Lab is fully shut down. Affects: CI pipelines that run tests on Test Lab.",[60,1129,729],{},[60,1131,1132],{},[69,1133,835],{"href":1134,"rel":1135},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Ftest-lab",[73],[60,1137,1138],{},[69,1139,1141],{"href":1140},"\u002Fblog\u002Ffirebase-test-lab-shutting-down-alternatives-2027\u002F","Firebase Test Lab shutdown",[14,1143,1144,1145,1149,1150,1153],{},"Two more notes. Apple's privacy manifest rules (May 1, 2024 for required reason APIs and February 12, 2025 for common SDKs, see the ",[69,1146,1148],{"href":1147},"\u002Fblog\u002Fapple-privacy-manifest-itms-91053-itms-91061-flutter-fix-2026\u002F","privacy manifest guide",") and the FCM legacy send shutdown (July 22, 2024, see the ",[69,1151,1152],{"href":840},"FCM migration guide",") already passed before 2026. I keep them in their own guides because they still cause upload and delivery errors.",[31,1155,544],{"id":1156},"apple",[14,1158,1159,1160,150,1162,1164,1165,313],{},"Apple's page names one build rule that matters most: Xcode 26 or later since April 28, 2026. Apple's September 9, 2026 news post adds the next one: starting April 2027, uploads must be built with the iOS 27 and iPadOS 27 SDK or later, which means Xcode 27. Apple's October 5, 2026 post also says that from April 2027 every submission needs iPhone Duo screenshots. The bigger change with Xcode 27 is the UIScene life cycle, which a Flutter app on 3.41 or later with an unmodified AppDelegate gets automatically. A custom AppDelegate needs manual changes. The guides are ",[69,1161,572],{"href":206},[69,1163,1005],{"href":272}," and ",[69,1166,1167],{"href":1147},"privacy manifest errors",[14,1169,1170],{},"My advice: check which Xcode your build machine uses before your next upload, and test a build with Xcode 27 before you need one.",[31,1172,1174],{"id":1173},"google-play-and-android","Google Play and Android",[14,1176,1177,1178,1181,1182,150,1185,150,1187,1164,1189,313],{},"The Play rules come in pairs. Target API 36 and Billing Library 8 both took effect on August 31, 2026 with an extension to November 1, 2026. After that, February 1, 2027 brings the 16 KB page size rule, and on August 31, 2027 Google requires Billing Library 9 or later for new apps and updates. The ",[69,1179,1180],{"href":1095},"Billing Library 9 guide"," covers that move. Separately, Android developer verification started on September 30, 2026 in four countries, with a global expansion in 2027. The guides are ",[69,1183,1184],{"href":597},"target API 36",[69,1186,913],{"href":912},[69,1188,622],{"href":621},[69,1190,1191],{"href":714},"developer verification",[14,1193,1194],{},"My advice: if you are still behind on API 36 or Billing 8, ship that update before November 1, 2026. Then do the 16 KB check before February 1, 2027, since it is the next date that can block a release.",[31,1196,1198],{"id":1197},"firebase-and-google-apis","Firebase and Google APIs",[14,1200,1201,1202,150,1206,150,1209,1211,1212,313],{},"Firebase has five shutdown dates in 2027, plus the January 1 cutoff for new users of the InstanceId APIs. Firestore, Authentication, Cloud Functions and Hosting are not on the list. Google Fit APIs are supported only until the end of 2026, and Google points to Health Connect and the Google Health API. The legacy Fitbit Web API goes first: Google says it will be turned off on October 30, 2026. The guides are ",[69,1203,1205],{"href":1204},"\u002Fblog\u002Ffirebase-deprecations-shutdown-dates-2026\u002F","Firebase shutdown dates",[69,1207,1208],{"href":840},"FCM HTTP v1 migration",[69,1210,742],{"href":741}," and, if you use it, ",[69,1213,1214],{"href":766},"Supabase new table permissions",[14,1216,1217],{},"My advice: open the Firebase console for every project you own and look at Extensions, Machine Learning, Test Lab and Studio. Those are the products with a date attached.",[31,1219,1221],{"id":1220},"how-i-keep-this-page-current","How I keep this page current",[14,1223,1224,1225,313],{},"Every row links to the page where the platform states the date. If a source says only a month or \"later this year\", I write exactly that. When a platform moves a date, I change the row and the updated date at the top of this page. If you spot a date that looks wrong, ",[69,1226,1227],{"href":380},"tell me",[31,1229,369],{"id":368},[14,1231,1232,1233,377,1235,313],{},"If one of these deadlines lands on an app you can't update yourself, the ",[69,1234,376],{"href":375},[69,1236,381],{"href":380},{"title":383,"searchDepth":384,"depth":384,"links":1238},[1239,1240,1241,1242,1243,1244],{"id":502,"depth":384,"text":503},{"id":1156,"depth":384,"text":544},{"id":1173,"depth":384,"text":1174},{"id":1197,"depth":384,"text":1198},{"id":1220,"depth":384,"text":1221},{"id":368,"depth":384,"text":369},"2026-10-18T22:00:00.000Z","One dated table of the App Store, Google Play, Firebase and Google API requirements that affect mobile app owners in 2026 and 2027, with the primary source for each date, checked October 18, 2026.",[1248,1251,1254,1257,1260],{"question":1249,"answer":1250},"What is the next Google Play deadline?","The deadline of November 1, 2026 is the end of the extension window for the target API 36 and Billing Library 7 deadlines. After that, the next one is February 1, 2027, when Google says app updates that don't support 16 KB memory page sizes can't be released.",{"question":1252,"answer":1253},"What Xcode version does the App Store require?","Apple's upcoming requirements page says that since April 28, 2026, apps uploaded to App Store Connect must be built with Xcode 26 or later using an SDK for iOS 26, iPadOS 26, tvOS 26, visionOS 26 or watchOS 26. Apple's September 9, 2026 news post adds the next one: starting April 2027, iOS and iPadOS apps must be built with the iOS 27 and iPadOS 27 SDK or later. Apple gives the month, not a day.",{"question":1255,"answer":1256},"Do these deadlines apply to apps already published?","It depends on the rule. Google says existing apps must target API 35 or higher to stay available to new users on newer Android versions, and existing apps keep working on version 7 of Play Billing until you ship an update. Most upload-side rules, such as the Xcode SDK minimum, apply when you submit a new build.",{"question":1258,"answer":1259},"Which deadlines affect a Flutter app?","Nearly all of the Apple and Google Play rows do, because a Flutter app is a normal iOS and Android app underneath. The Firebase rows apply only if you use that Firebase product. The Supabase row applies only if you use Supabase.",{"question":1261,"answer":1262},"How will I know if a date changes?","Each row links to the page where the platform states the date, and I list the date I checked it. Dates can move, so check the linked page before you plan around one. I update this page when a platform changes a date.",{"readingTimeStats":1264},{"text":1265,"minutes":1266,"time":1267,"words":1268},"9 min read",8.92,535200,1784,"\u002Fblog\u002Fapp-store-google-play-deadlines-2026-2027","app store deadlines 2026","6 min",[1273,434,1274],"google-play-target-api-36-android-16-requirement-2026","firebase-deprecations-shutdown-dates-2026",{"title":481,"description":1246},[1277,1279,1280,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303],{"title":1278,"url":734},"Google for Developers, Google Health API (Fitbit Web API dates)",{"title":442,"url":160},{"title":450,"url":87},{"title":1282,"url":462},"Flutter docs, Migrate to UIScene life cycle",{"title":1284,"url":590},"Play Console Help, Target API level requirements for Google Play apps",{"title":1286,"url":614},"Android Developers, Play Billing Library deprecation FAQ",{"title":1288,"url":906},"Android Developers, Support 16 KB page sizes",{"title":1290,"url":708},"Android Developers, Android developer verification",{"title":1292,"url":810},"Android Developers, Migrate from the Google Fit APIs",{"title":1294,"url":833},"Firebase, FCM troubleshooting (InstanceId and device groups deprecation)",{"title":1296,"url":951},"Firebase, Migrate from Firebase Studio",{"title":1298,"url":975},"Firebase, Extensions FAQ and troubleshooting",{"title":1300,"url":1066},"Firebase, Migrate Firebase ML model hosting to Cloud Storage",{"title":1302,"url":1134},"Firebase, Test Lab",{"title":1304,"url":759},"Supabase changelog, Tables not exposed to the Data API automatically","blog\u002Fapp-store-google-play-deadlines-2026-2027","app store deadlines 2026, google play deadlines 2026, app store requirements 2027, google play requirements 2027, target api 36 deadline, play billing library 8 deadline, 16 kb page size deadline, xcode 26 requirement, firebase shutdown dates, mobile app compliance calendar",[1308,1309,1310,1311,1312],"Most 2026 deadlines have already hit. Since April 28, 2026 iOS uploads need Xcode 26 or later, and since August 31, 2026 Google Play needs new apps and updates to target API 36 and use Play Billing Library 8.","Google lets you request an extension for both Play deadlines until November 1, 2026. That is the last date to ship an update if you are still behind.","The next hard date for Android is February 1, 2027. Google says updates that don't support 16 KB memory page sizes can't be released after that.","On iOS, apps built with Xcode 27 must use the UIScene life cycle or they fail to launch. Xcode 27 was released on September 14, 2026.","Firebase has five shutdowns between March 22 and September 30, 2027. Core services such as Firestore and Authentication are not on the list.","2026-10-19T09:00:00.000Z","https:\u002F\u002Fapp369.com\u002Fblog\u002Fapp-store-google-play-deadlines-2026-2027\u002F","7iLEy6X2NFre6xDWHiYbB0u9V57CZXRUPhPb7TWJM4w",{"id":1317,"title":1318,"author":1319,"body":1321,"category":399,"createdAt":1928,"description":1929,"disclosure":402,"extension":403,"faq":1930,"howTo":402,"lastVerified":402,"location":420,"meta":1946,"navigation":427,"ogImage":402,"path":1952,"primaryKeyword":1953,"readingTime":430,"related":1954,"seo":1957,"sources":1958,"stem":1971,"tags":1972,"takeaways":1973,"updatedAt":1979,"url":1980,"__hash__":1981},"blog\u002Fblog\u002Fflutter-uiscene-migration-xcode-27-app-wont-launch-2026.md","Flutter UIScene Migration: Fix Launch Crashes on Xcode 27",{"name":7,"social":1320},{"twitter":9},{"type":11,"value":1322,"toc":1916},[1323,1340,1343,1348,1352,1471,1479,1482,1486,1504,1507,1511,1518,1522,1540,1619,1643,1647,1664,1678,1682,1693,1814,1832,1836,1852,1856,1859,1893,1897,1899,1912],[14,1324,1325,1328,1329,1331,1332,1334,1335,1164,1337,313],{},[17,1326,1327],{},"If your Flutter iOS app fails to launch after you build it with Xcode 27, the first thing to check is whether it has adopted Apple's UIScene lifecycle."," Flutter's docs say Flutter apps built with Xcode 27 (the iOS 27 SDK) that haven't adopted UIScene fail to launch on startup. From Flutter 3.41, the Flutter CLI migrates apps with an unmodified ",[186,1330,268],{}," automatically. Apps with a custom ",[186,1333,268],{},", or on an older Flutter, need a few manual changes to ",[186,1336,268],{},[186,1338,1339],{},"Info.plist",[14,1341,1342],{},"The facts below come from Flutter's UIScene page, Apple's technote TN3187 and Apple's release and requirements pages, as listed in the sources. I checked each one on October 18, 2026.",[14,1344,1345,1347],{},[17,1346,28],{}," App369 is my studio. I build and fix Flutter apps on iOS and Android, and the last section mentions what I sell. Google and Apple don't pay me for anything on this page.",[31,1349,1351],{"id":1350},"what-changed-and-when","What changed, and when",[36,1353,1354,1365],{},[39,1355,1356],{},[42,1357,1358,1360,1363],{},[45,1359,47],{},[45,1361,1362],{},"What happened",[45,1364,53],{},[55,1366,1367,1385,1405,1421,1434,1453],{},[42,1368,1369,1372,1375],{},[60,1370,1371],{},"June 2025 (WWDC25)",[60,1373,1374],{},"Apple announces that in the release after iOS 26, UIKit apps built with the latest SDK must use the UIScene life cycle, or they won't launch",[60,1376,1377,150,1380],{},[69,1378,131],{"href":462,"rel":1379},[73],[69,1381,1384],{"href":1382,"rel":1383},"https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Ftechnotes\u002Ftn3187-migrating-to-the-uikit-scene-based-life-cycle",[73],"Apple TN3187",[42,1386,1387,1390,1393],{},[60,1388,1389],{},"November 12, 2025",[60,1391,1392],{},"Flutter 3.38 adds UIScene support, with an experimental automatic migration",[60,1394,1395,150,1400],{},[69,1396,1399],{"href":1397,"rel":1398},"https:\u002F\u002Fflutter.dev\u002Fblog\u002Fwhats-new-in-flutter-3-38",[73],"Flutter 3.38 post",[69,1401,1404],{"href":1402,"rel":1403},"https:\u002F\u002Fstorage.googleapis.com\u002Fflutter_infra_release\u002Freleases\u002Freleases_macos.json",[73],"release archive",[42,1406,1407,1410,1413],{},[60,1408,1409],{},"February 11, 2026",[60,1411,1412],{},"Flutter 3.41: UIScene support is the default, and eligible apps are migrated automatically",[60,1414,1415,150,1418],{},[69,1416,131],{"href":462,"rel":1417},[73],[69,1419,1404],{"href":1402,"rel":1420},[73],[42,1422,1423,1425,1428],{},[60,1424,555],{},[60,1426,1427],{},"App Store Connect uploads must be built with Xcode 26 or later",[60,1429,1430],{},[69,1431,1433],{"href":160,"rel":1432},[73],"Apple upcoming requirements",[42,1435,1436,1440,1445],{},[60,1437,1438],{},[17,1439,79],{},[60,1441,1442],{},[17,1443,1444],{},"Xcode 27 released. Flutter apps built with it that haven't adopted UIScene fail to launch",[60,1446,1447,150,1450],{},[69,1448,89],{"href":87,"rel":1449},[73],[69,1451,131],{"href":462,"rel":1452},[73],[42,1454,1455,1460,1465],{},[60,1456,1457,1459],{},[17,1458,138],{}," (Apple gives no day)",[60,1461,1462],{},[17,1463,1464],{},"App Store Connect uploads must be built with the iOS 27 SDK or later, so Xcode 27",[60,1466,1467],{},[69,1468,1470],{"href":71,"rel":1469},[73],"Apple News, September 9, 2026",[14,1472,1473,1474,1478],{},"Apple's upcoming requirements page still lists Xcode 26 as the current minimum for uploads, but Apple's ",[69,1475,1477],{"href":71,"rel":1476},[73],"September 9, 2026 news post"," says that starting April 2027, iOS and iPadOS apps must be built with the iOS 27 and iPadOS 27 SDK or later. Apple gives the month, not a day. So Xcode 26 works until then, but from April 2027 you have to build with Xcode 27, and the app won't launch on that build unless it has migrated to UIScene.",[14,1480,1481],{},"Apple's technote says the requirement is to adopt the scene life cycle. Supporting multiple scenes is encouraged but not required.",[31,1483,1485],{"id":1484},"step-1-let-flutter-migrate-it","Step 1: let Flutter migrate it",[14,1487,1488,1489,1491,1492,1495,1496,1499,1500,1503],{},"If the app is on Flutter 3.41 or later and its ",[186,1490,268],{}," hasn't been customized, Flutter's docs say the CLI migrates it when you run ",[186,1493,1494],{},"flutter run"," or ",[186,1497,1498],{},"flutter build ios",". On success it prints ",[186,1501,1502],{},"Finished migration to UIScene lifecycle",". If it can't, it warns you and gives manual steps.",[14,1505,1506],{},"My advice: if the app is on an older Flutter, upgrade to the current stable first and see whether the automatic migration covers it, before changing native code by hand.",[31,1508,1510],{"id":1509},"step-2-migrate-a-custom-appdelegate-by-hand","Step 2: migrate a custom AppDelegate by hand",[14,1512,1513,1514,313],{},"These steps follow Flutter's ",[69,1515,1517],{"href":462,"rel":1516},[73],"UIScene page",[175,1519,1521],{"id":1520},"register-plugins-in-the-new-callback","Register plugins in the new callback",[14,1523,1524,1525,1528,1529,1531,1532,1535,1536,1539],{},"Plugins used to be registered in ",[186,1526,1527],{},"application:didFinishLaunchingWithOptions:",". Now the ",[186,1530,268],{}," conforms to ",[186,1533,1534],{},"FlutterImplicitEngineDelegate"," and registers them in ",[186,1537,1538],{},"didInitializeImplicitFlutterEngine",":",[1541,1542,1546],"pre",{"className":1543,"code":1544,"language":1545,"meta":383,"style":383},"language-swift shiki shiki-themes github-light github-dark","@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate {\n  override func application(\n    _ application: UIApplication,\n    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?\n  ) -> Bool {\n    return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n  }\n\n  func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) {\n    GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry)\n  }\n}\n","swift",[186,1547,1548,1556,1561,1566,1572,1578,1584,1590,1596,1602,1608,1613],{"__ignoreMap":383},[1549,1550,1553],"span",{"class":1551,"line":1552},"line",1,[1549,1554,1555],{},"@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate {\n",[1549,1557,1558],{"class":1551,"line":384},[1549,1559,1560],{},"  override func application(\n",[1549,1562,1563],{"class":1551,"line":390},[1549,1564,1565],{},"    _ application: UIApplication,\n",[1549,1567,1569],{"class":1551,"line":1568},4,[1549,1570,1571],{},"    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?\n",[1549,1573,1575],{"class":1551,"line":1574},5,[1549,1576,1577],{},"  ) -> Bool {\n",[1549,1579,1581],{"class":1551,"line":1580},6,[1549,1582,1583],{},"    return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n",[1549,1585,1587],{"class":1551,"line":1586},7,[1549,1588,1589],{},"  }\n",[1549,1591,1593],{"class":1551,"line":1592},8,[1549,1594,1595],{"emptyLinePlaceholder":427},"\n",[1549,1597,1599],{"class":1551,"line":1598},9,[1549,1600,1601],{},"  func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) {\n",[1549,1603,1605],{"class":1551,"line":1604},10,[1549,1606,1607],{},"    GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry)\n",[1549,1609,1611],{"class":1551,"line":1610},11,[1549,1612,1589],{},[1549,1614,1616],{"class":1551,"line":1615},12,[1549,1617,1618],{},"}\n",[14,1620,1621,1622,1625,1626,1628,1629,1632,1633,1636,1637,1639,1640,1642],{},"If you created method channels or platform views in ",[186,1623,1624],{},"didFinishLaunchingWithOptions",", move them into ",[186,1627,1538],{}," too, using ",[186,1630,1631],{},"engineBridge.applicationRegistrar.messenger()"," as the messenger. Flutter's docs warn that accessing the ",[186,1634,1635],{},"FlutterViewController"," in ",[186,1638,1624],{}," might crash your app, and say to use the ",[186,1641,1534],{}," protocol instead.",[175,1644,1646],{"id":1645},"move-ui-lifecycle-code-to-a-scene-delegate","Move UI lifecycle code to a scene delegate",[14,1648,1649,1650,1652,1653,1656,1657,1660,1661,313],{},"After the migration, UIKit no longer calls the ",[186,1651,268],{}," methods tied to UI state, such as ",[186,1654,1655],{},"applicationDidBecomeActive",". If you used them, create a scene delegate and move that code to scene events. Flutter's docs say your own scene delegate must subclass ",[186,1658,1659],{},"FlutterSceneDelegate"," or conform to ",[186,1662,1663],{},"FlutterSceneLifeCycleProvider",[14,1665,1666,1667,1669,1670,1673,1674,1677],{},"Flutter's page adds, in its plugin section, that after the migration the launch options passed to ",[186,1668,1624],{}," are ",[186,1671,1672],{},"nil",", and that logic relying on them moves to ",[186,1675,1676],{},"scene:willConnectToSession:options:",". My advice: look first at code that handles a notification or a URL the app was opened with.",[175,1679,1681],{"id":1680},"add-the-scene-manifest-to-infoplist","Add the scene manifest to Info.plist",[14,1683,1684,1685,1688,1689,1692],{},"Add this inside the top-level ",[186,1686,1687],{},"\u003Cdict>"," of ",[186,1690,1691],{},"ios\u002FRunner\u002FInfo.plist",", as shown on Flutter's page:",[1541,1694,1698],{"className":1695,"code":1696,"language":1697,"meta":383,"style":383},"language-xml shiki shiki-themes github-light github-dark","\u003Ckey>UIApplicationSceneManifest\u003C\u002Fkey>\n\u003Cdict>\n  \u003Ckey>UIApplicationSupportsMultipleScenes\u003C\u002Fkey>\n  \u003Cfalse\u002F>\n  \u003Ckey>UISceneConfigurations\u003C\u002Fkey>\n  \u003Cdict>\n    \u003Ckey>UIWindowSceneSessionRoleApplication\u003C\u002Fkey>\n    \u003Carray>\n      \u003Cdict>\n        \u003Ckey>UISceneClassName\u003C\u002Fkey>\n        \u003Cstring>UIWindowScene\u003C\u002Fstring>\n        \u003Ckey>UISceneDelegateClassName\u003C\u002Fkey>\n        \u003Cstring>FlutterSceneDelegate\u003C\u002Fstring>\n        \u003Ckey>UISceneConfigurationName\u003C\u002Fkey>\n        \u003Cstring>flutter\u003C\u002Fstring>\n        \u003Ckey>UISceneStoryboardFile\u003C\u002Fkey>\n        \u003Cstring>Main\u003C\u002Fstring>\n      \u003C\u002Fdict>\n    \u003C\u002Farray>\n  \u003C\u002Fdict>\n\u003C\u002Fdict>\n","xml",[186,1699,1700,1705,1710,1715,1720,1725,1730,1735,1740,1745,1750,1755,1760,1766,1772,1778,1784,1790,1796,1802,1808],{"__ignoreMap":383},[1549,1701,1702],{"class":1551,"line":1552},[1549,1703,1704],{},"\u003Ckey>UIApplicationSceneManifest\u003C\u002Fkey>\n",[1549,1706,1707],{"class":1551,"line":384},[1549,1708,1709],{},"\u003Cdict>\n",[1549,1711,1712],{"class":1551,"line":390},[1549,1713,1714],{},"  \u003Ckey>UIApplicationSupportsMultipleScenes\u003C\u002Fkey>\n",[1549,1716,1717],{"class":1551,"line":1568},[1549,1718,1719],{},"  \u003Cfalse\u002F>\n",[1549,1721,1722],{"class":1551,"line":1574},[1549,1723,1724],{},"  \u003Ckey>UISceneConfigurations\u003C\u002Fkey>\n",[1549,1726,1727],{"class":1551,"line":1580},[1549,1728,1729],{},"  \u003Cdict>\n",[1549,1731,1732],{"class":1551,"line":1586},[1549,1733,1734],{},"    \u003Ckey>UIWindowSceneSessionRoleApplication\u003C\u002Fkey>\n",[1549,1736,1737],{"class":1551,"line":1592},[1549,1738,1739],{},"    \u003Carray>\n",[1549,1741,1742],{"class":1551,"line":1598},[1549,1743,1744],{},"      \u003Cdict>\n",[1549,1746,1747],{"class":1551,"line":1604},[1549,1748,1749],{},"        \u003Ckey>UISceneClassName\u003C\u002Fkey>\n",[1549,1751,1752],{"class":1551,"line":1610},[1549,1753,1754],{},"        \u003Cstring>UIWindowScene\u003C\u002Fstring>\n",[1549,1756,1757],{"class":1551,"line":1615},[1549,1758,1759],{},"        \u003Ckey>UISceneDelegateClassName\u003C\u002Fkey>\n",[1549,1761,1763],{"class":1551,"line":1762},13,[1549,1764,1765],{},"        \u003Cstring>FlutterSceneDelegate\u003C\u002Fstring>\n",[1549,1767,1769],{"class":1551,"line":1768},14,[1549,1770,1771],{},"        \u003Ckey>UISceneConfigurationName\u003C\u002Fkey>\n",[1549,1773,1775],{"class":1551,"line":1774},15,[1549,1776,1777],{},"        \u003Cstring>flutter\u003C\u002Fstring>\n",[1549,1779,1781],{"class":1551,"line":1780},16,[1549,1782,1783],{},"        \u003Ckey>UISceneStoryboardFile\u003C\u002Fkey>\n",[1549,1785,1787],{"class":1551,"line":1786},17,[1549,1788,1789],{},"        \u003Cstring>Main\u003C\u002Fstring>\n",[1549,1791,1793],{"class":1551,"line":1792},18,[1549,1794,1795],{},"      \u003C\u002Fdict>\n",[1549,1797,1799],{"class":1551,"line":1798},19,[1549,1800,1801],{},"    \u003C\u002Farray>\n",[1549,1803,1805],{"class":1551,"line":1804},20,[1549,1806,1807],{},"  \u003C\u002Fdict>\n",[1549,1809,1811],{"class":1551,"line":1810},21,[1549,1812,1813],{},"\u003C\u002Fdict>\n",[14,1815,1816,1817,1820,1821,1823,1824,1827,1828,1831],{},"If you made your own scene delegate subclass, Flutter's page says to put its name in ",[186,1818,1819],{},"UISceneDelegateClassName"," instead of ",[186,1822,1659],{},": ",[186,1825,1826],{},"$(PRODUCT_MODULE_NAME).SceneDelegate"," for Swift projects, ",[186,1829,1830],{},"SceneDelegate"," for Objective-C.",[31,1833,1835],{"id":1834},"plugins-and-add-to-app","Plugins and add-to-app",[217,1837,1838,1844],{},[220,1839,1840,1843],{},[17,1841,1842],{},"Plugins:"," Flutter's page has a separate guide for plugins that use iOS application lifecycle events. My advice: update every plugin to its latest version, then test anything that reacts to the app opening, resuming or receiving a link, such as push notifications, deep links, sign-in and payments.",[220,1845,1846,1849,1850,313],{},[17,1847,1848],{},"Add-to-app:"," if Flutter is embedded in a native iOS app, Flutter's page has its own section, including what to do if you can't subclass ",[186,1851,1659],{},[31,1853,1855],{"id":1854},"what-to-test","What to test",[14,1857,1858],{},"This section is my advice, not Flutter's or Apple's.",[303,1860,1861,1867,1876,1887],{},[220,1862,1863,1866],{},[17,1864,1865],{},"Build with Xcode 27 and launch on a device."," If it launches, open each screen once.",[220,1868,1869,1872,1873,1875],{},[17,1870,1871],{},"Cold start from a push notification and from a deep link."," Launch options are ",[186,1874,1672],{}," after the migration, so these are the paths most likely to break.",[220,1877,1878,1881,1882,1495,1884,313],{},[17,1879,1880],{},"Background and foreground the app."," Check anything that used to run in ",[186,1883,1655],{},[186,1885,1886],{},"applicationWillResignActive",[220,1888,1889,1892],{},[17,1890,1891],{},"Ship through TestFlight first."," Check the same paths on a build installed the way users get it.",[14,1894,361,1895,313],{},[69,1896,365],{"href":364},[31,1898,369],{"id":368},[14,1900,1901,1902,1904,1905,1909,1910,313],{},"If a Flutter iOS app won't launch after building with Xcode 27, or broke after the UIScene migration, the ",[69,1903,376],{"href":375}," covers it in two fixed-price steps. A $450 Diagnosis gives you the root cause with evidence and a fixed repair quote within 3 business days, credited toward the fix. If you go ahead, the $1,200 Fix takes 5 business days and comes as a pull request. If the iOS build itself fails, see ",[69,1906,1908],{"href":1907},"\u002Fblog\u002Fflutter-ios-build-failed-after-upgrade-2026\u002F","Flutter iOS build failed after an upgrade",", or ",[69,1911,381],{"href":380},[1913,1914,1915],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":383,"searchDepth":384,"depth":384,"links":1917},[1918,1919,1920,1925,1926,1927],{"id":1350,"depth":384,"text":1351},{"id":1484,"depth":384,"text":1485},{"id":1509,"depth":384,"text":1510,"children":1921},[1922,1923,1924],{"id":1520,"depth":390,"text":1521},{"id":1645,"depth":390,"text":1646},{"id":1680,"depth":390,"text":1681},{"id":1834,"depth":384,"text":1835},{"id":1854,"depth":384,"text":1855},{"id":368,"depth":384,"text":369},"2026-10-18T23:55:00.000Z","Xcode 27 shipped on September 14, 2026, and Flutter's docs say Flutter iOS apps built with it that haven't adopted the UIScene lifecycle fail to launch. Which Flutter versions migrate automatically, the manual AppDelegate and Info.plist changes, and what plugins need, from Flutter's and Apple's docs checked October 18, 2026.",[1931,1934,1937,1940,1943],{"question":1932,"answer":1933},"Why does my Flutter app crash on launch when built with Xcode 27?","Flutter's UIScene page says Flutter apps built with Xcode 27 (iOS 27 SDK) that haven't adopted the UIScene lifecycle fail to launch on startup. Apple announced at WWDC25 that UIKit apps built with the SDK after iOS 26 must use the UIScene life cycle. The fix is the UIScene migration.",{"question":1935,"answer":1936},"Does Flutter migrate to UIScene automatically?","From Flutter 3.41, yes, if your AppDelegate is unmodified. Run flutter run or flutter build ios, and Flutter's docs say the CLI prints \"Finished migration to UIScene lifecycle\" when it succeeds. With a custom AppDelegate, or on a Flutter version before 3.41, you migrate by hand.",{"question":1938,"answer":1939},"How do I migrate a Flutter app to UIScene by hand?","Per Flutter's docs: make AppDelegate conform to FlutterImplicitEngineDelegate, move GeneratedPluginRegistrant registration and any method channels into didInitializeImplicitFlutterEngine, move UI lifecycle logic to a scene delegate, and add a UIApplicationSceneManifest to Info.plist with FlutterSceneDelegate as the delegate class.",{"question":1941,"answer":1942},"Do I have to upload with Xcode 27 now?","Not yet, but soon. Since April 28, 2026 the minimum is Xcode 26 with an iOS 26 SDK. Apple's September 9, 2026 news post says that starting April 2027, iOS and iPadOS apps uploaded to App Store Connect must be built with the iOS 27 and iPadOS 27 SDK or later, which means Xcode 27. Apple gives the month, not a day. The crash happens as soon as you build with Xcode 27, so the migration has to be done before April 2027.",{"question":1944,"answer":1945},"Can I turn UIScene off temporarily?","Flutter's docs say you can, by putting an underscore in front of Application Scene Manifest in Info.plist, and that the pubspec setting enable-uiscene-migration: false hides the CLI warning. In my view, both only make sense while you build with Xcode 26, because an app built with Xcode 27 without UIScene won't launch.",{"readingTimeStats":1947},{"text":1948,"minutes":1949,"time":1950,"words":1951},"5 min read",4.785,287100,957,"\u002Fblog\u002Fflutter-uiscene-migration-xcode-27-app-wont-launch-2026","flutter uiscene migration",[1955,1273,1956],"flutter-ios-build-failed-after-upgrade-2026","flutter-deleted-android-v1-embedding-build-failed-2026",{"title":1318,"description":1929},[1959,1961,1963,1964,1966,1967,1969],{"title":1960,"url":462},"Flutter docs, UIScene adoption (last updated September 14, 2026)",{"title":1962,"url":1382},"Apple Developer, TN3187: Migrating to the UIKit scene-based life cycle",{"title":442,"url":160},{"title":1965,"url":71},"Apple Developer News, App Store submissions now open for the latest OS releases (September 9, 2026: iOS 27 SDK required starting April 2027)",{"title":450,"url":87},{"title":1968,"url":1397},"Flutter blog, What's new in Flutter 3.38",{"title":1970,"url":1402},"Flutter release archive (macOS)","blog\u002Fflutter-uiscene-migration-xcode-27-app-wont-launch-2026","flutter uiscene migration, flutter app crashes on launch xcode 27, uiscene lifecycle required ios 27, FlutterSceneDelegate, FlutterImplicitEngineDelegate, didInitializeImplicitFlutterEngine, UIApplicationSceneManifest flutter, enable-uiscene-migration, TN3187 flutter",[1974,1975,1976,1977,1978],"Apple said at WWDC25 that in the release after iOS 26, UIKit apps built with the latest SDK must use the UIScene life cycle, or they won't launch. Xcode 27, with the iOS 27 SDK, was released on September 14, 2026.","Flutter's docs say Flutter iOS apps built with Xcode 27 that haven't adopted UIScene fail to launch on startup.","Flutter 3.38 added UIScene support. From Flutter 3.41 (February 11, 2026), it is the default, and the Flutter CLI migrates apps with an unmodified AppDelegate automatically when you build or run.","A custom AppDelegate needs manual changes: register plugins in didInitializeImplicitFlutterEngine instead of didFinishLaunchingWithOptions, and add an Application Scene Manifest that uses FlutterSceneDelegate to Info.plist.","Plugins that rely on app lifecycle events such as applicationDidBecomeActive have to move to scene events, because UIKit stops calling the UI-related AppDelegate methods after the migration.","2026-10-19T08:15:00.000Z","https:\u002F\u002Fapp369.com\u002Fblog\u002Fflutter-uiscene-migration-xcode-27-app-wont-launch-2026\u002F","plnvjCQ-XelRUnCav0psvVJ4cKo2L_rva19uDZbHUDM",{"id":1983,"title":1984,"author":1985,"body":1987,"category":399,"createdAt":2309,"description":2310,"disclosure":402,"extension":403,"faq":2311,"howTo":402,"lastVerified":402,"location":420,"meta":2327,"navigation":427,"ogImage":402,"path":2333,"primaryKeyword":2334,"readingTime":1271,"related":2335,"seo":2337,"sources":2338,"stem":2372,"tags":2373,"takeaways":2374,"updatedAt":1979,"url":2380,"__hash__":2381},"blog\u002Fblog\u002Fitms-90725-sdk-version-issue-xcode-26-flutter-2026.md","ITMS-90725 SDK Version Issue: Fix in Flutter (Xcode 26)",{"name":7,"social":1986},{"twitter":9},{"type":11,"value":1988,"toc":2297},[1989,1995,1998,2003,2007,2010,2016,2019,2023,2094,2100,2103,2107,2115,2119,2122,2146,2164,2168,2185,2191,2195,2202,2240,2247,2251,2258,2261,2264,2268,2271,2275,2281,2285,2287,2294],[14,1990,1991,1994],{},[17,1992,1993],{},"If App Store Connect shows ITMS-90725 \"SDK version issue,\" the build you uploaded was made with an older SDK than Apple now accepts, and the fix is to rebuild it with Xcode 26 or later."," Apple's upcoming requirements page says that since April 28, 2026, apps uploaded to App Store Connect must be built with Xcode 26 or later using an SDK for iOS 26, iPadOS 26, tvOS 26, visionOS 26 or watchOS 26. In a Flutter app, that often means the Mac or CI machine that builds the IPA is still running Xcode 16.",[14,1996,1997],{},"The facts below come from Apple's requirements and release pages, Flutter's docs and source, and GitHub's runner image lists, as shown in the sources. I checked each one on October 18, 2026.",[14,1999,2000,2002],{},[17,2001,28],{}," App369 is my studio. I build and fix Android and iOS apps, mostly in Flutter, and the last section mentions what I sell. Apple doesn't pay me for anything on this page.",[31,2004,2006],{"id":2005},"what-the-error-says","What the error says",[14,2008,2009],{},"The wording below is a developer's copy of the email, posted in an Apple Developer Forums thread in January 2026. It is not Apple's own documentation:",[2011,2012,2013],"blockquote",{},[14,2014,2015],{},"This app was built with the iOS 18.2 SDK. Starting April 2026, all iOS and iPadOS apps must be built with the iOS 26 SDK or later, included in Xcode 26 or later, in order to be uploaded to App Store Connect or submitted for distribution.",[14,2017,2018],{},"The same thread shows the message arrived months before the date it names. A GitHub issue in a project named pot-g-flutter, dated February 2026, describes the same warning on a build made with the iOS 18.5 SDK. Your email will name the SDK your build used. That number tells you how far behind your build machine is.",[31,2020,2022],{"id":2021},"what-apple-requires-today","What Apple requires today",[36,2024,2025,2036],{},[39,2026,2027],{},[42,2028,2029,2031,2034],{},[45,2030,47],{},[45,2032,2033],{},"What Apple says",[45,2035,53],{},[55,2037,2038,2054,2067,2080],{},[42,2039,2040,2045,2048],{},[60,2041,2042],{},[17,2043,2044],{},"Since April 28, 2026",[60,2046,2047],{},"\"Apps uploaded to App Store Connect must be built with Xcode 26 or later using an SDK for iOS 26, iPadOS 26, tvOS 26, visionOS 26, or watchOS 26.\"",[60,2049,2050],{},[69,2051,2053],{"href":160,"rel":2052},[73],"Apple, upcoming requirements",[42,2055,2056,2059,2062],{},[60,2057,2058],{},"Since September 9, 2026",[60,2060,2061],{},"iOS and iPadOS apps uploaded to App Store Connect must target iOS 13 or later. This is a minimum deployment target, not an SDK rule",[60,2063,2064],{},[69,2065,2053],{"href":160,"rel":2066},[73],[42,2068,2069,2071,2074],{},[60,2070,79],{},[60,2072,2073],{},"Xcode 27 released. Apple's releases page lists Xcode 27.1 as the newest release, dated October 15, 2026",[60,2075,2076],{},[69,2077,2079],{"href":87,"rel":2078},[73],"Apple, releases",[42,2081,2082,2086,2089],{},[60,2083,2084,1459],{},[17,2085,138],{},[60,2087,2088],{},"\"Starting April 2027, apps and games uploaded to App Store Connect need to meet the following minimum requirements: iOS and iPadOS apps must be built with the iOS 27 & iPadOS 27 SDK or later\"",[60,2090,2091],{},[69,2092,1470],{"href":71,"rel":2093},[73],[14,2095,2096,2097,2099],{},"The upcoming requirements page still lists Xcode 26 or later as the current minimum, but Apple's September 9, 2026 news post sets the next one: starting April 2027, uploads must be built with the iOS 27 and iPadOS 27 SDK or later, which means Xcode 27. Apple gives the month, not a day. My advice: build with Xcode 26.6 for now, and move to Xcode 27 well before April 2027, once the app has migrated to UIScene. Read the ",[69,2098,273],{"href":272}," before you move a Flutter app to Xcode 27.",[14,2101,2102],{},"Apple doesn't say whether this is a warning or a rejection. Its page says apps \"must be built\" this way, so plan on fixing it, not waiting to see.",[31,2104,2106],{"id":2105},"step-1-install-the-required-xcode","Step 1: Install the required Xcode",[303,2108,2109,2112],{},[220,2110,2111],{},"Install Xcode 26 or later from the Mac App Store or Apple's developer downloads. Apple's releases page lists Xcode 26.6 (June 25, 2026) as the newest Xcode 26 release.",[220,2113,2114],{},"Open it once and let it install its components.",[31,2116,2118],{"id":2117},"step-2-make-the-command-line-use-it","Step 2: Make the command line use it",[14,2120,2121],{},"A Flutter build runs through the command-line tools, so the selected Xcode matters, not the one you last opened. Flutter's iOS setup page gives this command for pointing the tools at an Xcode install:",[1541,2123,2127],{"className":2124,"code":2125,"language":2126,"meta":383,"style":383},"language-bash shiki shiki-themes github-light github-dark","sudo sh -c 'xcode-select -s \u002FApplications\u002FXcode.app\u002FContents\u002FDeveloper && xcodebuild -runFirstLaunch'\n","bash",[186,2128,2129],{"__ignoreMap":383},[1549,2130,2131,2135,2139,2143],{"class":1551,"line":1552},[1549,2132,2134],{"class":2133},"sScJk","sudo",[1549,2136,2138],{"class":2137},"sZZnC"," sh",[1549,2140,2142],{"class":2141},"sj4cs"," -c",[1549,2144,2145],{"class":2137}," 'xcode-select -s \u002FApplications\u002FXcode.app\u002FContents\u002FDeveloper && xcodebuild -runFirstLaunch'\n",[14,2147,2148,2149,2152,2153,2156,2157,2160,2161,2163],{},"Replace ",[186,2150,2151],{},"\u002FApplications\u002FXcode.app"," if you installed it somewhere else. Apple's TN2339 documents ",[186,2154,2155],{},"xcode-select --print-path"," to see the current selection, and ",[186,2158,2159],{},"xcode-select -switch"," to change it. Then run ",[186,2162,243],{}," to see the version in use. My advice: do this on every Mac that builds the app, including old laptops and CI machines you forgot about.",[31,2165,2167],{"id":2166},"step-3-dont-trust-flutter-doctor-for-this","Step 3: Don't trust flutter doctor for this",[14,2169,2170,2173,2174,2177,2178,2181,2182,2184],{},[186,2171,2172],{},"flutter doctor"," checks Xcode, but not against Apple's upload rule. In the Flutter source on the master branch, ",[186,2175,2176],{},"xcodeRequiredVersion"," is 15 and ",[186,2179,2180],{},"xcodeRecommendedVersion"," is 16. The doctor warns below the recommended version. Xcode 16 passes that check but would still trigger ITMS-90725. So a clean doctor result doesn't mean Apple will accept the build. Check ",[186,2183,243],{}," yourself.",[14,2186,2187,2188,313],{},"If your Flutter is old and the build breaks under Xcode 26, upgrade Flutter and see ",[69,2189,2190],{"href":1907},"the iOS build-failed-after-upgrade guide",[31,2192,2194],{"id":2193},"step-4-rebuild-pods-and-the-archive","Step 4: Rebuild pods and the archive",[14,2196,2197,2198,2201],{},"After switching Xcode, old build output can linger. Work from least to most destructive, from the ",[186,2199,2200],{},"ios"," folder:",[303,2203,2204,2209,2229],{},[220,2205,2206,313],{},[186,2207,2208],{},"pod install --repo-update",[220,2210,2211,2212,1164,2215,2218,2219,150,2222,2225,2226,2228],{},"If pods still build against the old toolchain, delete ",[186,2213,2214],{},"Pods",[186,2216,2217],{},"Podfile.lock",", run ",[186,2220,2221],{},"flutter clean",[186,2223,2224],{},"flutter pub get",", then ",[186,2227,2208],{}," again.",[220,2230,2231,2232,2235,2236,2239],{},"Build the archive with ",[186,2233,2234],{},"flutter build ipa",", or archive in Xcode from ",[186,2237,2238],{},"ios\u002FRunner.xcworkspace",", and upload again.",[14,2241,2242,2243,2246],{},"The ",[69,2244,2245],{"href":1907},"build-failed guide"," covers the deployment target, CocoaPods and plugin mismatches in more detail. Keep the two targets apart: the SDK is what you build with, and the deployment target is the oldest iOS you support. Apple's September 9, 2026 entry only requires iOS 13 or later. Your plugins may ask for more.",[31,2248,2250],{"id":2249},"fix-it-on-ci","Fix it on CI",[14,2252,2253,2254,2257],{},"If the upload comes from a build server, the server's Xcode decides the SDK. For GitHub Actions, the macOS 26 arm64 image readme I read lists Xcode 26.6 as the default, along with 26.5, 26.4.1, 26.3, 26.2, 26.1.1 and 26.0.1. It also lists CocoaPods 1.17.0. GitHub announced a separate ",[186,2255,2256],{},"xcode-27"," image label in July 2026, marked preview, and its readme lists Xcode 27.0 as that image's default.",[14,2259,2260],{},"If your workflow pins an older image or selects an old Xcode, change it. Older images list different Xcode versions, so check the readme for the image your workflow uses.",[14,2262,2263],{},"On other CI services, such as Codemagic, check the provider's own page for the Xcode versions it offers.",[31,2265,2267],{"id":2266},"other-services-that-build-for-you","Other services that build for you",[14,2269,2270],{},"The warning can also reach people who don't run the build themselves. If a hosted or no-code builder makes your iOS build, the Xcode it uses is the vendor's choice. Check its documentation for the Xcode version, and if it is older than 26, export the project and build it locally with Xcode 26 or later, or wait for the vendor to upgrade.",[31,2272,2274],{"id":2273},"related-errors","Related errors",[14,2276,2277,2278,313],{},"If the next email is about privacy manifests, see ",[69,2279,2280],{"href":1147},"ITMS-91053 and ITMS-91061",[14,2282,361,2283,313],{},[69,2284,365],{"href":364},[31,2286,369],{"id":368},[14,2288,2289,2290,377,2292,313],{},"If App Store Connect keeps rejecting your build with ITMS-90725, or the app breaks after the Xcode upgrade, the ",[69,2291,376],{"href":375},[69,2293,381],{"href":380},[1913,2295,2296],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":383,"searchDepth":384,"depth":384,"links":2298},[2299,2300,2301,2302,2303,2304,2305,2306,2307,2308],{"id":2005,"depth":384,"text":2006},{"id":2021,"depth":384,"text":2022},{"id":2105,"depth":384,"text":2106},{"id":2117,"depth":384,"text":2118},{"id":2166,"depth":384,"text":2167},{"id":2193,"depth":384,"text":2194},{"id":2249,"depth":384,"text":2250},{"id":2266,"depth":384,"text":2267},{"id":2273,"depth":384,"text":2274},{"id":368,"depth":384,"text":369},"2026-10-18T20:00:00.000Z","ITMS-90725 SDK version issue means App Store Connect saw an app built with an older SDK than it now accepts. What Apple's upcoming requirements page says about Xcode 26 today, and how to fix it in a Flutter app, from Apple's, Flutter's and GitHub's sources checked October 18, 2026.",[2312,2315,2318,2321,2324],{"question":2313,"answer":2314},"What does ITMS-90725 SDK version issue mean?","It means App Store Connect found that the app was built with an older SDK than Apple now requires. A forum post from January 2026 quotes the message as: \"This app was built with the iOS 18.2 SDK. Starting April 2026, all iOS and iPadOS apps must be built with the iOS 26 SDK or later, included in Xcode 26 or later.\" The fix is to rebuild with Xcode 26 or later.",{"question":2316,"answer":2317},"What Xcode version does Apple require right now?","Apple's upcoming requirements page says that since April 28, 2026, apps uploaded to App Store Connect must be built with Xcode 26 or later using an SDK for iOS 26, iPadOS 26, tvOS 26, visionOS 26 or watchOS 26. Apple's September 9, 2026 news post adds that starting April 2027, uploads must be built with the iOS 27 and iPadOS 27 SDK or later. Apple gives the month, not a day.",{"question":2319,"answer":2320},"Do I need Xcode 27 to upload?","Not yet. Xcode 26 or later is the minimum until April 2027. Apple's September 9, 2026 news post says that starting April 2027, iOS and iPadOS apps must be built with the iOS 27 and iPadOS 27 SDK or later, which means Xcode 27. Apple gives the month, not a day. Xcode 27 changes Flutter apps in one way: see the UIScene guide before you switch.",{"question":2322,"answer":2323},"Does this raise my minimum iOS version?","No. The SDK you build with is separate from the iOS version you support. Apple's page has a separate entry saying that since September 9, 2026, iOS and iPadOS apps uploaded to App Store Connect must target iOS 13 or later. Your plugins may require a higher target than that.",{"question":2325,"answer":2326},"Does the version already in the App Store stop working?","I found no Apple statement on that. A reply in a 2024 Apple forum thread, from a user who isn't identified as Apple staff, said the version already in the store is unaffected. Treat that as a forum opinion. The rule applies to new uploads.",{"readingTimeStats":2328},{"text":2329,"minutes":2330,"time":2331,"words":2332},"6 min read",5.7,342000,1140,"\u002Fblog\u002Fitms-90725-sdk-version-issue-xcode-26-flutter-2026","itms-90725",[2336,433,1955],"apple-privacy-manifest-itms-91053-itms-91061-flutter-fix-2026",{"title":1984,"description":2310},[2339,2341,2342,2344,2347,2350,2353,2354,2357,2360,2363,2366,2369],{"title":2340,"url":160},"Apple Developer, Upcoming requirements (SDK minimum requirements since April 28, 2026)",{"title":1965,"url":71},{"title":2343,"url":87},"Apple Developer, Releases (Xcode 27 on September 14, 2026; Xcode 26.6)",{"title":2345,"url":2346},"Apple Developer Forums, 90725: SDK version issue - iOS SDK 26 support (January 2026)","https:\u002F\u002Fdeveloper.apple.com\u002Fforums\u002Fthread\u002F813123",{"title":2348,"url":2349},"Apple Developer Forums, ITMS-90725: SDK version issue (April 2024)","https:\u002F\u002Fdeveloper.apple.com\u002Fforums\u002Fthread\u002F750346",{"title":2351,"url":2352},"Apple Developer, Technical Note TN2339 (xcode-select)","https:\u002F\u002Fdeveloper.apple.com\u002Flibrary\u002Farchive\u002Ftechnotes\u002Ftn2339\u002F_index.html",{"title":458,"url":459},{"title":2355,"url":2356},"Flutter on GitHub, xcode_validator.dart (Xcode messages for flutter doctor)","https:\u002F\u002Fgithub.com\u002Fflutter\u002Fflutter\u002Fblob\u002Fmaster\u002Fpackages\u002Fflutter_tools\u002Flib\u002Fsrc\u002Fmacos\u002Fxcode_validator.dart",{"title":2358,"url":2359},"Flutter on GitHub, xcode.dart (required and recommended Xcode versions)","https:\u002F\u002Fgithub.com\u002Fflutter\u002Fflutter\u002Fblob\u002Fmaster\u002Fpackages\u002Fflutter_tools\u002Flib\u002Fsrc\u002Fmacos\u002Fxcode.dart",{"title":2361,"url":2362},"gsainfoteam\u002Fpot-g-flutter on GitHub, issue 437 (a Flutter team hitting ITMS-90725, February 2026)","https:\u002F\u002Fgithub.com\u002Fgsainfoteam\u002Fpot-g-flutter\u002Fissues\u002F437",{"title":2364,"url":2365},"GitHub Actions runner images, macOS 26 (arm64) readme","https:\u002F\u002Fgithub.com\u002Factions\u002Frunner-images\u002Fblob\u002Fmain\u002Fimages\u002Fmacos\u002Fmacos-26-arm64-Readme.md",{"title":2367,"url":2368},"GitHub Actions runner images, macOS 27 \u002F Xcode 27 (arm64) readme","https:\u002F\u002Fgithub.com\u002Factions\u002Frunner-images\u002Fblob\u002Fmain\u002Fimages\u002Fmacos\u002Fxcode-27-arm64-Readme.md",{"title":2370,"url":2371},"GitHub Actions runner images, issue 14404 (Xcode 27 preview and the xcode-27 label)","https:\u002F\u002Fgithub.com\u002Factions\u002Frunner-images\u002Fissues\u002F14404","blog\u002Fitms-90725-sdk-version-issue-xcode-26-flutter-2026","itms-90725, sdk version issue, itms-90725 sdk version issue, app store connect xcode 26 required, built with ios 18 sdk, ios 26 sdk required, flutter xcode 26, xcode-select flutter, flutter doctor xcode, github actions xcode 26",[2375,2376,2377,2378,2379],"ITMS-90725 means the build you uploaded was made with an older SDK than App Store Connect accepts. Apple's upcoming requirements page says that since April 28, 2026, uploads must be built with Xcode 26 or later using an SDK for iOS 26, iPadOS 26, tvOS 26, visionOS 26 or watchOS 26.","The next step is set: Apple's September 9, 2026 news post says that starting April 2027, iOS and iPadOS apps must be built with the iOS 27 and iPadOS 27 SDK or later, which means Xcode 27. Apple gives the month, not a day. Until then, Xcode 26 or later is the minimum.","In a Flutter app the fix is to build the upload with Xcode 26 or later. Check which Xcode the command line uses with xcode-select -p, because Flutter builds with the selected one.","flutter doctor will not warn you. In the Flutter source I read, the required Xcode version is 15 and the recommended one is 16, far below Apple's minimum.","On CI, the build machine decides the SDK. GitHub's macOS 26 runner image lists Xcode 26.0.1 to 26.6, with 26.6 as the default, and a separate xcode-27 image exists.","https:\u002F\u002Fapp369.com\u002Fblog\u002Fitms-90725-sdk-version-issue-xcode-26-flutter-2026\u002F","oAXnvBdgCqDUNb0hcwhDti1LiTTtXo4gk0yB2glSin4",[2383,2385,2386,2389,2390,2393],{"keyword":5,"url":476,"title":5,"relevance":2384},80,{"keyword":1984,"url":2380,"title":1984,"relevance":1604},{"keyword":2387,"url":2388,"title":2387,"relevance":1598},"Flutter iOS Build Failed After an Upgrade? Fix CocoaPods and Xcode Errors (2026)","https:\u002F\u002Fapp369.com\u002Fblog\u002Fflutter-ios-build-failed-after-upgrade-2026\u002F",{"keyword":1318,"url":1980,"title":1318,"relevance":1592},{"keyword":2391,"url":2392,"title":2391,"relevance":1586},"Flutter vs React Native: Which Is Best?","https:\u002F\u002Fapp369.com\u002Fblog\u002Fflutter-vs-react-native-app369-choice\u002F",{"keyword":2394,"url":2395,"title":2394,"relevance":1580},"Flutter vs Native in 2026: An Honest Decision Guide","https:\u002F\u002Fapp369.com\u002Fblog\u002Fflutter-vs-native-app-development-2026\u002F",1792391282078]