Oto is a SwiftUI iOS music app built around the NetEase Cloud Music ecosystem. The current app includes login-aware discovery, search, album/artist/playlist browsing, background playback, lock-screen controls, and offline downloads.
- SwiftUI app architecture with shared service singletons for playback, session, downloads, and caching
- NetEase-backed discovery and personalized shelves
- Full-screen now-playing experience with lyrics, queue management, and transport controls
- Offline download flow with persisted playback/download state
- Swift 6
- SwiftUI
- Xcode project:
Oto.xcodeproj - iOS deployment target: 26.0
- Dependencies:
Oto/app sourceOtoTests/unit testsConfig/checked-in public-safe config plus local override templatefastlane/release automation
- Xcode 17 or newer with iOS simulator runtimes installed
- Ruby/Bundler for fastlane workflows
git clone https://github.com/Morris-Lau/Oto.git
cd Otobundle installThe repository ships with public-safe placeholder identity values in Config/Identity.xcconfig.
If you want to run on a real device or archive/TestFlight-build the app, copy the local override template and fill in your own values:
cp Config/Local.xcconfig.example Config/Local.xcconfigThen set:
APP_BUNDLE_IDAPP_TEST_BUNDLE_IDAPPLE_DEVELOPMENT_TEAM
Config/Local.xcconfig is gitignored and should stay local.
List the available scheme:
xcodebuild -project Oto.xcodeproj -listBuild for the simulator:
xcodebuild -project Oto.xcodeproj -scheme Oto -destination 'platform=iOS Simulator,name=iPhone 17' buildRun the test target:
xcodebuild -project Oto.xcodeproj -scheme Oto -destination 'platform=iOS Simulator,name=iPhone 17' testFastlane lanes:
bundle exec fastlane ios beta
bundle exec fastlane ios upload_testflightFor TestFlight upload you will also need App Store Connect credentials via environment variables or a local setup supported by fastlane/Fastfile.
- Do not commit
Config/Local.xcconfig - Do not commit
.env, provisioning profiles, signing certificates, or local deploy scripts - Keep any device-specific or account-specific configuration in ignored local files only
Please read CONTRIBUTING.md before opening a pull request.
Please report vulnerabilities following SECURITY.md.
This project is licensed under the MIT License.
See THIRD_PARTY_NOTICES.md for dependency license notes.
Lincb522/NeteaseCloudMusicAPI-Swiftfor the NetEase Cloud Music Swift SDK used by this appkean/Nukefor image loading and caching


