Rigelian goes Mac
I just submitted v1.0 of Rigelian for Mac for App Store review. In the last couple of days I finished the main changes needed for this MVP.
The most important open topic was sharing a single Rigelian subscription across 2 platforms (iOS and Mac). With Xcode 11.4 this is finally made possible, unfortunately this version also broke things. Two items in particular caused extensive searches for a solution:
- Libraries included via Swift Package Manager and shared between the main application and a Today extension cause a compiler error about duplicate frameworks. This requires that those shared frameworks are created as dynamic instead of static, but for external packages it’s not possible to specify this. Ideally Xcode / SPM would detect this, but unfortunately no. Two solutions are offered, the first solution involved creating an in-between package which includes all the shared packages, and making that a shared framework in itself. The second solution is to add the compiler setting DISABLE_DIAMOND_PROBLEM_DIAGNOSTIC=YES. I opted for the easy way out provided by the 2nd one.
- The SwiftyStoreKit package is recently updated for Catalyst, but somehow the Rigelian subscription products where not showing up when running the app on a Mac. This was related to the fact that I used Xcode 11.3 to upgrade the project to Catalyst a while ago. By creating a new target for Catalyst in Xcode 11.4, the products appear correctly.
And then there were various other things to do:
- The package RxGesture would not compile for Catalyst, because it would include NSxxx classes only available in AppKit. I was able to solve this by excluding these classes through conditional compilation, and I was happy to see that my pull request to include this in the master branch was quickly accepted.
- Create a suitable menu with shortcut keys.
- Disable dragging of tracks in the playqueue and playlist as that consistently crashes.
- Disable the use of Google Analytics as this is not supported under Catalyst.
- Supported nested and inline menus in context menus.
- Migrate to dynamic type with larger fonts to prevent that things look too small on MacOS.
- Numerous smaller layout changes.
With all of that done there is now a MacOS version that provides 99% of the functionality available on iOS. While it doesn’t yet feel like a real Mac app, I feel it’s a good start, and I will gradually give it more of a Mac feel through things like a native toolbar etc.