- Swift 100%
|
|
||
|---|---|---|
| Apps | ||
| Packages/CrossSoundKit | ||
| tool | ||
| .gitignore | ||
| CrossSound-watchOS.entitlements | ||
| Makefile | ||
| project.yml | ||
| README.md | ||
CrossSound-Apple
Native SwiftUI apps for iOS and macOS — the replacement for the Flutter builds on Apple platforms. Two separate apps (each platform keeps its own shell and features) over one shared package.
Packages/CrossSoundKit/
CrossSoundKit API, auth, player, models (DRM stubbed) — no UI
CrossSoundUI red_white_ui ported to SwiftUI (tokens copied from 0.5.0)
Apps/iOS fi.RedLintu16.CrossSound.native (flip to fi.RedLintu16.CrossSound at cutover)
Apps/macOS fi.RedLintu16.CrossSound.mac
CrossSound.xcodeproj is generated — never edit it, edit project.yml:
make project # xcodegen generate
make mac # debug build, macOS
make ios # debug build, iOS simulator
DRM is stubbed out on this branch. The FairPlay key delegates and the
offline-download engine in Kit/DRM keep their types and signatures but refuse
every key request and download, and SoundCloudAPI.resolveDrmStream returns nil.
Go+ tracks that SoundCloud only serves encrypted are skipped as unplayable;
everything else plays as usual.
Porting map (Flutter → here)
| Flutter (CrossSound-Android / -Flutter) | Here | Status |
|---|---|---|
| ios/macos FairPlay plugins (key delegates) | Kit/DRM | ✅ ported |
| fairplay method/event channels + drm_player | Kit/Player/PlayerEngine | ✅ ported |
| native_log EventChannel → Debug Console | Kit/Support/CSLog | ✅ ported |
| DrmDownloadPlugin (AVAssetDownloadTask) | — (downloads removed here) | ✖ |
| services/soundcloud_api.dart (v1+PKCE / v2) | Kit/API (Phase 1) | ⬜ |
| services/auth_service.dart (two tokens) | Kit/Auth (Phase 1) | ⬜ |
| providers/app_state.dart (queue/shuffle/radio) | Kit/Player + Kit/Queue (Phase 2) | ⬜ |
| screens/ (red_white_ui) | CrossSoundUI + Apps (Phase 3) | ⬜ |
| local_api_server.dart (52124/8963) | Apps/macOS (Phase 5) | ⬜ |
| StatusBarController / notifications / EQ | Apps/macOS + Kit/Audio (Phase 5) | ⬜ |
| widgets, Live Activity, Dynamic Island | Apps/iOS extensions (Phase 6) | ⬜ |
| remote_service.dart (Firebase RTDB) | Kit/Remote via REST+SSE (Phase 7) | ⬜ |
No downloads on this branch either: the offline-download feature (download store, database, engines, Downloads screens and every Download button, on the phone, the Mac and the watch) is removed, so everything streams.