Skip to content

fix: remove invalid 'network-extension' from UIBackgroundModes#17

Merged
torlando-tech merged 1 commit into
mainfrom
fix/invalid-background-mode
Apr 25, 2026
Merged

fix: remove invalid 'network-extension' from UIBackgroundModes#17
torlando-tech merged 1 commit into
mainfrom
fix/invalid-background-mode

Conversation

@torlando-tech
Copy link
Copy Markdown
Owner

@torlando-tech torlando-tech commented Apr 25, 2026

Summary

App Store Connect rejected build 0.0.2 (10) with:

ITMS-90112: Invalid Info.plist value. The Info.plist key UIBackgroundModes contains an invalid value: 'network-extension'.

network-extension isn't in Apple's allowed UIBackgroundModes list (audio, bluetooth-central, bluetooth-peripheral, external-accessory, fetch, location, network-authentication, processing, push, remote-notification, voip). Network Extensions declare themselves via NSExtension / NSExtensionPointIdentifier in the extension target's own Info.plist (which we already do correctly in Sources/ColumbaNetworkExtension/Info.plist).

The host app doesn't need any background mode for the packet tunnel — the system keeps the extension running on its own once NEPacketTunnelProvider is started.

Test plan

🤖 Generated with Claude Code

App Store Connect upload rejected build 0.0.2 (10) with:

  ERROR ITMS-90112: Invalid Info.plist value. The Info.plist key
  UIBackgroundModes contains an invalid value: 'network-extension'.

`network-extension` isn't a valid UIBackgroundModes mode for a host
app (Apple's allowed list: audio, bluetooth-central,
bluetooth-peripheral, external-accessory, fetch, location,
network-authentication, processing, push, remote-notification, voip).

Network Extensions declare themselves via NSExtension /
NSExtensionPointIdentifier in the extension target's Info.plist —
which we already do correctly in
Sources/ColumbaNetworkExtension/Info.plist. The host app doesn't need
any background mode for the packet tunnel; the system keeps the
extension running on its own once activated.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Apr 25, 2026

Greptile Summary

Removes the invalid network-extension string from UIBackgroundModes in Sources/ColumbaApp/Resources/Info.plist, fixing the App Store Connect rejection (ITMS-90112). The remaining four background modes (bluetooth-central, bluetooth-peripheral, location, voip) are all valid Apple-defined values.

Confidence Score: 5/5

Safe to merge — single-line removal of a value that Apple explicitly rejects; no functional code changes.

The change is minimal, well-motivated by the App Store Connect error, and the resulting UIBackgroundModes array contains only documented, valid Apple values. No logic, runtime behaviour, or entitlements are affected.

No files require special attention.

Important Files Changed

Filename Overview
Sources/ColumbaApp/Resources/Info.plist Removes invalid network-extension from UIBackgroundModes; remaining modes are all valid Apple values.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[App Store Connect submission] -->|ITMS-90112 rejection| B{UIBackgroundModes contains 'network-extension'?}
    B -->|Yes – before this PR| C[Rejected: invalid value]
    B -->|No – after this PR| D[Accepted: only valid modes remain]
    D --> E[bluetooth-central]
    D --> F[bluetooth-peripheral]
    D --> G[location]
    D --> H[voip]
    I[NEPacketTunnelProvider] -->|runs in its own extension process| J[ColumbaNetworkExtension Info.plist NSExtensionPointIdentifier]
    J -.->|host app needs no background mode for the tunnel| D
Loading

Reviews (1): Last reviewed commit: "fix: remove invalid 'network-extension' ..." | Re-trigger Greptile

@torlando-tech torlando-tech merged commit a8b874d into main Apr 25, 2026
2 checks passed
@torlando-tech torlando-tech deleted the fix/invalid-background-mode branch April 25, 2026 23:47
torlando-tech added a commit that referenced this pull request May 11, 2026
…orkaround

reticulum-swift 0.3.1 (PR #17) makes `TCPInterface.endTunnelMode()`
and `AutoInterface.endTunnelMode()` idempotent via an `outboundHook
!= nil` guard. That moves the contract upstream, so the
`isTunnelModeActive` bool guard added in `c0d2213` is no longer
necessary — the `endTunnelMode()` calls in
`applyTunnelModeToInterfaces(active: false)` are now safely no-ops
when fired on never-tunneled interfaces (e.g. the initial `.invalid`
VPN-status notification on every cold start).

Removed:
  - `isTunnelModeActive` field declaration + doc
  - `isTunnelModeActive = true` write in the active=true branch
  - `isTunnelModeActive = false` write in the active=false branch
  - The `guard isTunnelModeActive else { return }` short-circuit

Build verified: xcodebuild for iOS Simulator BUILD SUCCEEDED.

The port-deviations.md note for reticulum-swift's tunnel API spelled
out that this Columba-iOS workaround should be deleted on the next
deps bump — this is that deps bump.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.

1 participant