Impact and urgency
Critical — enforcement has already started for apps built with the iOS/iPadOS 27 SDK. The builders still accept legacy launch configuration that can generate a bundle without Apple's required launch-screen metadata, and an explicit ios.uiscene=false can still omit the scene lifecycle. Default Maven builds already enable modern launch metadata; the concrete exposure is the surviving opt-out paths.
This was identified while reviewing Apple's September 14, 2026 production release and App Store Connect update. It is separate from the deployment-target floor migration in #5788 / codenameone/BuildDaemon#220.
Official requirements and dates
- iOS & iPadOS 27 release notes, UIKit item 168247372: apps linked with SDK 27.0 or later must have a launch screen. Their final Info.plist must declare
UILaunchStoryboardName, UILaunchStoryboards, UILaunchScreen, or UILaunchScreens. Apple says rejection begins when it accepts SDK 27 submissions. This is a paraphrase.
- The same release notes, item 141837548, require the scene lifecycle for apps built with the new SDK; otherwise they fail to launch. Migration guidance.
- App Store Connect release notes explicitly date SDK 27 RC upload acceptance to 2026-09-09, followed by production SDK 27 upload acceptance on 2026-09-14.
- Apple Releases dates Xcode 27 (27A266a), iOS 27.0 and iPadOS 27.0 (24A437) to 2026-09-14.
- TN3192 records the launch-screen requirement in its 2026-06-08 revision, and the SDK 27 full-screen/resizing change in its 2026-08-13 revision.
UIRequiresFullScreen=true is not a replacement for a launch screen.
Earliest submission enforcement: 2026-09-09 for SDK 27 RC; production SDK/OS availability: 2026-09-14. These are conditional on using SDK 27. They are not a claim that every existing SDK 26 upload is now prohibited. Apple's separate SDK 27 upload minimum remains April 2027 without a published day.
Concrete applicability
Inspected current default branches on 2026-09-15:
codenameone/CodenameOne, master 45ad6e18031d85d515a45106ebb131166a8dcb3b:
- IPhoneBuilder.java,
injectToPlist(): ios.generateSplashScreens=true disables multitasking and skips the modern launch-key injection at lines 16196–16224. The branch injects UIRequiresFullScreen, which does not satisfy the new launch-screen requirement.
- The translator Info.plist template supplies
NSMainNibFile, but none of the four accepted launch-screen keys. With the legacy hint and no custom plist override, there is no fallback launch-key producer in this path.
- IPhoneBuilder.java gates
UIApplicationSceneManifest on ios.uiscene / CarPlay; an ordinary app explicitly setting ios.uiscene=false skips it. The same hint controls native CN1_USE_UI_SCENE generation and removal of NSMainNibFile.
- Working-With-iOS.asciidoc still documents opting into
ios.generateSplashScreens=true.
codenameone/BuildDaemon, master 0e620085781fffa99f4838b322996a540817be73:
- IPhoneBuilder.java retains the legacy splash and launch-key conditions; lines 13618 onward gate the scene manifest.
- Native scene generation defaults the hint to true at line 4007, while plist processing defaults it to false at lines 13456/13589/13618. Audit request normalization before concluding that absent-hint hosted builds are affected; explicit false is the verified opt-out.
- No SDK 27 guard for either legacy hint was found in either builder.
Affected users: customers retaining old splash-screen or lifecycle hints who build locally or on workers using SDK 27. Failure modes are App Store rejection for absent launch metadata and Apple's documented launch failure for a legacy lifecycle. This is source-backed exposure, not a reproduced customer rejection or device crash.
Migration and internal targets
The normal 90/60/30-day checkpoints against September 9 were 2026-06-11 / 2026-07-11 / 2026-08-10. Those dates have elapsed; the required 30-day buffer cannot be recovered. Do not present future remediation dates as pre-enforcement compliance.
Emergency targets:
- 2026-09-15 — investigation: generate minimal projects with each hint separately and together on SDK 26 and 27; inspect the final processed app plist and native lifecycle flags. Audit BuildDaemon request defaults and identify hosted workers using SDK 27.
- 2026-09-16 — implementation: enforce SDK-appropriate launch metadata and lifecycle in both producers. Reject incompatible opt-outs with actionable errors or implement a documented safe migration; do not silently discard a custom launch experience. Validate actual plist keys, including customer-injected metadata.
- 2026-09-18 — CI/beta validation: assert the final plist contains a valid launch key and phone scene configuration; run iOS/iPadOS 27 cold-launch and resize tests, plus SDK 26 compatibility checks. Validate a signed archive with TestFlight/App Store Connect.
- 2026-09-21 — release and communication: publish coordinated Maven/BuildDaemon updates, confirm worker deployment, and update build-hint documentation and customer migration notes. Keep the SDK 27 rollout gated on the required validation.
Risks, unknowns, and verification
- Hosted worker deployment and signed customer archive behavior were not checked in this review.
- Custom
ios.plistInject, CarPlay, Catalyst, extensions, OpenGL/Metal and legacy NIB handling need separate cases.
- Resizing support already exists in
CodenameOne_GLViewController.viewWillTransitionToSize; do not equate removal of the full-screen opt-out with a proven renderer defect.
- Inspect the final archived plist rather than only the generator strings. Verify upload acceptance and cold launch with both opt-outs exercised.
Duplicate check
Searched open and closed CodenameOne issues and PRs for the hints, launch-screen/scene wording, SDK 27, enforcement dates, canonical release-note URL and technote identifiers. Related #5218/#5230 cover earlier launch behavior and minimum-OS handling; merged #5788 and BuildDaemon#220 cover deployment floors/toolchain selection. None tracks or removes these SDK 27-incompatible opt-outs. No existing item was modified.
Impact and urgency
Critical — enforcement has already started for apps built with the iOS/iPadOS 27 SDK. The builders still accept legacy launch configuration that can generate a bundle without Apple's required launch-screen metadata, and an explicit
ios.uiscene=falsecan still omit the scene lifecycle. Default Maven builds already enable modern launch metadata; the concrete exposure is the surviving opt-out paths.This was identified while reviewing Apple's September 14, 2026 production release and App Store Connect update. It is separate from the deployment-target floor migration in #5788 / codenameone/BuildDaemon#220.
Official requirements and dates
UILaunchStoryboardName,UILaunchStoryboards,UILaunchScreen, orUILaunchScreens. Apple says rejection begins when it accepts SDK 27 submissions. This is a paraphrase.UIRequiresFullScreen=trueis not a replacement for a launch screen.Earliest submission enforcement: 2026-09-09 for SDK 27 RC; production SDK/OS availability: 2026-09-14. These are conditional on using SDK 27. They are not a claim that every existing SDK 26 upload is now prohibited. Apple's separate SDK 27 upload minimum remains April 2027 without a published day.
Concrete applicability
Inspected current default branches on 2026-09-15:
codenameone/CodenameOne, master
45ad6e18031d85d515a45106ebb131166a8dcb3b:injectToPlist():ios.generateSplashScreens=truedisables multitasking and skips the modern launch-key injection at lines 16196–16224. The branch injectsUIRequiresFullScreen, which does not satisfy the new launch-screen requirement.NSMainNibFile, but none of the four accepted launch-screen keys. With the legacy hint and no custom plist override, there is no fallback launch-key producer in this path.UIApplicationSceneManifestonios.uiscene/ CarPlay; an ordinary app explicitly settingios.uiscene=falseskips it. The same hint controls nativeCN1_USE_UI_SCENEgeneration and removal ofNSMainNibFile.ios.generateSplashScreens=true.codenameone/BuildDaemon, master
0e620085781fffa99f4838b322996a540817be73:Affected users: customers retaining old splash-screen or lifecycle hints who build locally or on workers using SDK 27. Failure modes are App Store rejection for absent launch metadata and Apple's documented launch failure for a legacy lifecycle. This is source-backed exposure, not a reproduced customer rejection or device crash.
Migration and internal targets
The normal 90/60/30-day checkpoints against September 9 were 2026-06-11 / 2026-07-11 / 2026-08-10. Those dates have elapsed; the required 30-day buffer cannot be recovered. Do not present future remediation dates as pre-enforcement compliance.
Emergency targets:
Risks, unknowns, and verification
ios.plistInject, CarPlay, Catalyst, extensions, OpenGL/Metal and legacy NIB handling need separate cases.CodenameOne_GLViewController.viewWillTransitionToSize; do not equate removal of the full-screen opt-out with a proven renderer defect.Duplicate check
Searched open and closed CodenameOne issues and PRs for the hints, launch-screen/scene wording, SDK 27, enforcement dates, canonical release-note URL and technote identifiers. Related #5218/#5230 cover earlier launch behavior and minimum-OS handling; merged #5788 and BuildDaemon#220 cover deployment floors/toolchain selection. None tracks or removes these SDK 27-incompatible opt-outs. No existing item was modified.