an open source Navidrome client written in Swift — https://dub.sh/getflo
1<div align="center">
2 <img src="./meta/guthib.jpeg" alt="flo" width="100%">
3 <br><br>
4 <p>Meet flo, an open source Navidrome client written in Swift.</p>
5</div>
6
7# flo
8
9As mentioned many times, flo is an open source Navidrome client written in Swift. It has modern yet familiar user interfaces
10built on top of Apple's latest UI framework: SwiftUI. While Navidrome supports Subsonic APIs, flo was purposely designed for Navidrome servers.
11
12However, flo is still under heavy development. Bugs and regular updates are expected to improve flo over time. It's worth noting that flo at
13this stage is unlikely to harm your iPhone or your beloved Navidrome server.
14
15## Features
16
17Everything you can expect from a music player: it plays music. However, here are some features you may enjoy:
18
19- Online streaming (save your storage)
20- Offline streaming (save your bandwidth)
21- Play by album (shuffle for surprises)
22- Background playback (just don't close the app)
23- Control playback via the "command center" (something in your "notification")
24
25flo may have opt-in "social" features in the future to make the listening experience more fun and extroverted. But for now, flo is intended to become one of the best
26Navidrome clients in the Apple ecosystem!
27
28To learn more about flo, visit flo's [landing page.](https://client.flooo.club)
29
30## Development
31
32For now just clone it and figure it out :)
33
34Jokes aside, make sure you have Xcode installed. The latest stable version is recommended, and as of this writing, Swift 5 is used. Another step, such as setting up a "provisioning profile," may be required to run this app in a development environment.
35
36This project uses integrated SwiftPM (Swift Package Manager) to manage app dependencies. So far, only four package are being used:
37
38- Alamofire — everyone's favorite http library
39- KeychainAccess — a simple wrapper for Keychain access
40- Nuke — image loading system
41- Pulse — network logger for Apple platforms
42
43The minimum number of dependencies is intended to make the project easier to maintain.
44
45If you're part of the Kepelet org, make sure you have [fastlane](https://fastlane.tools) installed. Then, you can run `fastlane match development` and you're ready to go without having to mess with the provisioning profile too much!
46
47Practically, this project uses the Gitflow workflow, where:
48
49- `main` is the "App Store" version
50- `develop` is the "TestFlight" public version
51- `release/xxx` is the "TestFlight" internal version
52- `features/yyy` or `bugfix/zzz` is the "staging" area of the current release (feature/bugfix branches)
53
54Realistically, sometimes feature branches are unnecessary, as the project doesn't run tests (yet) and the developer tests the app anyway.
55
56So, the flow is:
57
58- Draft a release branch
59- Every week or so, if no critical errors are present, merge to develop and submit to the TestFlight external group
60- Wait for approval
61- Test the beta app
62- Every week or so, if no critical errors are present, submit for review to the App Store
63- Wait for approval
64- When it's live, merge to main
65- Repeat
66
67Coming from Web Development, where no one technically controls the release process, I hate this cycle — I used to ship as soon as it was ready and figure it out later. This time, I have to draft a release every 1-2 weeks. It might get approved, or it might be rejected. But at least I tried!
68
69## Localization
70
71One of the promises of flo is customization — to make flo look the way you want. More importantly, it aims to make flo easier to use, and one of the efforts is localization: to make flo speak the language you know best.
72
73Unfortunately, we don't use third-party apps/services to manage localizations in flo, which means Xcode is required. While the process itself is [relatively easy](https://developer.apple.com/documentation/xcode/localizing-and-varying-text-with-a-string-catalog), but, still, the existence of Xcode become a significant barrier to contributing more languages.
74
75## Support
76
77Bug reports, typos, errors and feedback are welcome! Please use GitHub Issues for reports and GitHub Discussions for... discussion. For anything private,
78you can reach me via email at oss [at] rizaldy.club. I don't check email often but I have push notifications turned on!
79
80## License
81
82MIT.