Contenuto generato con l’IA

011: .NET Mac Catalyst External Deployment Gauntlet

20 mar 2026 · 20 min. 21 sec.
011: .NET Mac Catalyst External Deployment Gauntlet
Descrizione

Another NotebookLM job. Bit of a rush, only 73 sources. Had a request to get a WPF tool working on a Mac. Not important, but a chance to grow my...

mostra di più
Another NotebookLM job. Bit of a rush, only 73 sources.
Had a request to get a WPF tool working on a Mac. Not important, but a chance to grow my skillz. So Here's the second of two covering it.

Notebook LM Prompt:

```
This is Episode 11 of News Re-Download, a podcast talking about software engineering. We're going over how to get dot net app running on Mac using **Mac Catalyst**. Because we are distributing outside the Mac App Store, you must navigate Apple's strict security model. 
Here is the concise implementation guide:
### 1. Prerequisites
*   **Hardware:** You cannot build a Mac deployment package from a Windows machine. You must use a physical Mac with Xcode installed.
*   **Apple Developer Account:** You need a paid account to generate the certificates required to bypass macOS Gatekeeper.
### 2. Certificates & Provisioning
*   **Generate Certificates:** Use Keychain Access on the Mac to create a Certificate Signing Request (CSR). In your Apple Developer portal, generate a **Developer ID Application** certificate (to sign the app) and a **Developer ID Installer** certificate (to sign the `.pkg`). Install both into your Mac's Keychain.
*   **Provisioning Profile:** Create an App ID matching your app's Bundle Identifier, then generate a Distribution Provisioning Profile specifically for Mac Catalyst. Download this profile via Xcode.
### 3. Application Configuration
*   **Native Mac Look:** By default, Mac Catalyst apps scale like iPad apps. Update your `Info.plist` and set the `UIDeviceFamily` key to `6` (Mac idiom) instead of `2` (iPad idiom) for a traditional desktop feel.
*   **Entitlements:** Create an `Entitlements.plist` in `Platforms/MacCatalyst/` to enable App Sandbox (`com.apple.security.app-sandbox`) and Network Client access (`com.apple.security.network.client`) so your app can securely reach the Jira REST API.
*   **Fix Build Errors:** To avoid a known `_CodesignVerify` build error when publishing outside the App Store, you must add an MSBuild `` to your `.csproj` to explicitly disable code signature verification.
### 4. Build and Publish
On the Mac, open a terminal in your project directory and use the .NET CLI to compile and sign the package:
```bash
dotnet publish -f net8.0-maccatalyst -c Release -p:CreatePackage=true -p:EnableCodeSigning=true -p:EnablePackageSigning=true -p:CodesignKey="Developer ID Application: Your Name" -p:PackageSigningKey="Developer ID Installer: Your Name"
```
This generates a signed `.pkg` installer file in your output directory.
### 5. Notarize and Staple (Bypassing Gatekeeper)
*   **Notarize:** Upload the signed `.pkg` to Apple's servers using the command line `notarytool`. If you skip this step, macOS Gatekeeper will block the installation.
*   **Staple:** Once Apple approves the app, run `xcrun stapler staple your_app.pkg`. This staples the approval ticket directly to the installer, allowing your producer to install it safely even if offline.
### 6. Auto-Updates (Sparkle)
For auto-updates on macOS, the Windows AppInstaller won't work. Instead, integrate the **Sparkle** framework.
*   Add Sparkle to your project.
*   Host an "Appcast" RSS/XML feed on your server to track new versions.
*   Sign your updates using EdDSA (ed25519) signatures so Sparkle can securely download and replace the app bundle in the background.

```

This episode includes AI-generated content.
mostra meno
Informazioni
Autore News ReDownload
Organizzazione Jarryd
Sito -
Tag

Sembra che non tu non abbia alcun episodio attivo

Sfoglia il catalogo di Spreaker per scoprire nuovi contenuti

Corrente

Copertina del podcast

Sembra che non ci sia nessun episodio nella tua coda

Sfoglia il catalogo di Spreaker per scoprire nuovi contenuti

Successivo

Copertina dell'episodio Copertina dell'episodio

Che silenzio che c’è...

È tempo di scoprire nuovi episodi!

Scopri
La tua Libreria
Cerca