Add iOS (iPad + iPhone) support, plus an Android tablet layout and cross-platform fixes - #3
tcpreplay-dev wants to merge 1 commit into
Conversation
…tform fixes iOS port (iPad + iPhone), verified on physical iPad Pro 13" (M5) and iPhone 17 Pro, iOS 26.x, against a live K4 over TLS-PSK with RX audio and the Metal panadapter: - iOS build wiring (CMake), OpenSSL PSK TLS socket, Core Audio session, app icon, full-screen plist. - iPad control UI matched to the macOS/radio layout: tap-to-swap tiles with adjust popups, reshaped dual-text buttons, A-/A+/B-/B+ fine-tune pad, direct frequency entry, filter/meter refinements, MON/NORM/BAL. - Optional HaliKey MIDI CW keyer over CoreMIDI (RtMidi). Android tablet layout: large Android screens (>=7") use the regular (iPad-style) layout, sized to fit, with the filter/indicator restructure, waterfall brightness handling, and per-pan VFO tuning. Adds build-android.sh to build the Android APK from macOS. Cross-platform fixes (also benefit desktop/macOS): - Stop mid-pass RHI resource updates in the panadapter and mini-pan (fixes a Debug-build Metal assert). - Dual panadapters tune their own VFO on touch (Pan A -> VFO A, Pan B -> VFO B), matching the radio. - FSK filter peak spacing scales with bandwidth; NORM marker tolerance. - Typematic A/B fine-tune buttons (press-and-hold repeats). - B SET lights green while active, resets on disconnect. - Keep the screen awake while connected (Android). Platform-specific behavior (waterfall gain, keep-awake, tablet size fits) is #ifdef-gated so other platforms compile it out. Vendored prebuilt iOS OpenSSL/Opus static libs live under third_party/ios/. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Fred, thank you again for this substantial contribution. I would like you to continue leading the Android tablet and iOS versions. We have preserved the work on v1.0.5-based development branches and are separating it into tablet and iOS tracks so each can be tested and reviewed independently. Please continue physical-device testing and submit separate follow-up PRs for the Android tablet and iOS work based on v1.0.5. Once you are satisfied with the iPhone and iPad testing results, I encourage you to proceed with submitting the iOS apps to the Apple App Store. The cross-platform rendering and per-pan tuning fixes are being carried into v1.0.5, and your authorship is preserved in the adapted commits. I appreciate the work and look forward to continuing the collaboration. |
|
Thank you again, Fred. QK4 Mobile v1.0.5 is now released, and your work has been carried forward on that baseline in separate draft PRs: Android tablet #5 and iPhone/iPad #6. The shared rendering and per-pan tuning corrections are included in v1.0.5, and your authorship is retained in the adapted commits. Please continue tablet and iOS testing through those PRs. Once you are satisfied with the iPhone and iPad physical-device results, we encourage you to proceed with submitting the iOS apps to the Apple App Store. Closing this combined PR as superseded by #5 and #6. |
Adapt the large-screen control layout from QK4-Android PR #3 onto the v1.0.5 phone baseline. Preserve the current compact phone UX, digital modes, macro state refresh, and user-controlled waterfall behavior.
Adapt the iPhone and iPad build, OpenSSL TLS-PSK transport, AVAudioSession setup, touch UI, HaliKey MIDI path, resources, and vendored iOS dependencies from QK4-Android PR #3 onto the v1.0.5 shared baseline. Preserve guarded FT8/SSTV transmission and macro state refresh, add iOS Keychain storage for QRZ credentials, and implement the current per-screen orientation policy.
Adapt the iPhone and iPad build, OpenSSL TLS-PSK transport, AVAudioSession setup, touch UI, HaliKey MIDI path, resources, and vendored iOS dependencies from QK4-Android PR #3 onto the v1.0.5 shared baseline. Preserve guarded FT8/SSTV transmission and macro state refresh, add iOS Keychain storage for QRZ credentials, and implement the current per-screen orientation policy.
Adapt the large-screen control layout from QK4-Android PR #3 onto the v1.0.5 phone baseline. Preserve the current compact phone UX, digital modes, macro state refresh, and user-controlled waterfall behavior.
Thanks, Tim — glad the port was useful, and thanks for the README credit. I've got more fixes and enhancements on the way, and I'd like to set up a clean way to land them so we can collaborate and test before things ship. I've sent you my email — let's coordinate there. Talk soon, Fred - VE7VT |
Adapt the RHI render-pass correction and per-pan touch tuning from QK4-Android PR worldwidedx#3 while preserving the current Android waterfall controls.
Add iOS (iPad + iPhone) support, plus an Android tablet layout and cross‑platform fixes
Hi @worldwidedx — first off, thank you for QK4‑Android. It's a great base and made this work possible.
This is a larger‑than‑usual first contribution, so I wanted to open it as a PR for discussion rather than drop it on you unannounced. No pressure to merge as‑is — I'm very happy to split it up, reshape it, or maintain it on a branch, whatever works best for you.
What this adds
Three things, layered on top of the current Android client:
1. iOS port (iPad + iPhone). A native Qt build for iOS that reuses the existing app almost entirely — same UI, same CAT/TLS‑PSK networking, same DSP/panadapter. Verified running on physical hardware: iPad Pro 13" (M5) and iPhone 17 Pro, iOS 26.x, connected to a live K4 over TLS‑PSK with RX audio and the Metal panadapter working.
2. Android tablet layout. Large Android screens (≥7") now get the "regular" (iPad‑style) layout instead of the phone layout, sized to fit, with the filter/indicator restructure, waterfall brightness handling, and per‑pan VFO tuning. Includes a
build-android.shhelper for building the Android APK from macOS.3. Cross‑platform fixes and tweaks made while getting all three platforms working — these benefit macOS/desktop too:
Scope of the diff
The source change is small and reviewable: ~50 files, ~3.1k insertions. Almost everything else in the file count is vendored iOS dependencies — prebuilt OpenSSL and Opus static libraries + headers under
third_party/ios/(~21 MB of.afiles). I checked those in so an iOS build works out of the box, mirroring how the Android third‑party libs are handled, but I know binaries in a repo are a judgment call. Happy to move them behind a fetch/build script and.gitignoreinstead if you'd prefer a clean tree — just say the word.No Android‑only behavior leaks into other platforms: platform‑specific pieces (waterfall gain, keep‑awake, tablet size fits) are
#ifdef‑gated, so desktop/iOS builds compile them out.Screenshots
Same app, three platforms (all v1.0.4.1, live K4, dual RX):
Android tablet (Samsung, regular layout)
iPad Pro 13" (M5)
iPhone 17 Pro (compact layout)
On iOS / the App Store
Since iOS may be less familiar territory, I'm glad to carry the load: I can handle the signing, build, and TestFlight/App Store submission legwork, and stage a build for your sign‑off (and the QK4 author's) before anything is published. If you're both comfortable, I can then publish it to the App Store. Nothing ships without your OK.
Testing
I'll have a small group of testers put the builds through their paces on real hardware across all three platforms, and I'll fold back whatever they find. Your input is very welcome — on the approach, the structure of this PR, the dependency question above, or anything else. If you'd rather take this in smaller pieces, I'll break it up however you like.
Thanks again for the foundation to build on.
Changes in this PR
Squashed into a single commit; grouped here by area for review.
iOS port — foundation & build
src/network/psktlssocket*), replacing the QSslSocket path on iOSsrc/ios/iosaudiosession.mm)UIRequiresFullScreenset in Info.plist only (not also via CMake)iOS / iPad control UI
Android tablet layout
build-android.sh— build the Android APK from macOSCross‑platform fixes (benefit desktop/macOS too)
Diff scope: ~43 source files (
src/), +2.8k/−0.6k lines. The remaining file count is vendored iOS OpenSSL/Opus underthird_party/ios/(see note above).