[{"data":1,"prerenderedAt":2392},["ShallowReactive",2],{"\u002Fblog\u002Fadmob-google-mobile-ads-sdk-sunset-versions-2027\u002F":3,"\u002Fblog\u002Fadmob-google-mobile-ads-sdk-sunset-versions-2027\u002F-related":855,"\u002Fblog\u002Fadmob-google-mobile-ads-sdk-sunset-versions-2027\u002F-resources":2373},{"id":4,"title":5,"author":6,"body":10,"category":779,"createdAt":780,"description":781,"disclosure":782,"extension":783,"faq":784,"howTo":782,"lastVerified":782,"location":800,"meta":801,"navigation":807,"ogImage":782,"path":808,"primaryKeyword":809,"readingTime":810,"related":811,"seo":815,"sources":816,"stem":845,"tags":846,"takeaways":847,"updatedAt":780,"url":853,"__hash__":854},"blog\u002Fblog\u002Fadmob-google-mobile-ads-sdk-sunset-versions-2027.md","Google Mobile Ads SDK Sunset Dates and Versions 2027",{"name":7,"social":8},"Simon Dziak",{"twitter":9},"@SzymonDziak",{"type":11,"value":12,"toc":768},"minimark",[13,21,24,30,35,38,278,295,298,326,330,333,353,356,359,363,366,389,407,429,447,460,464,467,583,586,597,608,611,615,618,688,691,694,698,745,752,756],[14,15,16,20],"p",{},[17,18,19],"strong",{},"Google's Mobile Ads SDK timetables list the following sunset dates: on Android, v23.x.x on June 30, 2027 and v24.x.x and v25.x.x on June 30, 2028; on iOS, v11.x.x in Q2 2027, v12.x.x in Q2 2028 and v13.x.x in Q2 2029."," The iOS dates are quarters only, and Google says a more specific v11 date will come with two months' notice. At sunset, Google says ad requests return a no fill with an error saying the version is sunset, so the app keeps running but earns nothing from that placement. If you ship AdMob in a native or Flutter app, find your SDK version now and update well before the date.",[14,22,23],{},"I checked Google's pages on October 19, 2026. Both deprecation pages show \"Last updated 2026-10-16 UTC\". Google 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. Google doesn't pay me for anything on this page.",[31,32,34],"h2",{"id":33},"the-dated-table","The dated table",[14,36,37],{},"These are the rows exactly as Google's timetables state them, with the status column as shown on October 19, 2026.",[39,40,41,63],"table",{},[42,43,44],"thead",{},[45,46,47,51,54,57,60],"tr",{},[48,49,50],"th",{},"Platform",[48,52,53],{},"Version",[48,55,56],{},"Status",[48,58,59],{},"Deprecation",[48,61,62],{},"Sunset",[64,65,66,84,97,114,129,144,159,174,190,205,223,237,251,265],"tbody",{},[45,67,68,72,75,78,81],{},[69,70,71],"td",{},"Android",[69,73,74],{},"v25.x.x",[69,76,77],{},"Supported",[69,79,80],{},"June 30, 2027",[69,82,83],{},"June 30, 2028",[45,85,86,88,91,93,95],{},[69,87,71],{},[69,89,90],{},"v24.x.x",[69,92,77],{},[69,94,80],{},[69,96,83],{},[45,98,99,101,104,107,110],{},[69,100,71],{},[69,102,103],{},"v23.x.x",[69,105,106],{},"Deprecated",[69,108,109],{},"February 17, 2026",[69,111,112],{},[17,113,80],{},[45,115,116,118,121,123,126],{},[69,117,71],{},[69,119,120],{},"v22.x.x",[69,122,62],{},[69,124,125],{},"February 24, 2025",[69,127,128],{},"June 30, 2026",[45,130,131,133,136,138,141],{},[69,132,71],{},[69,134,135],{},"v21.x.x",[69,137,62],{},[69,139,140],{},"March 7, 2024",[69,142,143],{},"June 30, 2025",[45,145,146,148,151,153,156],{},[69,147,71],{},[69,149,150],{},"v20.x.x",[69,152,62],{},[69,154,155],{},"March 29, 2023",[69,157,158],{},"June 30, 2024",[45,160,161,163,166,168,171],{},[69,162,71],{},[69,164,165],{},"v7.x.x to v19.x.x",[69,167,62],{},[69,169,170],{},"September 30, 2022",[69,172,173],{},"June 30, 2023",[45,175,176,179,182,184,187],{},[69,177,178],{},"iOS",[69,180,181],{},"v13.x.x",[69,183,77],{},[69,185,186],{},"Q1 2028",[69,188,189],{},"Q2 2029",[45,191,192,194,197,199,202],{},[69,193,178],{},[69,195,196],{},"v12.x.x",[69,198,77],{},[69,200,201],{},"Q1 2027",[69,203,204],{},"Q2 2028",[45,206,207,209,212,214,217],{},[69,208,178],{},[69,210,211],{},"v11.x.x",[69,213,106],{},[69,215,216],{},"February 4, 2026",[69,218,219,222],{},[17,220,221],{},"Q2 2027"," (footnote 1)",[45,224,225,227,230,232,235],{},[69,226,178],{},[69,228,229],{},"v10.x.x",[69,231,106],{},[69,233,234],{},"February 3, 2025",[69,236,128],{},[45,238,239,241,244,246,249],{},[69,240,178],{},[69,242,243],{},"v9.x.x",[69,245,62],{},[69,247,248],{},"February 6, 2024",[69,250,143],{},[45,252,253,255,258,260,263],{},[69,254,178],{},[69,256,257],{},"v8.x.x",[69,259,62],{},[69,261,262],{},"January 26, 2023",[69,264,158],{},[45,266,267,269,272,274,276],{},[69,268,178],{},[69,270,271],{},"v7.x.x",[69,273,62],{},[69,275,170],{},[69,277,173],{},[14,279,280,281,288,289,294],{},"Sources: ",[282,283,287],"a",{"href":284,"rel":285},"https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fandroid\u002Fdeprecation",[286],"nofollow","Android timetable",", ",[282,290,293],{"href":291,"rel":292},"https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fios\u002Fdeprecation",[286],"iOS timetable",".",[14,296,297],{},"A few things to read carefully:",[299,300,301,308,314,320],"ul",{},[302,303,304,307],"li",{},[17,305,306],{},"Quarters, not dates."," For iOS v11, v12 and v13, Google gives a quarter for the sunset. Footnote 1 says: \"A more specific sunset date will be announced on the Google Ads Developer blog and updated on this page with two months' notice.\" I can't tell you which day in Q2 2027 it is, because Google hasn't said.",[302,309,310,313],{},[17,311,312],{},"iOS v10."," The table still lists v10.x.x as \"Deprecated\" although its June 30, 2026 sunset date has passed. Treat it as already sunset and leave it.",[302,315,316,319],{},[17,317,318],{},"Dates can move."," Both pages say a version may be sunset earlier than the schedule, with advance communication.",[302,321,322,325],{},[17,323,324],{},"The lifecycle rule."," Both pages say a major version is generally supported for about two years, deprecated for one more year, then sunset. When version N ships, N-2 becomes deprecated immediately and N-3 sunsets about two months later. The iOS page says Google plans one major release per year, in Q1.",[31,327,329],{"id":328},"what-sunset-means","What sunset means",[14,331,332],{},"Google's pages define three states.",[299,334,335,341,347],{},[302,336,337,340],{},[17,338,339],{},"Supported:"," ads serve, and technical support is available.",[302,342,343,346],{},[17,344,345],{},"Deprecated:"," ads still serve, but technical support is limited (Android) or no longer provided (iOS). You may be asked to reproduce issues on a supported version.",[302,348,349,352],{},[17,350,351],{},"Sunset:"," ads are at risk of not serving. When Google disables ad serving for a version, ad requests return a no fill with an error indicating that the version is sunset. Google says it disables serving gradually, starting with the oldest, lowest-usage versions.",[14,354,355],{},"So sunset is not a guaranteed switch-off on the date. It is the point where Google may turn your version off at any time, and there is no notice I could find for a given app. When it happens, your app does not crash because of Google. The ad slot just fails to fill, and your code sees a failed ad load. If you handle that as a normal failure, you will see empty ad spots and falling revenue, not an error screen. I have not tested the exact error string, so check your own logs for it.",[14,357,358],{},"My advice: do not plan around the sunset date. Plan around deprecation, when support ends. A version in the Deprecated row is already the one to move off.",[31,360,362],{"id":361},"how-to-check-which-version-you-ship","How to check which version you ship",[14,364,365],{},"The version lives in your dependency line. I did not find an official command to print it, so I'd read the files below and then confirm in a release build.",[14,367,368,371,372,376,377,380,381,384,385,388],{},[17,369,370],{},"Android (Gradle)."," Google's quick start shows the dependency as ",[373,374,375],"code",{},"implementation(\"com.google.android.gms:play-services-ads:25.5.0\")",", with the Groovy form ",[373,378,379],{},"implementation 'com.google.android.gms:play-services-ads:25.5.0'",". To update, change the version number and sync. The page says the Android SDK needs a minimum SDK version of 24 or higher, and a compile SDK version of 35 or higher. The migration page says the ",[373,382,383],{},"firebase-ads"," and ",[373,386,387],{},"firebase-ads-lite"," artifacts are no longer distributed from 24.0.0.",[14,390,391,394,395,398,399,402,403,406],{},[17,392,393],{},"iOS (CocoaPods)."," Google's quick start line is ",[373,396,397],{},"pod 'Google-Mobile-Ads-SDK'",", followed by ",[373,400,401],{},"pod install --repo-update",". Check ",[373,404,405],{},"Podfile.lock"," to see the resolved version.",[14,408,409,412,413,416,417,420,421,424,425,294],{},[17,410,411],{},"iOS (Swift Package Manager)."," Add the package in Xcode from ",[373,414,415],{},"https:\u002F\u002Fgithub.com\u002Fgoogleads\u002Fswift-package-manager-google-mobile-ads.git",". For new projects the page recommends \"Up to Next Major Version\". The page says to use Xcode 16.0 or higher and target iOS 13.0 or higher, and that Xcode 27 requires a minimum deployment target of iOS 15.0, so CocoaPods builds need a ",[373,418,419],{},"post_install"," hook that sets ",[373,422,423],{},"IPHONEOS_DEPLOYMENT_TARGET"," to 15.0. For the Xcode side of that, see ",[282,426,428],{"href":427},"\u002Fblog\u002Fios-27-sdk-requirement-april-2027-xcode-27-flutter\u002F","my iOS 27 SDK guide",[14,430,431,434,435,438,439,442,443,446],{},[17,432,433],{},"Flutter (pubspec.yaml)."," The plugin is the ",[373,436,437],{},"google_mobile_ads"," package, and pub.dev lists 9.1.0 as the latest, installed with ",[373,440,441],{},"google_mobile_ads: ^9.1.0",". In Flutter you don't set the native version directly. The plugin pulls it in, so you read the version from ",[373,444,445],{},"pubspec.lock"," and look it up in the plugin changelog below.",[14,448,449,450,452,453,384,456,459],{},"My advice: check all three files, not just one. A Flutter app has the plugin version in ",[373,451,445],{},", but the resolved native version also lands in ",[373,454,455],{},"android\u002F",[373,457,458],{},"ios\u002F"," build output. Confirm the native number there before you trust the plugin number.",[31,461,463],{"id":462},"the-flutter-plugin-and-native-sdk-versions","The Flutter plugin and native SDK versions",[14,465,466],{},"Google's Flutter quick start lists Flutter 3.38.1 or higher as a prerequisite. It does not say which native SDK versions are bundled. The pub.dev changelog does, release by release. Here are the lines I read that name a native version:",[39,468,469,482],{},[42,470,471],{},[45,472,473,476,479],{},[48,474,475],{},"Plugin version",[48,477,478],{},"Android GMA SDK",[48,480,481],{},"iOS GMA SDK",[64,483,484,495,506,517,528,539,550,561,572],{},[45,485,486,489,492],{},[69,487,488],{},"9.1.0",[69,490,491],{},"25.4.0",[69,493,494],{},"13.7.0",[45,496,497,500,503],{},[69,498,499],{},"9.0.0",[69,501,502],{},"25.3.0",[69,504,505],{},"13.3.0",[45,507,508,511,514],{},[69,509,510],{},"8.0.0",[69,512,513],{},"25.1.0",[69,515,516],{},"13.2.0",[45,518,519,522,525],{},[69,520,521],{},"7.0.0",[69,523,524],{},"24.9.0",[69,526,527],{},"12.14.0",[45,529,530,533,536],{},[69,531,532],{},"6.0.0",[69,534,535],{},"24.1.0",[69,537,538],{},"12.2.0",[45,540,541,544,547],{},[69,542,543],{},"5.3.0",[69,545,546],{},"23.6.0",[69,548,549],{},"11.13.0",[45,551,552,555,558],{},[69,553,554],{},"5.2.0",[69,556,557],{},"23.4.0",[69,559,560],{},"11.10.0",[45,562,563,566,569],{},[69,564,565],{},"5.0.0",[69,567,568],{},"23.0.0",[69,570,571],{},"11.2.0",[45,573,574,577,580],{},[69,575,576],{},"4.0.0",[69,578,579],{},"22.5.0",[69,581,582],{},"10.11.0",[14,584,585],{},"Read against the timetables above, that gives you a rough guide for a Flutter app:",[299,587,588,591,594],{},[302,589,590],{},"Plugin 5.x lines up with Android v23 and iOS v11, the two majors whose sunsets Google lists as June 30, 2027 and Q2 2027.",[302,592,593],{},"Plugin 4.0.0 lines up with Android v22, whose sunset in the table has passed, and iOS v10.",[302,595,596],{},"Plugin 6.0.0 and 7.0.0 line up with Android v24 and iOS v12. Plugin 8.0.0, 9.0.0 and 9.1.0 line up with Android v25 and iOS v13.",[14,598,599,600,603,604,607],{},"The changelog lists the Android Next-Gen SDK too: 9.1.0 shows \"Google Mobile Ads Next-Gen SDK version ",[373,601,602],{},"1.3.1","\" and 9.0.0 shows ",[373,605,606],{},"1.1.0",". It does not say whether the plugin uses it instead of, or beside, the legacy SDK, so I can't tell you.",[14,609,610],{},"What I could not confirm: whether the plugin has its own support or sunset policy, and whether older plugin versions stop working at the native sunset dates. I take that to follow from the native SDK, because the plugin wraps it, but no Flutter page I fetched says so.",[31,612,614],{"id":613},"updating","Updating",[14,616,617],{},"Google's Android and iOS migration pages are written as jumps from one major to the next. Read the page for each jump you make.",[299,619,620,644,657,675],{},[302,621,622,625,626,384,629,632,633,636,637,640,641,294],{},[17,623,624],{},"Android to v25."," Starting in v25.5.0, \"Google Mobile Ads SDK (Legacy) requires all apps to run on a minimum Android API level 24.\" It removes the ",[373,627,628],{},"onFailure(String)",[373,630,631],{},"onAdFailedToShow(String)"," callbacks in favor of the ",[373,634,635],{},"AdError"," overloads, and it replaces the anchored adaptive banner methods with \"Large\" variants. ",[373,638,639],{},"com.google.android.gms.ads.mediation.VersionInfo"," is removed in favor of ",[373,642,643],{},"com.google.android.gms.ads.VersionInfo",[302,645,646,649,650,653,654,294],{},[17,647,648],{},"iOS to v13."," The minimum deployment target rises to iOS 13, and the anchored adaptive banner functions are replaced by \"Large\" variants. ",[373,651,652],{},"neighboringContentURLStrings"," now raises an exception if the array contains an item that isn't a ",[373,655,656],{},"String",[302,658,659,662,663,666,667,670,671,674],{},[17,660,661],{},"GMA Next-Gen SDK (Android)."," Google's Next-Gen page shows ",[373,664,665],{},"implementation(\"com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk:1.5.0\")"," and says it needs ",[373,668,669],{},"minSdk"," 24 and ",[373,672,673],{},"compileSdk"," 34 or higher. It requires initialization before you load ads, which was optional in the legacy SDK. The page covers Android only.",[302,676,677,680,681,384,684,687],{},[17,678,679],{},"Mediation."," The Next-Gen page says: \"Mediation adapters continue to depend on Google Mobile Ads SDK (Legacy),\" and that you must exclude the legacy ",[373,682,683],{},"play-services-ads",[373,685,686],{},"play-services-ads-lite"," modules to avoid duplicate-symbol errors. The deprecation tables themselves say nothing about adapters.",[14,689,690],{},"I would not take the Next-Gen path unless you have a reason. The Android table lists v25 as Supported to June 30, 2028, and updating to v25 is a smaller change. That is my call, not Google's, and the Android page does tell you to migrate to Next-Gen.",[14,692,693],{},"My advice: do the update in one pull request, with only that change in it. Build a release, test an ad of each format you use on a real device, and watch the first week of fill rate in AdMob before you ship the next feature on top.",[31,695,697],{"id":696},"a-short-plan","A short plan",[699,700,701,715,721,727,733,739],"ol",{},[302,702,703,706,707,288,710,712,713,294],{},[17,704,705],{},"Find your versions."," Read ",[373,708,709],{},"build.gradle",[373,711,405],{}," or your SPM resolution, and ",[373,714,445],{},[302,716,717,720],{},[17,718,719],{},"Find the row."," Match each version to the table. Any Deprecated row is your priority. Any Sunset row is already at risk.",[302,722,723,726],{},[17,724,725],{},"Pick the target."," Android v25 or the Next-Gen SDK. iOS v13. For Flutter, the latest plugin whose changelog names those versions.",[302,728,729,732],{},[17,730,731],{},"Read the migration page"," for every major you skip, and note any minimum OS change.",[302,734,735,738],{},[17,736,737],{},"Check mediation."," If you use adapters, check each network's own pages. Google's deprecation pages say nothing about them.",[302,740,741,744],{},[17,742,743],{},"Test a release build"," with real ads, on a real device, before you submit.",[14,746,747,748,294],{},"For every other dated Apple, Google Play and Firebase requirement in 2026 and 2027, see ",[282,749,751],{"href":750},"\u002Fblog\u002Fapp-store-google-play-deadlines-2026-2027\u002F","App Store and Google Play deadlines for 2026 and 2027",[31,753,755],{"id":754},"need-a-hand","Need a hand?",[14,757,758,759,763,764,294],{},"If your Flutter app still ships an old AdMob SDK and you want it updated before Google switches it off, the ",[282,760,762],{"href":761},"\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 ",[282,765,767],{"href":766},"\u002Fcontact\u002F","send me a short description",{"title":769,"searchDepth":770,"depth":770,"links":771},"",2,[772,773,774,775,776,777,778],{"id":33,"depth":770,"text":34},{"id":328,"depth":770,"text":329},{"id":361,"depth":770,"text":362},{"id":462,"depth":770,"text":463},{"id":613,"depth":770,"text":614},{"id":696,"depth":770,"text":697},{"id":754,"depth":770,"text":755},"AI & Technology","2026-10-19T20:00:00.000Z","Google Mobile Ads SDK (AdMob) deprecation and sunset dates for Android and iOS, what happens to ad requests at sunset, how to check the version you ship, and how the Flutter google_mobile_ads plugin fits in. Checked October 19, 2026.",null,"md",[785,788,791,794,797],{"question":786,"answer":787},"When does the Google Mobile Ads SDK stop serving ads?","It depends on the major version. Google's Android timetable lists June 30, 2027 as the sunset date for v23.x.x and June 30, 2028 for v24.x.x and v25.x.x. Its iOS timetable lists Q2 2027 for v11.x.x, Q2 2028 for v12.x.x and Q2 2029 for v13.x.x. Sunset means ads are at risk of not serving, not that they stop on the exact date. Google says it may also bring dates forward with advance communication.",{"question":789,"answer":790},"What error do I see when my SDK version is sunset?","Google says that once ad serving is disabled for a sunset version, ad requests return a no fill with an error indicating that the version is sunset. Your app keeps running, but that placement shows no ad and earns nothing. Google adds that it disables serving gradually, starting with the oldest, lowest-usage versions.",{"question":792,"answer":793},"Which Flutter google_mobile_ads version uses which native SDK?","The pub.dev changelog states it per release. For example, 9.1.0 lists Google Mobile Ads SDK 25.4.0 for Android and 13.7.0 for iOS, 7.0.0 lists 24.9.0 and 12.14.0, and 5.3.0 lists 23.6.0 and 11.13.0. I read only the lines that name a native version. The changelog does not list a sunset date for the plugin itself, so I take the dates from the native SDK tables.",{"question":795,"answer":796},"Do I have to move to the GMA Next-Gen SDK?","The Android deprecation page lists v25.x.x as Supported with a sunset of June 30, 2028, and its migration link for v25 points to the Next-Gen SDK. It also says the Google Mobile Ads SDK is in maintenance mode. I found no sunset date for v25 earlier than 2028, so updating to v25 keeps you supported for now. The Next-Gen migration page is Android only, and says mediation adapters continue to depend on the legacy SDK.",{"question":798,"answer":799},"Does updating the SDK break my build?","It can. Google's Android migration page says starting in v25.5.0 apps must run on Android API level 24 or higher, and removes some callbacks and the mediation VersionInfo class. Its iOS page says v13 raises the deployment target to iOS 13. Read the migration page for your jump and build a release on a real device before you submit.","Boynton Beach, FL",{"readingTimeStats":802},{"text":803,"minutes":804,"time":805,"words":806},"8 min read",7.78,466800,1556,true,"\u002Fblog\u002Fadmob-google-mobile-ads-sdk-sunset-versions-2027","google mobile ads sdk sunset","9 min",[812,813,814],"google-play-target-api-36-android-16-requirement-2026","ios-27-sdk-requirement-april-2027-xcode-27-flutter","play-billing-library-9-migration-deadline-2027",{"title":5,"description":781},[817,819,821,824,827,830,833,836,839,842],{"title":818,"url":284},"Google for Developers, AdMob Android: Deprecation and sunset",{"title":820,"url":291},"Google for Developers, AdMob iOS: Deprecation and sunset",{"title":822,"url":823},"Google for Developers, AdMob Android: Migrate SDK versions","https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fandroid\u002Fmigration",{"title":825,"url":826},"Google for Developers, AdMob iOS: Migrate SDK versions","https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fios\u002Fmigration",{"title":828,"url":829},"Google for Developers, AdMob Android: Migrate to GMA Next-Gen SDK","https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fandroid\u002Fnext-gen\u002Fmigration",{"title":831,"url":832},"Google for Developers, AdMob Android: Quick start","https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fandroid\u002Fquick-start",{"title":834,"url":835},"Google for Developers, AdMob iOS: Quick start","https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fios\u002Fquick-start",{"title":837,"url":838},"Google for Developers, AdMob Flutter: Quick start","https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fflutter\u002Fquick-start",{"title":840,"url":841},"pub.dev, google_mobile_ads changelog","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_mobile_ads\u002Fchangelog",{"title":843,"url":844},"pub.dev, google_mobile_ads","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_mobile_ads","blog\u002Fadmob-google-mobile-ads-sdk-sunset-versions-2027","admob sdk sunset, google mobile ads sdk deprecation, google mobile ads sdk versions, admob no fill sunset error, play-services-ads update, Google-Mobile-Ads-SDK cocoapods, google_mobile_ads flutter update, gma next-gen sdk, admob android v23 sunset, admob ios v11 sunset",[848,849,850,851,852],"On Android, Google lists v23.x.x with a sunset date of June 30, 2027, and v24.x.x and v25.x.x with a sunset date of June 30, 2028. On iOS, v11.x.x has a sunset of \"Q2 2027\", v12.x.x \"Q2 2028\" and v13.x.x \"Q2 2029\". Google gives the iOS sunsets as quarters only, not exact dates.","Google's iOS page says that when ad serving is disabled for a sunset version, \"ad requests return a no fill with an error indicating that this version is sunset.\" Sunset versions are at risk, and Google disables the oldest, lowest-usage versions first.","Google's iOS page says a more specific v11 sunset date will be announced \"with two months' notice\", so I would not wait for that notice before updating.","Google describes the Google Mobile Ads SDK as \"in maintenance mode\" on its Android pages and points Android developers to the GMA Next-Gen SDK. Its iOS deprecation page has no Next-Gen content.","For Flutter, the google_mobile_ads changelog states which native SDK each plugin release pulls in, so you can look up your version. I could not find a statement of the plugin's own support or sunset policy.","https:\u002F\u002Fapp369.com\u002Fblog\u002Fadmob-google-mobile-ads-sdk-sunset-versions-2027\u002F","CoD7CaClpH-lEN4vOQKVdeevmUXsQX2O0vqeSBFNLRc",[856,1327,1762],{"id":857,"title":858,"author":859,"body":861,"category":779,"createdAt":1261,"description":1262,"disclosure":782,"extension":783,"faq":1263,"howTo":782,"lastVerified":782,"location":800,"meta":1279,"navigation":807,"ogImage":782,"path":1285,"primaryKeyword":1286,"readingTime":1287,"related":1288,"seo":1292,"sources":1293,"stem":1316,"tags":1317,"takeaways":1318,"updatedAt":1324,"url":1325,"__hash__":1326},"blog\u002Fblog\u002Fgoogle-play-target-api-36-android-16-requirement-2026.md","Google Play Requires Target API 36: The Android 16 Update",{"name":7,"social":860},{"twitter":9},{"type":11,"value":862,"toc":1254},[863,873,876,881,885,925,934,937,957,961,970,1044,1051,1055,1074,1118,1121,1124,1186,1204,1208,1211,1241,1245,1247],[14,864,865,868,869,872],{},[17,866,867],{},"Since August 31, 2026, Google Play only accepts new apps and updates that target Android 16 (API level 36), and Google says you'll be able to request an extension to November 1, 2026."," Raising ",[373,870,871],{},"targetSdkVersion"," is one line, but it turns on Android 16 behavior: no edge-to-edge opt-out, predictive back by default, and no orientation lock on tablets. Test those three before you ship. In a Flutter app, the quickest path is usually Flutter 3.35 or later, which targets 36 by default.",[14,874,875],{},"The requirements below come from Google's target API page and its Android 16 behavior changes, and the Flutter defaults from Flutter's source code, as listed in the sources. I checked each one on October 18, 2026.",[14,877,878,880],{},[17,879,28],{}," App369 is my studio. I build and fix Android and iOS apps, mostly in Flutter, and the last section mentions what I sell. Google doesn't pay me for anything on this page.",[31,882,884],{"id":883},"the-requirement","The requirement",[39,886,887,897],{},[42,888,889],{},[45,890,891,894],{},[48,892,893],{},"App type",[48,895,896],{},"Must target, for new apps and updates from August 31, 2026",[64,898,899,909,917],{},[45,900,901,904],{},[69,902,903],{},"Phone and tablet apps",[69,905,906],{},[17,907,908],{},"Android 16 (API level 36)",[45,910,911,914],{},[69,912,913],{},"Wear OS and Android Automotive OS",[69,915,916],{},"Android 15 (API level 35)",[45,918,919,922],{},[69,920,921],{},"Android TV and Android XR",[69,923,924],{},"Android 14 (API level 34)",[14,926,927,928,933],{},"Source: ",[282,929,932],{"href":930,"rel":931},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Frequirements\u002Ftarget-sdk",[286],"Google Play target API level requirement",", last updated October 16, 2026.",[14,935,936],{},"Google's page also says:",[299,938,939,945,951],{},[302,940,941,944],{},[17,942,943],{},"Extension:"," if you need more time, you'll be able to request an extension to November 1, 2026. Google says the extension forms will be in Play Console \"later this year\", so check there for the form.",[302,946,947,950],{},[17,948,949],{},"Existing apps:"," to stay available to new users on devices running a newer Android version than the app targets, an existing app must target API 35 or higher. An app that targets API 34 or lower is only available on devices running that Android version or lower.",[302,952,953,956],{},[17,954,955],{},"Exception:"," permanently private apps for one organization's internal use.",[31,958,960],{"id":959},"what-changes-when-you-target-api-36","What changes when you target API 36",[14,962,963,964,969],{},"Google's ",[282,965,968],{"href":966,"rel":967},"https:\u002F\u002Fdeveloper.android.com\u002Fabout\u002Fversions\u002F16\u002Fbehavior-changes-16",[286],"Android 16 behavior changes"," apply to apps that target API 36 and run on Android 16 or higher. These are the three I'd test first:",[39,971,972,985],{},[42,973,974],{},[45,975,976,979,982],{},[48,977,978],{},"Change",[48,980,981],{},"What Google says",[48,983,984],{},"Temporary way out",[64,986,987,1004,1028],{},[45,988,989,994,1001],{},[69,990,991],{},[17,992,993],{},"Edge-to-edge",[69,995,996,997,1000],{},"Apps can no longer opt out of drawing behind the status and navigation bars. ",[373,998,999],{},"windowOptOutEdgeToEdgeEnforcement"," is deprecated and disabled",[69,1002,1003],{},"None for API 36",[45,1005,1006,1011,1022],{},[69,1007,1008],{},[17,1009,1010],{},"Predictive back",[69,1012,1013,1014,1017,1018,1021],{},"Predictive back animations are on by default. ",[373,1015,1016],{},"onBackPressed"," is not called and ",[373,1019,1020],{},"KEYCODE_BACK"," is not dispatched",[69,1023,1024,1027],{},[373,1025,1026],{},"android:enableOnBackInvokedCallback=\"false\""," in the manifest",[45,1029,1030,1035,1038],{},[69,1031,1032],{},[17,1033,1034],{},"Large screens",[69,1036,1037],{},"On displays at least 600dp wide, orientation, resizability and aspect ratio restrictions are ignored, so the app fills the window",[69,1039,1040,1043],{},[373,1041,1042],{},"PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY",". Google says it won't apply once you target API 37, which Google Play will require for new apps and updates in August 2027",[14,1045,1046,1047,1050],{},"The large-screen rule doesn't apply to games (based on ",[373,1048,1049],{},"android:appCategory","), to screens smaller than 600dp, or when users opt in to the app's default behavior in the device's aspect ratio settings.",[31,1052,1054],{"id":1053},"flutter-apps","Flutter apps",[14,1056,1057,1058,1061,1062,1065,1066,1069,1070,1073],{},"Flutter's project template sets the target from the Flutter version: ",[373,1059,1060],{},"targetSdk = flutter.targetSdkVersion"," in ",[373,1063,1064],{},"android\u002Fapp\u002Fbuild.gradle.kts"," in Flutter 3.35's template, and ",[373,1067,1068],{},"targetSdkVersion flutter.targetSdkVersion"," in older Groovy templates such as Flutter 3.10's. Flutter's ",[373,1071,1072],{},"FlutterExtension"," source sets it to:",[39,1075,1076,1089],{},[42,1077,1078],{},[45,1079,1080,1083],{},[48,1081,1082],{},"Flutter version",[48,1084,1085,1086],{},"Default ",[373,1087,1088],{},"flutter.targetSdkVersion",[64,1090,1091,1099,1106],{},[45,1092,1093,1096],{},[69,1094,1095],{},"3.29 (February 12, 2025)",[69,1097,1098],{},"35",[45,1100,1101,1104],{},[69,1102,1103],{},"3.32 (May 20, 2025)",[69,1105,1098],{},[45,1107,1108,1113],{},[69,1109,1110],{},[17,1111,1112],{},"3.35 (August 14, 2025) and later",[69,1114,1115],{},[17,1116,1117],{},"36",[14,1119,1120],{},"Release dates from Flutter's release archive.",[14,1122,1123],{},"What that means for a Flutter app:",[699,1125,1126,1149,1163,1176],{},[302,1127,1128,1138,1139,1141,1142,1145,1146,1148],{},[17,1129,1130,1131,1134,1135,294],{},"Check ",[373,1132,1133],{},"android\u002Fapp\u002Fbuild.gradle"," or ",[373,1136,1137],{},"build.gradle.kts"," If it uses ",[373,1140,1088],{},", Flutter 3.35 or later gives you 36. If it has a hard-coded number, change it to 36 yourself (",[373,1143,1144],{},"targetSdk = 36"," in a ",[373,1147,1137],{}," file).",[302,1150,1151,1154,1155,1158,1159,1162],{},[17,1152,1153],{},"Edge-to-edge."," My advice: Flutter draws its own UI, so the visible risk is content under the status or navigation bar. Check every screen with ",[373,1156,1157],{},"SafeArea"," or padding from ",[373,1160,1161],{},"MediaQuery",", including bottom sheets and screens with a bottom bar.",[302,1164,1165,1168,1169,1171,1172,1175],{},[17,1166,1167],{},"Back navigation."," If the app or a plugin overrides ",[373,1170,1016],{}," in Android code, that override won't be called on Android 16. My advice: use ",[373,1173,1174],{},"PopScope"," on the Flutter side for back handling, and check plugins that intercept back.",[302,1177,1178,1181,1182,1185],{},[17,1179,1180],{},"Tablets."," If the app locks orientation with ",[373,1183,1184],{},"SystemChrome.setPreferredOrientations"," or the manifest, test it on a tablet or a large emulator, because Google says that lock is ignored on screens 600dp or wider.",[14,1187,1188,1189,1193,1194,1198,1199,1203],{},"If an older app can't move to Flutter 3.35 because the Android build breaks first, the ",[282,1190,1192],{"href":1191},"\u002Fblog\u002Fflutter-deleted-android-v1-embedding-build-failed-2026\u002F","v1 embedding fix"," and the ",[282,1195,1197],{"href":1196},"\u002Fblog\u002Fflutter-gradle-plugin-applied-imperatively-fix-2026\u002F","Gradle plugin fix"," cover the two errors Flutter 3.29 introduced. If the app sells in-app purchases, the ",[282,1200,1202],{"href":1201},"\u002Fblog\u002Fplay-billing-library-7-deprecated-update-to-8-2026\u002F","Billing Library 8 deadline"," is due at the same time.",[31,1205,1207],{"id":1206},"what-to-do-now","What to do now",[14,1209,1210],{},"This section is my advice, not Google's.",[699,1212,1213,1223,1229,1235],{},[302,1214,1215,1218,1219,1222],{},[17,1216,1217],{},"Check the target your last release used."," Look at ",[373,1220,1221],{},"targetSdk"," in the build file for that release, or the app bundle details in Play Console.",[302,1224,1225,1228],{},[17,1226,1227],{},"Request the extension if the change won't ship in time,"," once the form appears in Play Console. As of October 18, 2026, the November 1 extension date is two weeks away.",[302,1230,1231,1234],{},[17,1232,1233],{},"Raise the target, then test on an Android 16 device or emulator."," Go through every screen for edge-to-edge, try the back gesture everywhere, and rotate on a tablet-sized emulator.",[302,1236,1237,1240],{},[17,1238,1239],{},"Ship to a closed testing track first."," Catch layout and back-gesture issues before your users do.",[14,1242,747,1243,294],{},[282,1244,751],{"href":750},[31,1246,755],{"id":754},[14,1248,1249,1250,763,1252,294],{},"If an app can't ship an update because of the target API requirement, or something broke after raising it, the ",[282,1251,762],{"href":761},[282,1253,767],{"href":766},{"title":769,"searchDepth":770,"depth":770,"links":1255},[1256,1257,1258,1259,1260],{"id":883,"depth":770,"text":884},{"id":959,"depth":770,"text":960},{"id":1053,"depth":770,"text":1054},{"id":1206,"depth":770,"text":1207},{"id":754,"depth":770,"text":755},"2026-10-18T23:45:00.000Z","Since August 31, 2026, Google Play requires new apps and updates to target Android 16 (API level 36), with an extension to November 1, 2026. What changes when you target API 36 (edge-to-edge, predictive back, large-screen orientation), which Flutter versions target it by default, and what to test, from Google's docs checked October 18, 2026.",[1264,1267,1270,1273,1276],{"question":1265,"answer":1266},"What is the Google Play target API level requirement for 2026?","Google says that starting August 31, 2026, new apps and app updates must target Android 16 (API level 36) or higher. Wear OS and Android Automotive OS apps must target API 35, and Android TV and Android XR apps API 34. Google says you'll be able to request an extension to November 1, 2026.",{"question":1268,"answer":1269},"What happens to my app if it targets an older API level?","Google says existing apps must target API 35 or higher to stay available to new users on devices running a newer Android version than the app targets. An app that targets API 34 or lower is only available on devices running that Android version or lower. New apps and updates must target API 36 to be submitted.",{"question":1271,"answer":1272},"How do I set targetSdkVersion 36 in a Flutter app?","If android\u002Fapp\u002Fbuild.gradle uses targetSdkVersion flutter.targetSdkVersion, upgrading to Flutter 3.35 or later sets it to 36, per Flutter's FlutterExtension source. Otherwise set targetSdkVersion 36 (or targetSdk = 36 in build.gradle.kts) yourself, and check that compileSdk is at least 36.",{"question":1274,"answer":1275},"Why did the back button stop working after targeting Android 16?","Google says that for apps targeting API 36 on Android 16 devices, onBackPressed is not called and KeyEvent.KEYCODE_BACK is not dispatched. Move to the supported back navigation APIs, or opt out temporarily with android:enableOnBackInvokedCallback=\"false\" in the manifest.",{"question":1277,"answer":1278},"Can I still lock my app to portrait on tablets?","Not by default. Google says that for apps targeting API 36, orientation, resizability and aspect ratio restrictions don't apply on displays at least 600dp wide, except for games and when users opt in. A temporary manifest opt-out exists, but Google says it won't apply once you target API 37. Google's Android 17 post says Play will require new apps and updates to target API 37 in August 2027, with no option to opt out.",{"readingTimeStats":1280},{"text":1281,"minutes":1282,"time":1283,"words":1284},"5 min read",4.33,259800,866,"\u002Fblog\u002Fgoogle-play-target-api-36-android-16-requirement-2026","target api level 36","7 min",[1289,1290,1291],"play-billing-library-7-deprecated-update-to-8-2026","flutter-gradle-plugin-applied-imperatively-fix-2026","flutter-deleted-android-v1-embedding-build-failed-2026",{"title":858,"description":1262},[1294,1296,1298,1301,1304,1307,1310,1313],{"title":1295,"url":930},"Android Developers, Meet Google Play's target API level requirement (last updated October 16, 2026)",{"title":1297,"url":966},"Android Developers, Behavior changes: apps targeting Android 16 or higher (last updated October 16, 2026)",{"title":1299,"url":1300},"Android Developers Blog, Prepare your app for the resizability and orientation changes in Android 17","https:\u002F\u002Fdeveloper.android.com\u002Fblog\u002Fposts\u002Fprepare-your-app-for-the-resizability-and-orientation-changes-in-android-17",{"title":1302,"url":1303},"Android Developers, Ignore orientation, resizability and aspect ratio restrictions on Android 17 (last updated October 16, 2026)","https:\u002F\u002Fdeveloper.android.com\u002Fabout\u002Fversions\u002F17\u002Fchanges\u002Fff-restrictions-ignored",{"title":1305,"url":1306},"Flutter on GitHub, FlutterExtension.kt at 3.35.0","https:\u002F\u002Fgithub.com\u002Fflutter\u002Fflutter\u002Fblob\u002F3.35.0\u002Fpackages\u002Fflutter_tools\u002Fgradle\u002Fsrc\u002Fmain\u002Fkotlin\u002FFlutterExtension.kt",{"title":1308,"url":1309},"Flutter on GitHub, app build.gradle.kts template at 3.35.0","https:\u002F\u002Fgithub.com\u002Fflutter\u002Fflutter\u002Fblob\u002F3.35.0\u002Fpackages\u002Fflutter_tools\u002Ftemplates\u002Fapp\u002Fandroid-kotlin.tmpl\u002Fapp\u002Fbuild.gradle.kts.tmpl",{"title":1311,"url":1312},"Flutter on GitHub, app build.gradle template at 3.10.0","https:\u002F\u002Fgithub.com\u002Fflutter\u002Fflutter\u002Fblob\u002F3.10.0\u002Fpackages\u002Fflutter_tools\u002Ftemplates\u002Fapp_shared\u002Fandroid-kotlin.tmpl\u002Fapp\u002Fbuild.gradle.tmpl",{"title":1314,"url":1315},"Flutter release archive (macOS)","https:\u002F\u002Fstorage.googleapis.com\u002Fflutter_infra_release\u002Freleases\u002Freleases_macos.json","blog\u002Fgoogle-play-target-api-36-android-16-requirement-2026","target api level 36, google play target sdk 36, android 16 target api requirement, targetSdkVersion 36 flutter, play console target api level warning, edge to edge opt out android 16, predictive back android 16, onBackPressed not called android 16, flutter targetSdkVersion default",[1319,1320,1321,1322,1323],"Since August 31, 2026, Google Play requires new apps and app updates to target Android 16 (API level 36). Wear OS and Android Automotive OS apps need API 35, and Android TV and Android XR apps need API 34.","Google says you'll be able to request an extension to November 1, 2026, and that the extension forms will be in Play Console.","Existing apps must target API 35 or higher to stay available to new users on devices running a newer Android version than the app targets.","Targeting API 36 changes behavior on Android 16 devices: apps can no longer opt out of edge-to-edge, predictive back is on by default and onBackPressed is no longer called, and orientation and resizability limits are ignored on screens at least 600dp wide.","Flutter 3.35 and later set flutter.targetSdkVersion to 36. Flutter 3.29 and 3.32 set it to 35, so an app on those versions has to upgrade Flutter or set 36 itself.","2026-10-19T13:00:00.000Z","https:\u002F\u002Fapp369.com\u002Fblog\u002Fgoogle-play-target-api-36-android-16-requirement-2026\u002F","oirxL7D0zPACoWLkNYOnNA4wYHFnkQCHyTmn0VaV5qs",{"id":1328,"title":1329,"author":1330,"body":1332,"category":779,"createdAt":1689,"description":1690,"disclosure":782,"extension":783,"faq":1691,"howTo":782,"lastVerified":782,"location":800,"meta":1707,"navigation":807,"ogImage":782,"path":1712,"primaryKeyword":1713,"readingTime":1714,"related":1715,"seo":1719,"sources":1720,"stem":1752,"tags":1753,"takeaways":1754,"updatedAt":1689,"url":1760,"__hash__":1761},"blog\u002Fblog\u002Fios-27-sdk-requirement-april-2027-xcode-27-flutter.md","iOS 27 SDK Required April 2027: Xcode 27 Checklist",{"name":7,"social":1331},{"twitter":9},{"type":11,"value":1333,"toc":1674},[1334,1340,1343,1348,1352,1463,1472,1476,1479,1482,1487,1490,1500,1504,1507,1515,1519,1522,1542,1549,1553,1556,1567,1579,1583,1586,1590,1593,1596,1599,1603,1606,1658,1661,1665,1667],[14,1335,1336,1339],{},[17,1337,1338],{},"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,1341,1342],{},"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,1344,1345,1347],{},[17,1346,28],{}," 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,1349,1351],{"id":1350},"the-dated-timeline","The dated timeline",[39,1353,1354,1367],{},[42,1355,1356],{},[45,1357,1358,1361,1364],{},[48,1359,1360],{},"Date",[48,1362,1363],{},"What happens",[48,1365,1366],{},"Source",[64,1368,1369,1384,1399,1413,1426,1441],{},[45,1370,1371,1374,1377],{},[69,1372,1373],{},"September 9, 2026",[69,1375,1376],{},"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",[69,1378,1379],{},[282,1380,1383],{"href":1381,"rel":1382},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002F?id=k1mtkt1k",[286],"Apple news",[45,1385,1386,1389,1392],{},[69,1387,1388],{},"September 14, 2026",[69,1390,1391],{},"Xcode 27 released. Xcode 27.1 followed on October 15, 2026",[69,1393,1394],{},[282,1395,1398],{"href":1396,"rel":1397},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002Freleases\u002F",[286],"Apple releases",[45,1400,1401,1404,1407],{},[69,1402,1403],{},"October 5, 2026",[69,1405,1406],{},"Apple: \"Starting April 2027, any apps or games submitted will need to include screenshots for iPhone Duo.\"",[69,1408,1409],{},[282,1410,1383],{"href":1411,"rel":1412},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002F?id=kkphp5qo",[286],[45,1414,1415,1418,1421],{},[69,1416,1417],{},"October 23, 2026",[69,1419,1420],{},"iPhone Duo available to customers, per Apple",[69,1422,1423],{},[282,1424,1383],{"href":1411,"rel":1425},[286],[45,1427,1428,1431,1434],{},[69,1429,1430],{},"December 2, 2026",[69,1432,1433],{},"The CocoaPods registry becomes read-only, per Flutter's docs",[69,1435,1436],{},[282,1437,1440],{"href":1438,"rel":1439},"https:\u002F\u002Fdocs.flutter.dev\u002Fpackages-and-plugins\u002Fswift-package-manager\u002Ffor-app-developers",[286],"Flutter docs",[45,1442,1443,1448,1453],{},[69,1444,1445],{},[17,1446,1447],{},"April 2027",[69,1449,1450],{},[17,1451,1452],{},"iOS and iPadOS uploads must be built with the iOS 27 SDK or later. Submissions need iPhone Duo screenshots. No day is given",[69,1454,1455,288,1459],{},[282,1456,1458],{"href":1381,"rel":1457},[286],"Apple news, SDK",[282,1460,1462],{"href":1411,"rel":1461},[286],"Apple news, Duo",[14,1464,1465,1466,1471],{},"The requirement is not on Apple's ",[282,1467,1470],{"href":1468,"rel":1469},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002Fupcoming-requirements\u002F",[286],"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,1473,1475],{"id":1474},"what-the-rule-says-and-what-it-doesnt","What the rule says, and what it doesn't",[14,1477,1478],{},"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,1480,1481],{},"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.",[1483,1484,1486],"h3",{"id":1485},"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,1488,1489],{},"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,1491,1492,1493,1495,1496,1499],{},"My advice: after you switch to Xcode 27, check ",[373,1494,423],{}," in the Runner target and in ",[373,1497,1498],{},"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,1501,1503],{"id":1502},"what-happens-if-you-upload-with-an-older-sdk","What happens if you upload with an older SDK",[14,1505,1506],{},"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,1508,1509,1510,1514],{},"The practical point is the same as in 2026: the build machine decides the SDK, not your code. See my ",[282,1511,1513],{"href":1512},"\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,1516,1518],{"id":1517},"the-build-machine-macos-and-xcode-versions","The build machine: macOS and Xcode versions",[14,1520,1521],{},"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.",[299,1523,1524,1530,1536],{},[302,1525,1526,1529],{},[17,1527,1528],{},"Your own Mac:"," update to macOS Tahoe 26.6 or later, then install Xcode 27.1 from Apple's releases page.",[302,1531,1532,1535],{},[17,1533,1534],{},"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.",[302,1537,1538,1541],{},[17,1539,1540],{},"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,1543,1544,1545,1548],{},"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 ",[373,1546,1547],{},"xcodebuild -version"," on every machine that builds the app.",[31,1550,1552],{"id":1551},"flutter-the-version-question","Flutter: the version question",[14,1554,1555],{},"Flutter's pages don't state a minimum Flutter version for Xcode 27. They say three things that matter:",[299,1557,1558,1561,1564],{},[302,1559,1560],{},"Flutter apps built with Xcode 27 that haven't adopted UIScene \"fail to launch on startup.\"",[302,1562,1563],{},"UIScene became the default in Flutter 3.41, and eligible apps are migrated automatically.",[302,1565,1566],{},"The docs reflect Flutter 3.47, the current stable release.",[14,1568,1569,1570,1573,1574,1578],{},"So the floor that matters in practice is the UIScene one. If your app is older than 3.41, or has a custom ",[373,1571,1572],{},"AppDelegate",", do the migration in my ",[282,1575,1577],{"href":1576},"\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.",[1483,1580,1582],{"id":1581},"cocoapods-and-swift-package-manager","CocoaPods and Swift Package Manager",[14,1584,1585],{},"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,1587,1589],{"id":1588},"iphone-duo-screenshots","iPhone Duo screenshots",[14,1591,1592],{},"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,1594,1595],{},"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,1597,1598],{},"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,1600,1602],{"id":1601},"a-dated-checklist","A dated checklist",[14,1604,1605],{},"The Apple and Flutter dates are from the sources above. The other dates are my suggestions for working back from April.",[699,1607,1608,1616,1622,1628,1634,1640,1646,1652],{},[302,1609,1610,1613,1614,294],{},[17,1611,1612],{},"By October 31, 2026:"," find every machine that builds the iOS app (laptops, CI, a client's Mac). Write down its macOS and ",[373,1615,1547],{},[302,1617,1618,1621],{},[17,1619,1620],{},"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.",[302,1623,1624,1627],{},[17,1625,1626],{},"By November 30, 2026:"," upgrade Flutter and plugins. Complete the UIScene migration. Confirm the deployment target is iOS 15 or later.",[302,1629,1630,1633],{},[17,1631,1632],{},"December 2, 2026:"," CocoaPods registry goes read-only. Confirm your plugins resolve under Flutter's Swift Package Manager integration.",[302,1635,1636,1639],{},[17,1637,1638],{},"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.",[302,1641,1642,1645],{},[17,1643,1644],{},"By February 28, 2027:"," create the iPhone Duo screenshots at Apple's listed sizes and upload them as a draft in App Store Connect.",[302,1647,1648,1651],{},[17,1649,1650],{},"By March 15, 2027:"," switch your release pipeline to Xcode 27, and ship one normal update through it.",[302,1653,1654,1657],{},[17,1655,1656],{},"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,1659,1660],{},"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,1662,747,1663,294],{},[282,1664,751],{"href":750},[31,1666,755],{"id":754},[14,1668,1669,1670,763,1672,294],{},"If your Flutter iOS build breaks on Xcode 27, or you want the pipeline moved before April, the ",[282,1671,762],{"href":761},[282,1673,767],{"href":766},{"title":769,"searchDepth":770,"depth":770,"links":1675},[1676,1677,1681,1682,1683,1686,1687,1688],{"id":1350,"depth":770,"text":1351},{"id":1474,"depth":770,"text":1475,"children":1678},[1679],{"id":1485,"depth":1680,"text":1486},3,{"id":1502,"depth":770,"text":1503},{"id":1517,"depth":770,"text":1518},{"id":1551,"depth":770,"text":1552,"children":1684},[1685],{"id":1581,"depth":1680,"text":1582},{"id":1588,"depth":770,"text":1589},{"id":1601,"depth":770,"text":1602},{"id":754,"depth":770,"text":755},"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.",[1692,1695,1698,1701,1704],{"question":1693,"answer":1694},"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":1696,"answer":1697},"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":1699,"answer":1700},"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":1702,"answer":1703},"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":1705,"answer":1706},"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.",{"readingTimeStats":1708},{"text":803,"minutes":1709,"time":1710,"words":1711},7.575,454500,1515,"\u002Fblog\u002Fios-27-sdk-requirement-april-2027-xcode-27-flutter","ios 27 sdk required","8 min",[1716,1717,1718],"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":1329,"description":1690},[1721,1723,1725,1727,1730,1733,1735,1738,1741,1744,1747,1749],{"title":1722,"url":1381},"Apple Developer, App Store submissions now open for the latest OS releases (September 9, 2026)",{"title":1724,"url":1411},"Apple Developer, Prepare and submit your apps for iPhone Duo (October 5, 2026)",{"title":1726,"url":1468},"Apple Developer, Upcoming requirements",{"title":1728,"url":1729},"Apple Developer, Submitting apps to the App Store","https:\u002F\u002Fdeveloper.apple.com\u002Fapp-store\u002Fsubmitting\u002F",{"title":1731,"url":1732},"Apple Developer, Xcode SDK and system requirements","https:\u002F\u002Fdeveloper.apple.com\u002Fxcode\u002Fsystem-requirements\u002F",{"title":1734,"url":1396},"Apple Developer, Releases",{"title":1736,"url":1737},"App Store Connect Help, Screenshot specifications","https:\u002F\u002Fdeveloper.apple.com\u002Fhelp\u002Fapp-store-connect\u002Freference\u002Fapp-information\u002Fscreenshot-specifications",{"title":1739,"url":1740},"Apple Developer, iPhone Duo","https:\u002F\u002Fdeveloper.apple.com\u002Fiphone-duo\u002F",{"title":1742,"url":1743},"Flutter docs, Set up iOS development (page last updated 2026-09-14)","https:\u002F\u002Fdocs.flutter.dev\u002Fplatform-integration\u002Fios\u002Fsetup",{"title":1745,"url":1746},"Flutter docs, UIScene adoption","https:\u002F\u002Fdocs.flutter.dev\u002Frelease\u002Fbreaking-changes\u002Fuiscenedelegate",{"title":1748,"url":1438},"Flutter docs, Swift Package Manager for app developers",{"title":1750,"url":1751},"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",[1755,1756,1757,1758,1759],"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",{"id":1763,"title":1764,"author":1765,"body":1767,"category":779,"createdAt":2309,"description":2310,"disclosure":782,"extension":783,"faq":2311,"howTo":782,"lastVerified":782,"location":800,"meta":2327,"navigation":807,"ogImage":782,"path":2332,"primaryKeyword":2333,"readingTime":2334,"related":2335,"seo":2336,"sources":2337,"stem":2363,"tags":2364,"takeaways":2365,"updatedAt":2309,"url":2371,"__hash__":2372},"blog\u002Fblog\u002Fplay-billing-library-9-migration-deadline-2027.md","Play Billing Library 9: Migration Guide and 2027 Deadline",{"name":7,"social":1766},{"twitter":9},{"type":11,"value":1768,"toc":2301},[1769,1775,1778,1783,1787,1790,1867,1875,1878,1905,1912,1916,1919,1994,2007,2011,2017,2110,2114,2123,2210,2213,2229,2232,2234,2236,2283,2292,2294],[14,1770,1771,1774],{},[17,1772,1773],{},"Google's deprecation table gives Play Billing Library 8 a deadline of August 31, 2027 for new apps and updates, with an extension deadline of November 1, 2027, so version 9 is the one to move to."," Google says existing apps keep working. The rule applies to new apps and updates. If you ship with Flutter, the practical question is when your plugin moves, because as of today the official plugin and RevenueCat still use version 8.",[14,1776,1777],{},"The dates below come from Google's deprecation page and release notes, and the plugin facts from the flutter\u002Fpackages and RevenueCat repositories and pub.dev, as listed in the sources. I checked each one on October 18, 2026.",[14,1779,1780,1782],{},[17,1781,28],{}," App369 is my studio. I build and fix apps, including in-app purchases and subscriptions in Flutter, and the last section mentions what I sell. Google and RevenueCat don't pay me for anything on this page.",[31,1784,1786],{"id":1785},"the-deadlines","The deadlines",[14,1788,1789],{},"Google gives every Billing Library version a two-year deprecation cycle. Its table:",[39,1791,1792,1804],{},[42,1793,1794],{},[45,1795,1796,1798,1801],{},[48,1797,53],{},[48,1799,1800],{},"New apps and updates must move by",[48,1802,1803],{},"Extension deadline",[64,1805,1806,1817,1828,1839,1856],{},[45,1807,1808,1811,1814],{},[69,1809,1810],{},"5",[69,1812,1813],{},"August 31, 2024",[69,1815,1816],{},"November 1, 2024",[45,1818,1819,1822,1825],{},[69,1820,1821],{},"6",[69,1823,1824],{},"August 31, 2025",[69,1826,1827],{},"November 1, 2025",[45,1829,1830,1833,1836],{},[69,1831,1832],{},"7",[69,1834,1835],{},"August 31, 2026",[69,1837,1838],{},"November 1, 2026",[45,1840,1841,1846,1851],{},[69,1842,1843],{},[17,1844,1845],{},"8",[69,1847,1848],{},[17,1849,1850],{},"August 31, 2027",[69,1852,1853],{},[17,1854,1855],{},"November 1, 2027",[45,1857,1858,1861,1864],{},[69,1859,1860],{},"9",[69,1862,1863],{},"August 31, 2028",[69,1865,1866],{},"November 1, 2028",[14,1868,927,1869,1874],{},[282,1870,1873],{"href":1871,"rel":1872},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Fbilling\u002Fdeprecation-faq",[286],"Google Play Billing Library version deprecation",", last updated September 9, 2026.",[14,1876,1877],{},"Google's FAQ also says:",[299,1879,1880,1886,1892],{},[302,1881,1882,1885],{},[17,1883,1884],{},"Existing apps still work."," Unmaintained APKs don't need updates. New apps and updates must use supported versions.",[302,1887,1888,1891],{},[17,1889,1890],{},"The extension form is in Play Console."," An app on an unsupported version gets a warning. Open its details on the Policy status page to find the form.",[302,1893,1894,1897,1898,1901,1902,294],{},[17,1895,1896],{},"Check the manifest if a warning stays."," The merged ",[373,1899,1900],{},"AndroidManifest.xml"," must contain ",[373,1903,1904],{},"com.google.android.play.billingclient.version",[14,1906,1907,1908,1911],{},"If your app is still on version 7, read ",[282,1909,1910],{"href":1201},"the version 7 to 8 guide"," first.",[31,1913,1915],{"id":1914},"what-changed-in-version-9","What changed in version 9",[14,1917,1918],{},"Version 9.0.0 was released on May 19, 2026. Per Google's release notes:",[39,1920,1921,1931],{},[42,1922,1923],{},[45,1924,1925,1928],{},[48,1926,1927],{},"Change in 9.0.0",[48,1929,1930],{},"What it means",[64,1932,1933,1958,1976,1986],{},[45,1934,1935,1938],{},[69,1936,1937],{},"Error codes for blocked Play Store activity",[69,1939,1940,1941,1944,1945,1948,1949,1952,1953,1957],{},"When the system blocks the Play Store app, for example in OEM-customized kids mode, the response code changes from ",[373,1942,1943],{},"ERROR"," to ",[373,1946,1947],{},"BILLING_UNAVAILABLE",". The ",[373,1950,1951],{},"BillingResult"," carries a ",[1954,1955,1956],"em",{},"Play Store is blocked"," debug message. This needs AndroidX Core 1.9 or later",[45,1959,1960,1969],{},[69,1961,1962,1965,1966],{},[373,1963,1964],{},"DeveloperProvidedBillingDetails.getLinkUri()"," is ",[373,1967,1968],{},"@Nullable",[69,1970,1971,1972,1975],{},"Handle both ",[373,1973,1974],{},"null"," and an empty string before parsing the link or launching a browser intent",[45,1977,1978,1983],{},[69,1979,1980,1982],{},[373,1981,871],{}," updated to 35",[69,1984,1985],{},"Stated in the release notes",[45,1987,1988,1991],{},[69,1989,1990],{},"In-app messaging for opt-in price increases",[69,1992,1993],{},"Users can confirm an upcoming opt-in price increase without leaving the app. The message is shown from the first day the user can accept, at most once every 7 days",[14,1995,1996,1997,288,2000,384,2003,2006],{},"Version 9.1.0 was released on June 18, 2026. It adds Billing Choice APIs, including ",[373,1998,1999],{},"BillingClient.getBillingChoiceInfoAsync()",[373,2001,2002],{},"BillingChoiceInfo",[373,2004,2005],{},"BillingClient.showBillingProgramInformationDialog()",". Google's release notes list no later 9.x release as of October 18, 2026.",[31,2008,2010],{"id":2009},"how-google-says-to-migrate","How Google says to migrate",[14,2012,2013,2014,2016],{},"Google's guide for moving to version 9 uses ",[373,2015,488],{}," in its examples. The steps:",[699,2018,2019,2031,2045,2076,2082,2104],{},[302,2020,2021,1944,2024,2027,2028,294],{},[17,2022,2023],{},"Update the dependency",[373,2025,2026],{},"com.android.billingclient:billing:9.1.0",". For Kotlin extensions, add ",[373,2029,2030],{},"billing-ktx",[302,2032,2033,2040,2041,2044],{},[17,2034,2035,2036,2039],{},"Skip the ",[373,2037,2038],{},"queryProductDetailsAsync"," change if you are on 8."," Google says the ",[373,2042,2043],{},"onProductDetailsResponse"," signature change applies only to upgrades from version 7.",[302,2046,2047,2050,2051,288,2054,288,2057,2060,2061,2064,2065,2068,2069,384,2072,2075],{},[17,2048,2049],{},"Remove the old APIs, if you still use any."," Google's list includes ",[373,2052,2053],{},"SkuDetails",[373,2055,2056],{},"querySkuDetailsAsync",[373,2058,2059],{},"BillingClient.SkuType"," (use ",[373,2062,2063],{},"ProductType","), ",[373,2066,2067],{},"QueryPurchaseHistoryParams",", the no-argument ",[373,2070,2071],{},"enablePendingPurchases()",[373,2073,2074],{},"queryPurchasesAsync(String, listener)",". My reading: most of these were already removed in version 8, so an app that moved to 8 cleanly has probably dealt with them. Check your code for any that remain.",[302,2077,2078,2081],{},[17,2079,2080],{},"Consider automatic service reconnection."," Google recommends it.",[302,2083,2084,2087,2088,2090,2091,2094,2095,288,2098,384,2101,294],{},[17,2085,2086],{},"Handle new sub-response codes"," on the ",[373,2089,1951],{}," from ",[373,2092,2093],{},"launchBillingFlow()",": ",[373,2096,2097],{},"PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS",[373,2099,2100],{},"USER_INELIGIBLE",[373,2102,2103],{},"NO_APPLICABLE_SUB_RESPONSE_CODE",[302,2105,2106,2109],{},[17,2107,2108],{},"Account for the error-code change"," and the nullable link from the table above.",[31,2111,2113],{"id":2112},"flutter-apps-where-the-plugins-stand","Flutter apps: where the plugins stand",[14,2115,2116,2117,2122],{},"I found no Flutter plugin on version 9 yet. A pull request to update in_app_purchase_android to 9.1.0 (",[282,2118,2121],{"href":2119,"rel":2120},"https:\u002F\u002Fgithub.com\u002Fflutter\u002Fpackages\u002Fpull\u002F12781",[286],"flutter\u002Fpackages #12781","), opened September 8, 2026, was still open and unmerged on October 18, 2026. As of October 18, 2026:",[39,2124,2125,2138],{},[42,2126,2127],{},[45,2128,2129,2132,2135],{},[48,2130,2131],{},"Package",[48,2133,2134],{},"Latest version (published)",[48,2136,2137],{},"Billing Library it uses",[64,2139,2140,2160,2176,2190],{},[45,2141,2142,2147,2150],{},[69,2143,2144],{},[373,2145,2146],{},"in_app_purchase_android",[69,2148,2149],{},"0.5.4 (October 13, 2026)",[69,2151,2152,2153,2155,2156,2159],{},"8.0.0, per its ",[373,2154,1137],{}," on ",[373,2157,2158],{},"main",". Its changelog lists the move from 7.1.1 to 8.0.0 in 0.5.0",[45,2161,2162,2167,2170],{},[69,2163,2164],{},[373,2165,2166],{},"in_app_purchase",[69,2168,2169],{},"3.3.1 (September 18, 2026)",[69,2171,2172,2173,2175],{},"Depends on ",[373,2174,2146],{}," ^0.5.0",[45,2177,2178,2184,2187],{},[69,2179,2180,2183],{},[373,2181,2182],{},"purchases_flutter"," (RevenueCat)",[69,2185,2186],{},"10.16.0 (October 14, 2026)",[69,2188,2189],{},"Bundles Android SDK 10.27.0",[45,2191,2192,2197,2202],{},[69,2193,2194,2183],{},[373,2195,2196],{},"purchases-android",[69,2198,2199,2201],{},[373,2200,2158],{}," branch",[69,2203,2204,1061,2207],{},[373,2205,2206],{},"billingClient = \"8.3.0\"",[373,2208,2209],{},"libs.versions.toml",[14,2211,2212],{},"Two details:",[299,2214,2215,2223],{},[302,2216,2217,2222],{},[17,2218,2219,2221],{},[373,2220,2146],{}," 0.5.4 needs a recent Flutter."," Its pubspec requires Flutter 3.44 or later and Dart 3.12.",[302,2224,2225,2228],{},[17,2226,2227],{},"My advice: a plugin on version 8 is fine until Google's version 8 deadline."," The deadline for new apps and updates is August 31, 2027. That leaves time for the plugin authors to move.",[14,2230,2231],{},"My advice: don't force version 9 into a Flutter app by overriding the plugin's Gradle dependency until the plugin supports it. The plugin's Dart and Kotlin code is built against the version 8 API. Wait for the release, then upgrade the package.",[31,2233,1207],{"id":1206},[14,2235,1210],{},[699,2237,2238,2256,2265,2271,2277],{},[302,2239,2240,2243,2244,1061,2247,2249,2250,1134,2252,1061,2254,294],{},[17,2241,2242],{},"Find the version you ship."," In a native app, check ",[373,2245,2246],{},"com.android.billingclient:billing",[373,2248,709],{},". In Flutter, check ",[373,2251,2146],{},[373,2253,2182],{},[373,2255,445],{},[302,2257,2258,2261,2262,2264],{},[17,2259,2260],{},"Watch the plugin changelogs."," Check the ",[373,2263,2146],{}," and RevenueCat changelogs once a month. When one mentions Billing Library 9, plan the upgrade.",[302,2266,2267,2270],{},[17,2268,2269],{},"Keep your Flutter version current."," Each plugin release raises its minimum Flutter, and a late jump can mean fixing other build errors first.",[302,2272,2273,2276],{},[17,2274,2275],{},"Upgrade early in the cycle, not at the deadline."," Google's extension to November 1, 2027 is a safety net, not a plan.",[302,2278,2279,2282],{},[17,2280,2281],{},"Test purchases and restores before you ship."," Use Play Console license testers to buy, cancel and restore each product type.",[14,2284,747,2285,2287,2288,294],{},[282,2286,751],{"href":750},". The related Android target level requirement is in ",[282,2289,2291],{"href":2290},"\u002Fblog\u002Fgoogle-play-target-api-36-android-16-requirement-2026\u002F","the target API 36 guide",[31,2293,755],{"id":754},[14,2295,2296,2297,763,2299,294],{},"If your in-app purchases break during the Billing Library upgrade, or you're not sure what your plugins need, the ",[282,2298,762],{"href":761},[282,2300,767],{"href":766},{"title":769,"searchDepth":770,"depth":770,"links":2302},[2303,2304,2305,2306,2307,2308],{"id":1785,"depth":770,"text":1786},{"id":1914,"depth":770,"text":1915},{"id":2009,"depth":770,"text":2010},{"id":2112,"depth":770,"text":2113},{"id":1206,"depth":770,"text":1207},{"id":754,"depth":770,"text":755},"2026-10-18T23:30:00.000Z","Google Play Billing Library 8 is supported until August 31, 2027, with an extension to November 1, 2027, so new apps and updates then need version 9. What changed in version 9, where Flutter's in_app_purchase and RevenueCat stand today, and how to migrate, from Google's docs checked October 18, 2026.",[2312,2315,2318,2321,2324],{"question":2313,"answer":2314},"When must I move to Play Billing Library 9?","Google's deprecation table gives version 8 a deadline of August 31, 2027 for new apps and updates, and an extension deadline of November 1, 2027. After that, an update has to use a supported version, and version 9 is the next one.",{"question":2316,"answer":2317},"What changed between version 8 and version 9?","Google's 9.0.0 release notes list four changes: Play Store blocked by the system now returns BILLING_UNAVAILABLE instead of ERROR, DeveloperProvidedBillingDetails.getLinkUri() is @Nullable, targetSdkVersion is 35, and in-app messaging can announce an upcoming opt-in price increase. Version 9.1.0 adds Billing Choice APIs.",{"question":2319,"answer":2320},"Can I use Billing Library 9 in a Flutter app today?","Not through the official plugin as of October 18, 2026. in_app_purchase_android 0.5.4, published October 13, 2026, still builds against com.android.billingclient:billing 8.0.0. A Flutter plugin has to move first, or you add a native override yourself.",{"question":2322,"answer":2323},"Do I need to rewrite my purchase code for version 9?","Google's guide says only the queryProductDetailsAsync signature change applies just to upgrades from version 7. It lists removed APIs without a version 8 exemption, so an app on version 8 that still calls any of them must change those calls. The other steps are the dependency bump, new sub-response codes, the error-code change and the nullable link.",{"question":2325,"answer":2326},"How do I ask for the extension?","Google says an app on an unsupported version gets a warning in Play Console. Open the warning's details on the Policy status page and use the extension form there.",{"readingTimeStats":2328},{"text":1281,"minutes":2329,"time":2330,"words":2331},4.64,278400,928,"\u002Fblog\u002Fplay-billing-library-9-migration-deadline-2027","play billing library 9 migration","6 min",[1289,1716,812],{"title":1764,"description":2310},[2338,2340,2343,2346,2348,2351,2354,2357,2360],{"title":2339,"url":2119},"flutter\u002Fpackages on GitHub, pull request #12781 (in_app_purchase_android to Billing Library 9.1.0)",{"title":2341,"url":2342},"Android Developers, Google Play Billing Library release notes","https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Fbilling\u002Frelease-notes",{"title":2344,"url":2345},"Android Developers, Migrate to Billing Library 9","https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Fbilling\u002Fmigrate-gpblv9",{"title":2347,"url":1871},"Android Developers, Google Play Billing Library version deprecation (last updated September 9, 2026)",{"title":2349,"url":2350},"flutter\u002Fpackages, in_app_purchase_android changelog","https:\u002F\u002Fgithub.com\u002Fflutter\u002Fpackages\u002Fblob\u002Fmain\u002Fpackages\u002Fin_app_purchase\u002Fin_app_purchase_android\u002FCHANGELOG.md",{"title":2352,"url":2353},"flutter\u002Fpackages, in_app_purchase changelog","https:\u002F\u002Fgithub.com\u002Fflutter\u002Fpackages\u002Fblob\u002Fmain\u002Fpackages\u002Fin_app_purchase\u002Fin_app_purchase\u002FCHANGELOG.md",{"title":2355,"url":2356},"pub.dev API, in_app_purchase_android","https:\u002F\u002Fpub.dev\u002Fapi\u002Fpackages\u002Fin_app_purchase_android",{"title":2358,"url":2359},"RevenueCat purchases-flutter changelog on GitHub","https:\u002F\u002Fgithub.com\u002FRevenueCat\u002Fpurchases-flutter\u002Fblob\u002Fmain\u002FCHANGELOG.md",{"title":2361,"url":2362},"RevenueCat purchases-android on GitHub (libs.versions.toml)","https:\u002F\u002Fgithub.com\u002FRevenueCat\u002Fpurchases-android\u002Fblob\u002Fmain\u002Fgradle\u002Flibs.versions.toml","blog\u002Fplay-billing-library-9-migration-deadline-2027","play billing library 9, play billing library 9 migration, play billing library 8 deprecation, billing library deadline august 31 2027, billing library extension november 1 2027, in_app_purchase_android billing 9, purchases_flutter billing library 9, play billing 9.1.0, flutter in app purchase billing library update",[2366,2367,2368,2369,2370],"Google's deprecation table sets August 31, 2027 for new apps and updates on Billing Library 8, with an extension deadline of November 1, 2027. Version 9 is the next supported version, and its own row says August 31, 2028.","Version 9.0.0 (May 19, 2026) brings four changes from 8, including: blocked Play Store apps now return BILLING_UNAVAILABLE instead of ERROR, getLinkUri() can be null, and targetSdkVersion is 35. Version 9.1.0 (June 18, 2026) adds Billing Choice APIs.","Google's migration guide for 8 to 9 says to update the dependency to 9.1.0, handle new sub-response codes, and use AndroidX Core 1.9 or later for the new error code.","As of October 18, 2026, Flutter's in_app_purchase_android 0.5.4 still depends on Billing Library 8.0.0, and RevenueCat's latest Android SDK in purchases_flutter 10.16.0 uses 8.3.0. I found no Flutter plugin on version 9 yet.","Google says existing apps keep working. The deadline applies to new apps and updates, so an app still on version 8 can't ship an update after its deadline unless the plugin you use has moved.","https:\u002F\u002Fapp369.com\u002Fblog\u002Fplay-billing-library-9-migration-deadline-2027\u002F","tZSF-xEV_hbBo7eSRmiLzSJaDQlvcpQduM6X56CBo5A",[2374,2376,2380,2383,2385,2389],{"keyword":5,"url":853,"title":5,"relevance":2375},75,{"keyword":2377,"url":2378,"title":2377,"relevance":2379},"Google Play Games Services v1 Shutdown 2027: Migrate to v2","https:\u002F\u002Fapp369.com\u002Fblog\u002Fplay-games-services-v1-shutdown-migrate-to-v2-2027\u002F",12,{"keyword":2381,"url":2382,"title":2381,"relevance":2379},"Google Play 16 KB Page Size: Fixing Flutter and Android Apps","https:\u002F\u002Fapp369.com\u002Fblog\u002Fgoogle-play-16kb-page-size-flutter-android-2026\u002F",{"keyword":858,"url":1325,"title":858,"relevance":2384},11,{"keyword":2386,"url":2387,"title":2386,"relevance":2388},"Flutter \"Applying Gradle Plugin Imperatively\" Error: The Fix","https:\u002F\u002Fapp369.com\u002Fblog\u002Fflutter-gradle-plugin-applied-imperatively-fix-2026\u002F",9,{"keyword":2390,"url":2391,"title":2390,"relevance":2388},"Flutter Android Build Fails After AGP 9: The Fix","https:\u002F\u002Fapp369.com\u002Fblog\u002Fflutter-android-gradle-plugin-9-build-failed-fix-2026\u002F",1792447588920]