Everything blocking a submission from main, found by auditing the
archive rather than the source.
Privacy manifest. The archive had no PrivacyInfo.xcprivacy while
SessionStore uses UserDefaults, a required-reason API — App Store
Connect refuses those uploads with ITMS-91053. Declares that one access
(CA92.1, app's own data) and states the rest as it is: no tracking, no
collected data types, no third-party SDK. Verified present in the built
bundle, not just in the source tree.
Export compliance. ITSAppUsesNonExemptEncryption = NO, so uploads
no longer stop to ask. The app speaks HTTPS and nothing else.
Screenshots. The checkpoint could not produce a light set — the app
forced dark on request and otherwise followed the device, and the clones
are dark, so both "appearances" were identical. GITBAY_UITEST_DARK=0
now forces light. Adds an iPad checkpoint that navigates by tab and
through Explore, because the iPhone one drives the repo list's
.searchable, which iPadOS lays out differently; selectTab also falls
back to a plain button, since iPadOS renders a TabView as a top bar.
20 shots exist at both store sizes.
Fixture. testBlameAndEditFlows wanted cmc/ui-smoke-edit, which
did not exist — the same disease as #8, in a test that happened not to
be failing when I audited it. Seeded with notes.txt; setUp skips with
the reason if it disappears.
Whole suite green: 188 pass, the only skip being the opt-in live instance token. Archive succeeds and signs.