Sparkle 2 Update / Mac Update Channels
Description
This PR merges nix-update and win-update, upgrades OBS to Sparkle 2.3.1, and adds support for update channels on macOS.
Closes #7869 if merged first.
ToDo:
- [x] Figure out why alignment of settings is off
- [x] Test locally
- [ ] Set up new Sparkle feed
- [ ] Get OBS EdDSA key
Motivation and Context
Want update channels on mac.
How Has This Been Tested?
Compiles and runs, channels work as expected on macOS (tested with local webserver and some appcasts generated using Sparkle's generate_appcast tool).
Types of changes
- New feature (non-breaking change which adds functionality)
Checklist:
- [x] My code has been run through clang-format.
- [x] I have read the contributing document.
- [x] My code is not on the master branch.
- [x] The code has been tested.
- [x] All commit messages are properly formatted and commits squashed where appropriate.
- [x] I have included updates to all appropriate documentation.
Marking as draft to prevent accidental merges
Rebased on #6907's latest changes.
Also have a macOS screenshot (I don't yet know why this is misaligned, it's fine on Windows...):
Still not sure why, but adding that fieldGrowthPolicy fixed it:

Rebased on master now that #6907 is merged. Also made sure that update check runs in background after switching channels.
I've been able to confirm that updating from one build to another via Sparkle 2 works. Downloading the following build should update to the next one: https://github.com/obsproject/obs-studio/actions/runs/3521880459
Reminder to self, if/when #7855 is merged update the ifdef to include macOS.
Sparkle 2.3.1 has been released since this PR was made: https://github.com/sparkle-project/Sparkle/releases/tag/2.3.1
The main difference is that generate_appcast now no longer supports adding DSA signatures at all. This shouldn't be an issue for us as the migration allows changing key types as long as the developer signature is the same, but I would like to see #7869 perhaps being shipped with 29.0.x just to be on the safe side before updating to Sparkle 2.
Updated to Sparkle 2.3.1 now. I think all that's left is getting the EdDSA public key from @jp9000, though arguably we could merge it before we have that and then add it later.
The Sparkle 2 public EdDSA key has now been added. This PR is therefore "finished" any may be reviewed/merged at your earliest convenience.
Fixed build failure due to ARC (Automatic Reference Counting) not being enabled for the Sparkle component. Also updated to Sparkle 2.3.2 which contains some minor bug fixes.
During my testing it occurred to me that you're not catching the edge case of someone manually enabling Sparkle, but not provide the public key and new appcast URL, so you end up with the source files added but cannot successfully compile.
During my testing it occurred to me that you're not catching the edge case of someone manually enabling Sparkle, but not provide the public key and new appcast URL, so you end up with the source files added but cannot successfully compile.
Should that be a CMake Error or should the ENABLE_SPARKLE_UPDATER option be retired in favour of automatically building it when appcast/key are set?
During my testing it occurred to me that you're not catching the edge case of someone manually enabling Sparkle, but not provide the public key and new appcast URL, so you end up with the source files added but cannot successfully compile.
Should that be a CMake Error or should the
ENABLE_SPARKLE_UPDATERoption be retired in favour of automatically building it when appcast/key are set?
I'm fine with enabling it only when the values are set as cache variables (similar to our oauth modules).
I'm fine with enabling it only when the values are set as cache variables (similar to our oauth modules).
Done.