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.

Rigelian for Mac