Skip to content

iOS: App Store / TestFlight distribution readiness - #12

Open
tcpreplay-dev wants to merge 2 commits into
codex/iosfrom
feat/ios-app-store-distribution
Open

tcpreplay-dev wants to merge 2 commits into
codex/iosfrom
feat/ios-app-store-distribution

Conversation

@tcpreplay-dev

Copy link
Copy Markdown
Collaborator

Fixes discovered while getting an iOS build onto TestFlight. All four are prerequisites for uploading to App Store Connect; none change the default app identity or runtime behavior.

Changes

Configurable bundle id (QK4_IOS_BUNDLE_ID cache var, defaults to com.w9wdx.qk4phone)
Lets a fork or a TestFlight build signed by a different Apple team override the identifier with -DQK4_IOS_BUNDLE_ID=your.id instead of editing CMakeLists. Default identity is unchanged — a normal build is byte-for-byte the same.

dSYM emission (DEBUG_INFORMATION_FORMAT=dwarf-with-dsym)
The CMake Xcode generator otherwise archives without a dSYM, producing the App Store Connect "Upload Symbols Failed" warning and unsymbolicated crash reports.

NSCameraUsageDescription
Static Qt Multimedia links camera API symbols even though QK4 only uses QAudioSink/QAudioSource. App Store processing rejects the binary (ITMS-90683) without a camera purpose string. Added one stating the app does not use the camera.

ITSAppUsesNonExemptEncryption = false
QK4's only cryptography is standard TLS-PSK via OpenSSL, which qualifies for the export-compliance exemption. Declaring it in the plist clears the "Missing Compliance" prompt on every upload.

Verification

Configured clean for iOS Release with -DQK4_IOS_BUNDLE_ID=dev.tcpreplay.qk4; a full archive + upload of this tree reached TestFlight (build processed, compliance cleared) under the tcpreplay-dev Apple team.

🤖 Generated with Claude Code

tcpreplay-dev and others added 2 commits September 14, 2026 16:13
Make the iOS bundle identifier a cache variable (QK4_IOS_BUNDLE_ID)
defaulting to the existing com.w9wdx.qk4phone, so forks and TestFlight
builds signed by a different Apple team can override it with
-DQK4_IOS_BUNDLE_ID=... instead of editing CMakeLists. No change to the
default identity.

Also force DEBUG_INFORMATION_FORMAT=dwarf-with-dsym: the CMake Xcode
generator otherwise ships archives without a dSYM, producing the App
Store Connect "Upload Symbols Failed" warning and unsymbolicated crashes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
NSCameraUsageDescription: static Qt Multimedia links camera API symbols
even though QK4 only uses QAudioSink/QAudioSource, so App Store
processing rejects the binary (ITMS-90683) without a camera purpose
string. Add one stating the app does not use the camera.

ITSAppUsesNonExemptEncryption=false: QK4's only cryptography is standard
TLS-PSK via OpenSSL, which qualifies for the export-compliance
exemption. Declaring it in the plist clears the "Missing Compliance"
prompt on every TestFlight/App Store upload.

Co-Authored-By: Claude Opus 4.8 <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