slint-viewer: Implement iOS builds and fix various issues with App Store validation#11879
Merged
Conversation
Add an opt-in 'ios' input to slint_tool_binary.yaml that builds an unsigned .xcarchive of slint-viewer for aarch64-apple-ios, versioned with the workspace version and the commit count, and uploaded as an artifact named with the short SHA. Make build_for_ios_with_cargo.bash skip code signing when CODE_SIGNING_ALLOWED=NO, and wire the iOS project's version fields to build settings so CI can inject them. Document the CI build and the local sign/export/upload-to-TestFlight steps in docs/ios.md.
UISupportedInterfaceOrientations listed the non-existent UIInterfaceOrientationPortraitLandscapeLeft, which left LandscapeLeft unsupported and made App Store validation reject the bundle (error 90474, iPad multitasking requires all four orientations).
Render the app icon asset catalog from logo/slint-logo-square-light-whitebg.svg with rsvg-convert in a pre-build script, instead of checking in any icon files. The Assets.xcassets folder is generated (and gitignored); the xcodegen source is marked optional so project generation tolerates its absence. The slint_tool_binary.yaml iOS job installs librsvg.
UILaunchScreen was written as an array, so it landed in Info.plist as an array rather than the dictionary iOS expects, making App Store validation reject the bundle (error 90475, iPad multitasking requires a valid UILaunchScreen). An empty dictionary yields the default launch screen. The dropped ImageRespectSafeAreaInsets key was misspelled (it is UIImageRespectsSafeAreaInsets) and only applies with a launch image, which the viewer does not set, so it had no effect.
The app's executable is built by cargo, not compiled by Xcode, so Xcode produced no matching dSYM and the archive failed validation (missing dSYM for the binary's UUID). Build the release binary with debug info and run dsymutil into the folder Xcode collects dSYMs from, so the archive ships a dSYM matching the executable for crash symbolication.
NigelBreslaw
approved these changes
May 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR includes various fixes to pass App Store validation, such as invalid plist keys as well as the missing icon, and it also adds a way of building the xcarchive in the CI.
We can later switch to Xcode cloud with automatic submissions, but for now this gets us going slowly.