Skip to content

slint-viewer: Implement iOS builds and fix various issues with App Store validation#11879

Merged
tronical merged 5 commits into
masterfrom
simon/viewer-ios
May 27, 2026
Merged

slint-viewer: Implement iOS builds and fix various issues with App Store validation#11879
tronical merged 5 commits into
masterfrom
simon/viewer-ios

Conversation

@tronical
Copy link
Copy Markdown
Member

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.

tronical added 5 commits May 27, 2026 13:38
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.
@tronical tronical requested a review from NigelBreslaw May 27, 2026 14:06
@tronical tronical enabled auto-merge (rebase) May 27, 2026 14:18
@tronical tronical merged commit 912717b into master May 27, 2026
49 checks passed
@tronical tronical deleted the simon/viewer-ios branch May 27, 2026 14:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants