Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1033,13 +1033,16 @@ jobs:
desc "Desktop app for managing .NET MAUI developer tools"
homepage "https://github.com/Redth/MAUI.Sherpa"

depends_on macos: ">= :ventura"
livecheck do
url :url
strategy :github_latest
end

depends_on macos: :sequoia

app "MAUI Sherpa.app"

zap trash: [
"~/.maui-sherpa",
]
zap trash: "~/.maui-sherpa"
end
CASK

Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,11 @@ Download the latest release from the [Releases](https://github.com/Redth/MAUI.Sh

#### macOS (Homebrew)
```bash
brew install --cask maui-sherpa
```

If the cask hasn't propagated to your Homebrew yet, or to track pre-release builds, use the tap:
```bash
brew install --cask redth/tap/maui-sherpa
```

Expand Down
66 changes: 66 additions & 0 deletions packaging/homebrew-cask/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Submitting MAUI Sherpa to the official Homebrew Cask

This directory holds the reference cask used to publish **MAUI Sherpa** to the
official [`Homebrew/homebrew-cask`](https://github.com/Homebrew/homebrew-cask)
repository, so users can install with:

```bash
brew install --cask maui-sherpa
```

The [`Redth/homebrew-tap`](https://github.com/Redth/homebrew-tap) tap is kept as
a fallback (and is the only channel that carries pre-release builds). It is
auto-updated on every stable release by the `update-homebrew` job in
`.github/workflows/build.yml`.

## Why this project qualifies

`brew audit --new --cask` enforces a notability bar and that the app passes
Gatekeeper. MAUI Sherpa meets both:

- **Notable**: well above the ~75-star / 30-fork / 30-watcher threshold.
- **Signed + notarized + stapled**: the macOS app is hardened-runtime signed,
notarized with `notarytool`, and stapled by the `notarize-macos` job.
- **Minimum macOS**: the app's supported minimum is macOS **Sequoia (15)** —
set via `SupportedOSPlatformVersion` in `MauiSherpa.MacOS.csproj` (the
`net10.0-macos` head) — so the cask declares `depends_on macos: :sequoia`.
Keep this in sync if the app's deployment target changes.

## One-time submission steps

1. Fork `Homebrew/homebrew-cask` (or let `brew bump-cask-pr` do it for you).
2. Make sure `maui-sherpa.rb` in this folder matches the latest stable release
(version + sha256). The sha256 is for `MAUI-Sherpa.macos.zip`:

```bash
VERSION=0.11.2
curl -fSL -o /tmp/MAUI-Sherpa.macos.zip \
"https://github.com/Redth/MAUI.Sherpa/releases/download/v${VERSION}/MAUI-Sherpa.macos.zip"
shasum -a 256 /tmp/MAUI-Sherpa.macos.zip
```

3. Validate locally before opening the PR:

```bash
brew style packaging/homebrew-cask/maui-sherpa.rb
# Drop the file into a scratch tap to run the strict "new cask" audit:
brew tap-new redth/casktest --no-git
mkdir -p "$(brew --repository redth/casktest)/Casks/m"
cp packaging/homebrew-cask/maui-sherpa.rb \
"$(brew --repository redth/casktest)/Casks/m/maui-sherpa.rb"
brew audit --new --cask --online redth/casktest/maui-sherpa
brew untap redth/casktest # cleanup
```

4. Copy the cask into your homebrew-cask fork at `Casks/m/maui-sherpa.rb`,
commit on a branch named `maui-sherpa`, and open a PR titled
`Add maui-sherpa <version>`.

## After it's accepted

- Future version bumps are handled automatically by Homebrew's BrewTestBot
(driven by the `livecheck` stanza) — no manual PRs needed.
- Keep the `update-homebrew` job so the `Redth/homebrew-tap` fallback and
pre-release channel stay current.
- The README points users at `brew install --cask maui-sherpa` with the tap as
a documented fallback.
20 changes: 20 additions & 0 deletions packaging/homebrew-cask/maui-sherpa.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
cask "maui-sherpa" do
version "0.11.2"
sha256 "a49dfe86206d629f7a98bfa8b28e48d88fbf163419bab3b12cd6680a93cac8b4"

url "https://github.com/Redth/MAUI.Sherpa/releases/download/v#{version}/MAUI-Sherpa.macos.zip"
name "MAUI Sherpa"
desc "Desktop app for managing .NET MAUI developer tools"
homepage "https://github.com/Redth/MAUI.Sherpa"

livecheck do
url :url
strategy :github_latest
end

depends_on macos: :sequoia

app "MAUI Sherpa.app"

zap trash: "~/.maui-sherpa"
end
2 changes: 1 addition & 1 deletion src/MauiSherpa.MacOS/MauiSherpa.MacOS.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<EnableDefaultCssItems>false</EnableDefaultCssItems>
<SupportedOSPlatformVersion>14.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion>15.0</SupportedOSPlatformVersion>
<DefineConstants>$(DefineConstants);MACOSAPP</DefineConstants>

<ApplicationTitle>MAUI Sherpa</ApplicationTitle>
Expand Down
38 changes: 1 addition & 37 deletions src/MauiSherpa/MauiSherpa.csproj
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Razor">

<PropertyGroup>
<TargetFrameworks>net10.0-maccatalyst</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net10.0-windows10.0.19041.0</TargetFrameworks>
<TargetFramework>net10.0-windows10.0.19041.0</TargetFramework>

<OutputType>Exe</OutputType>
<RootNamespace>MauiSherpa</RootNamespace>
Expand All @@ -19,21 +18,10 @@
<ApplicationDisplayVersion>$(AppVersion)</ApplicationDisplayVersion>
<ApplicationVersion>1</ApplicationVersion>

<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">15.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion>
<TargetPlatformMinVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</TargetPlatformMinVersion>
</PropertyGroup>

<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">
<EnableHardenedRuntime>true</EnableHardenedRuntime>
<CodesignEntitlements>Platforms/MacCatalyst/Entitlements.plist</CodesignEntitlements>
<UseInterpreter>true</UseInterpreter>
</PropertyGroup>

<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst' and '$(Configuration)' == 'Debug'">
<CodeSignEntitlements>Platforms/MacCatalyst/Entitlements.Debug.plist</CodeSignEntitlements>
</PropertyGroup>

<!-- Workaround for WindowsAppSDK Issue #3337 -->
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(RuntimeIdentifierOverride)' != ''">
<RuntimeIdentifier>$(RuntimeIdentifierOverride)</RuntimeIdentifier>
Expand Down Expand Up @@ -74,30 +62,6 @@
<MauiAsset Include="Resources/Raw/**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

<!-- Bundle Copilot CLI binary into the Mac Catalyst app.
The GitHub.Copilot.SDK targets download the binary under osx-arm64/osx-x64,
but at runtime on Mac Catalyst, RuntimeInformation.RuntimeIdentifier returns
maccatalyst-arm64/maccatalyst-x64. We copy the downloaded binary directly
into the app bundle at the path the SDK expects at runtime. -->
<Target Name="_BundleCopilotCliForMacCatalyst" AfterTargets="Build" Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">
<PropertyGroup>
<_CopilotMacCatRid Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture)' == 'Arm64'">maccatalyst-arm64</_CopilotMacCatRid>
<_CopilotMacCatRid Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture)' == 'X64'">maccatalyst-x64</_CopilotMacCatRid>
<_CopilotOsxRid Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture)' == 'Arm64'">osx-arm64</_CopilotOsxRid>
<_CopilotOsxRid Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture)' == 'X64'">osx-x64</_CopilotOsxRid>
<_CopilotSourceBinary>$(OutDir)runtimes/$(_CopilotOsxRid)/native/copilot</_CopilotSourceBinary>
<_CopilotAppBundle>$(OutDir)$(ApplicationTitle).app/Contents/MonoBundle/runtimes/$(_CopilotMacCatRid)/native</_CopilotAppBundle>
<!-- Also copy to osx-{arch} since RuntimeIdentifier reports osx-arm64 at runtime on Mac Catalyst -->
<_CopilotAppBundleOsx>$(OutDir)$(ApplicationTitle).app/Contents/MonoBundle/runtimes/$(_CopilotOsxRid)/native</_CopilotAppBundleOsx>
</PropertyGroup>
<MakeDir Directories="$(_CopilotAppBundle)" Condition="Exists('$(_CopilotSourceBinary)')" />
<Copy SourceFiles="$(_CopilotSourceBinary)" DestinationFolder="$(_CopilotAppBundle)" SkipUnchangedFiles="true" Condition="Exists('$(_CopilotSourceBinary)')" />
<Exec Command="chmod +x &quot;$(_CopilotAppBundle)/copilot&quot;" Condition="Exists('$(_CopilotSourceBinary)')" />
<MakeDir Directories="$(_CopilotAppBundleOsx)" Condition="Exists('$(_CopilotSourceBinary)')" />
<Copy SourceFiles="$(_CopilotSourceBinary)" DestinationFolder="$(_CopilotAppBundleOsx)" SkipUnchangedFiles="true" Condition="Exists('$(_CopilotSourceBinary)')" />
<Exec Command="chmod +x &quot;$(_CopilotAppBundleOsx)/copilot&quot;" Condition="Exists('$(_CopilotSourceBinary)')" />
</Target>

<Import Project="..\..\build\BundleUnxip.targets" />

</Project>
9 changes: 0 additions & 9 deletions src/MauiSherpa/Platforms/MacCatalyst/AppDelegate.cs

This file was deleted.

14 changes: 0 additions & 14 deletions src/MauiSherpa/Platforms/MacCatalyst/Entitlements.Debug.plist

This file was deleted.

10 changes: 0 additions & 10 deletions src/MauiSherpa/Platforms/MacCatalyst/Entitlements.plist

This file was deleted.

35 changes: 0 additions & 35 deletions src/MauiSherpa/Platforms/MacCatalyst/Info.plist

This file was deleted.

12 changes: 0 additions & 12 deletions src/MauiSherpa/Platforms/MacCatalyst/Program.cs

This file was deleted.

This file was deleted.

Loading