Skip to content

iOS: ship production bundle ID (fixes #26 AltStore install)#27

Merged
ryanbr merged 1 commit into
mainfrom
fix-ios-altstore-bundle-id
Jul 7, 2026
Merged

iOS: ship production bundle ID (fixes #26 AltStore install)#27
ryanbr merged 1 commit into
mainfrom
fix-ios-altstore-bundle-id

Conversation

@ryanbr

@ryanbr ryanbr commented Jul 7, 2026

Copy link
Copy Markdown
Owner

Fixes #26 — v8.3.1 fails to install via AltStore with "bundle ID com.noopapp.noop.staging does not match the one specified by the source (com.noopapp.noop)".

Root cause

The iOS app/widgets/watch shipped as com.noopapp.noop.staging (a project.yml overlay), but the AltStore manifest — and every historical release (7.x–8.2.2) — declares com.noopapp.noop. AltStore keeps the ipa's bundle ID when it re-signs, so .staging ≠ the declared ID → rejected. It surfaced now because the AltStore automation added the first .staging ipa (8.3.1) to the production manifest.

Fix

Drop .staging from the iOS-family targets (app, widgets, watch, complications, WKCompanionAppBundleIdentifier) so the ipa is the production com.noopapp.noop the manifest already declares — restoring installs and the update path from 8.2.2. iOS has no App Store app to sit "beside" (and NoopApp is closed), so .staging served no purpose on iOS. The Swift code already assumes this identity (StorePaths.productionBundleID, WatchScoreSnapshot.appGroupId = group.com.noopapp.noop).

Left unchanged: the macOS bundle ID and the shared APP_GROUP_ID (independent of the iOS bundle ID; AltStore free-signing strips app-group entitlements anyway).

After merge

Re-cut as 8.3.2 to publish a production ipa + refresh the manifest (the current 8.3.1 entry points at the broken .staging ipa). CI build verifies the iOS compile; I'll confirm the built ipa's CFBundleIdentifier is com.noopapp.noop before we ship.

…nstall)

The iOS app/widgets/watch shipped as com.noopapp.noop.staging, but the AltStore source
manifest — and every historical release — declares com.noopapp.noop. AltStore keeps the
ipa's bundle ID when it re-signs, so .staging != the source's declared ID and the install
was rejected ('bundle ID does not match the one specified by the source').

iOS has no App Store app to install 'beside' (and NoopApp is closed), so the .staging
overlay served no purpose there and only broke sideloading. Drop it from the iOS-family
targets (app, widgets, watch, complications, WKCompanion ref) so the ipa is the production
com.noopapp.noop the manifest already declares — restoring installs + the update path from
8.2.2. The Swift code already assumes this identity (StorePaths/WatchScoreSnapshot use the
production id/group). macOS bundle id + the shared app group are left unchanged.
@ryanbr ryanbr merged commit e82f6df into main Jul 7, 2026
4 checks passed
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.

[Bug] v8.3.1 fails to install via AltStore - bundle ID mismatch

1 participant