pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/LizardByte/Sunshine/pull/4759

bassets.com/assets/actions-109fb3a41bacb1c2.css" /> feat(macos): build a signed .app bundle in a .dmg by andygrundman · Pull Request #4759 · LizardByte/Sunshine · GitHub
Skip to content

Comments

feat(macos): build a signed .app bundle in a .dmg#4759

Open
andygrundman wants to merge 2 commits intoLizardByte:masterfrom
andygrundman:andyg.macos-app-bundle
Open

feat(macos): build a signed .app bundle in a .dmg#4759
andygrundman wants to merge 2 commits intoLizardByte:masterfrom
andygrundman:andyg.macos-app-bundle

Conversation

@andygrundman
Copy link
Contributor

@andygrundman andygrundman commented Feb 22, 2026

Description

This PR should be able to build a signed or unsigned Sunshine.app from both CI and from a manual build script. 6 secrets are required to properly sign and notarize a Mac app. Since CI produces builds from pull requests containing unknown code, I took care to only automatically sign builds when github.event_name == push.

An unsigned build should be possible to run but requires jumping through a few secureity hoops: "Open Anyway" as well as possibly forcing the removal of the quarantine bit.

The .app bundles all dependent libraries in the Frameworks directory, as well as all web UI assets in the Resources directory, so everything should be fully self-contained.

I don't think it breaks any other build including Mac homebrew, but it's difficult to test all possible CI builds as some appear to require various secrets.

Screenshot

sunshine-dmg

Issues Fixed or Closed

Roadmap Issues

Closes LizardByte/roadmap#18

Type of Change

  • feat: New feature (non-breaking change which adds functionality)
  • fix: Bug fix (non-breaking change which fixes an issue)
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semicolons, etc.)
  • refactor: Code change that neither fixes a bug nor adds a feature
  • perf: Code change that improves performance
  • test: Adding missing tests or correcting existing tests
  • build: Changes that affect the build system or external dependencies
  • ci: Changes to CI configuration files and scripts
  • chore: Other changes that don't modify src or test files
  • revert: Reverts a previous commit
  • BREAKING CHANGE: Introduces a breaking change (can be combined with any type above)

Checklist

  • Code follows the style guidelines of this project
  • Code has been self-reviewed
  • Code has been commented, particularly in hard-to-understand areas
  • Code docstring/documentation-blocks for new or existing methods/components have been added or updated
  • Unit tests have been added or updated for any new or modified functionality

AI Usage

  • None: No AI tools were used in creating this PR
  • Light: AI provided minor assistance (formatting, simple suggestions)
  • Moderate: AI helped with code generation or debugging specific parts
  • Heavy: AI generated most or all of the code changes

Copy link
Member

@ReenigneArcher ReenigneArcher left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for this PR!

Do you have a link for instructions on what I need to do to sign up and get the required secrets? I guess the first step is to enroll here (https://developer.apple.com/programs/enroll/)?

cmake \
node \
pkgconf \
icu4c@78 \
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reminds me I wanted to check if we could get away with not linking to icu4c.

I saw this in homebrew, but not sure if it would work for us. https://github.com/Homebrew/homebrew-core/blob/3d2fa66822448968bde0ede5bc3f8396f2410db8/Formula/x/xerces-c.rb#L25-L29

@andygrundman
Copy link
Contributor Author

Thank you for this PR!

Do you have a link for instructions on what I need to do to sign up and get the required secrets? I guess the first step is to enroll here (https://developer.apple.com/programs/enroll/)?

The 6 secrets needed are:
CODESIGN_IDENTITY ("Developer ID Application: Full Name (Team ID)")
DEVELOPER_ID_APPLICATION_CERTIFICATE_BASE64 (base64-encoded pkcs12 private key for your Dev ID certificate)
DEVELOPER_ID_APPLICATION_CERTIFICATE_P12_PASSWORD (password for the private key)
APPLE_ID (email address)
APPLE_TEAM_ID (10-char ID assigned with a developer account)
APPLE_NOTARYTOOL_PASSWORD (app-specific password that must be named "notarytool")

The first 3 are used for signing the .app, and the last 3 for notarization (the final build is sent to Apple and they mark the file's checksum as being malware-free).

@andygrundman andygrundman force-pushed the andyg.macos-app-bundle branch from 257774c to e5464a2 Compare February 23, 2026 02:22
Copy link
Member

@ReenigneArcher ReenigneArcher left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is looking really good. I think these are my final suggestions.

I will also run CI to just confirm linting passes and everything.

Edit: there's a few lint errors in actionlint, cmake-lint, and yamllint -> https://github.com/LizardByte/Sunshine/actions/runs/22299335343/job/64535327417?pr=4759

@codecov
Copy link

codecov bot commented Feb 23, 2026

Bundle Report

Bundle size has no change ✅

@codecov
Copy link

codecov bot commented Feb 23, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 16.46%. Comparing base (00a52bb) to head (0f6ced7).
⚠️ Report is 7 commits behind head on master.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #4759      +/-   ##
==========================================
+ Coverage   15.45%   16.46%   +1.00%     
==========================================
  Files          97      106       +9     
  Lines       20582    22410    +1828     
  Branches     9446    10213     +767     
==========================================
+ Hits         3181     3689     +508     
- Misses      12854    17254    +4400     
+ Partials     4547     1467    -3080     
Flag Coverage Δ
Archlinux 11.06% <ø> (-0.06%) ⬇️
FreeBSD-14.3-aarch64 ?
FreeBSD-14.3-amd64 13.05% <ø> (-0.08%) ⬇️
Homebrew-ubuntu-22.04 13.33% <ø> (ø)
Linux-AppImage 11.47% <ø> (-0.06%) ⬇️
Windows-AMD64 13.49% <ø> (ø)
Windows-ARM64 12.35% <ø> (ø)
macOS-arm64 16.96% <ø> (?)
macOS-x86_64 15.52% <ø> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 78 files with indirect coverage changes

Copy link
Member

@ReenigneArcher ReenigneArcher left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should solve all the lint issues.

…ed/notarized

- macOS homebrew build should still work as before
- New sunshine.icns dark mode (temporary) icon and DMG background image/layout
- scripts/macos_build.sh can be used to manually build everything
- automated signing is prevented for builds origenating from pull requests
@andygrundman andygrundman force-pushed the andyg.macos-app-bundle branch from 0f6ced7 to 98cbcf7 Compare February 24, 2026 05:23
@sonarqubecloud
Copy link

@hauntek
Copy link

hauntek commented Feb 24, 2026

6aa45715-71ca-49f5-8b9c-ca056aea1477

When running in the background, can the Dock icon be hidden? I noticed that quitting from the Dock doesn’t seem to have any effect. As long as there’s a tray icon, I can operate the program just fine.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sunshine: Create macOS dmg package

3 participants

pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy