Freigeben über


Veröffentlichen einer Mac Catalyst-App für den Vertrieb außerhalb des Mac App Store

Eine Alternative zum Vertrieb von Mac Catalyst-Apps über den Mac App Store besteht darin, sie außerhalb des Mac App Store zu vertreiben. Bei diesem Ansatz kann Ihre Mac Catalyst-App an einem Ort Ihrer Wahl zum Herunterladen gehostet werden. Mitglieder des Apple Developer Program und des Apple Developer Enterprise Program können diesen Vertriebsansatz nutzen.

Die Verteilung einer Mac Catalyst-App erfordert, dass die App mit einem Bereitstellungsprofil bereitgestellt wird. Bereitstellungsprofile sind Dateien, die Informationen zur Codesignierung sowie die Identität der App und den beabsichtigten Verteilungsmechanismus enthalten.

Um eine .NET Multiplattform App UI (.NET MAUI) Mac Catalyst-App außerhalb des Mac App Stores zu verteilen, müssen Sie ein Bereitstellungsprofil für die Verteilung erstellen, das speziell für diese App gilt. Mit diesem Profil kann die App für die Veröffentlichung digital signiert werden, sodass sie auf Macs installiert werden kann. Ein Distributionsbereitstellungsprofil enthält eine Apps-ID und ein Entwickler-ID-Appszertifikat. Sie müssen ein Entwickler-ID-Appszertifikat erstellen, um sich oder Ihre Organisation zu identifizieren, falls Sie noch keines haben. Darüber hinaus müssen Sie ein Entwickler-ID-Installationszertifikat erstellen, um das Installationspaket Ihrer App zu signieren.

Das Verfahren zur Bereitstellung einer .NET MAUI Mac Catalyst-App für den Vertrieb außerhalb des Mac App Store ist wie folgt:

  1. Erstellen Sie zwei Signaturanforderungen für Zertifikate. Weitere Informationen finden Sie unter Erstellen einer Zertifikatsignierungsanforderung.
  2. Erstellen Sie ein Entwickler-ID-Appszertifikat. Weitere Informationen finden Sie unter Erstellen eines Entwickler-ID-Appszertifikats.
  3. Erstellen Sie ein Entwickler-ID-Installer-Zertifikat. Weitere Informationen finden Sie unter Erstellen eines Entwickler-ID-Installationszertifikats.
  4. Erstellen einer App-ID Weitere Informationen finden Sie unter Erstellen einer App ID.
  5. Erstellen eines Bereitstellungsprofils Zusätzliche Informationen finden Sie unter Ein Bereitstellungsprofil erstellen.
  6. Laden Sie Ihr Bereitstellungsprofil herunter. Weitere Informationen finden Sie unter Herunterladen Ihres Bereitstellungsprofils in Xcode.

Wichtig

Dieser Artikel zeigt die Bereitstellung für den Vertrieb außerhalb des Mac App Store mit einem Apple-Entwicklerkonto, der Teil des Apple Developer Program ist. Sie kann auch für einen Apple-Entwicklerkonto verwendet werden, der Teil des Apple Developer Enterprise Program ist, da die erforderlichen Schritte weitgehend identisch sind.

Sobald die Bereitstellung abgeschlossen ist, sollten Sie Ihre App für die Veröffentlichung vorbereiten, sie veröffentlichen und mit dem folgenden Verfahren notariell beglaubigen:

  1. Optional können Sie Ihrer App Berechtigungen hinzufügen. Weitere Informationen finden Sie unter Berechtigungen hinzufügen.
  2. Aktualisieren Sie die Datei Info.plist der App. Weitere Informationen finden Sie unter Info.plist aktualisieren.
  3. Deaktivieren Sie die Code-Signaturprüfung für Ihre App. Weitere Informationen finden Sie unter Deaktivieren der Codesignaturprüfung.
  4. Veröffentlichen Sie Ihre App über die Befehlszeile. Weitere Informationen finden Sie unter Veröffentlichen über die Befehlszeile.
  5. Notarisieren Sie Ihre App. Weitere Informationen finden Sie unter Beglaubigen Ihrer App.

Erstellen einer Zertifikatsignieranforderung

Bevor Sie ein Verteilungszertifikat erstellen, müssen Sie zunächst eine Zertifikatsignierungsanforderung (CSR) in Keychain Access auf einem Mac erstellen:

  1. Starten Sie auf dem Mac Keychain Access.

  2. Wählen Sie in Keychain Access das Menüelement Keychain Access > Zertifikatsassistent > Zertifikat von einer Zertifizierungsstelle anfordern… aus.

  3. Geben Sie im Dialog Zertifikatsassistent eine E-Mail-Adresse in das Feld Benutzer-E-Mail-Adresse ein.

  4. Geben Sie im Dialog Zertifikatsassistent einen Namen für den Schlüssel in das Feld Gemeinsamer Name ein.

  5. Lassen Sie im Dialogfeld Zertifikatsassistent das Feld CA-E-Mail-Adresse leer.

  6. Wählen Sie im Dialogfeld Zertifikatsassistent das Optionsfeld Auf Festplatte gespeichert aus und wählen Sie Weiter aus:

    Dialogfeld „Zertifikatsassistent“.

  7. Speichern Sie die Zertifikatssignierungsanforderung an einem bekannten Ort.

  8. Wählen Sie im Dialog Zertifikatsassistent die Schaltfläche Erledigt aus.

  9. Schließen Sie den Schlüsselbundzugriff.

Wiederholen Sie diesen Vorgang, um eine zweite Zertifikatssignierungsanforderung zu erstellen. Die erste CSR wird zur Erstellung eines Entwickler-ID-Appszertifikats verwendet. Die zweite wird verwendet, um ein Entwickler-ID-Installationszertifikat zu erstellen.

Wichtig

Sie können nicht dieselbe Zertifikatssignierungsanforderung verwenden, um ein Entwickler-ID-Appszertifikat und ein Entwickler-ID-Installationszertifikat zu erstellen.

Erstellen Sie ein Entwickler-ID-Appszertifikat

Mit der CSR können Sie ein Entwickler-ID-Zertifikat erstellen, das Ihre Identität bestätigt. Das Entwickler-ID-Zertifikat muss unter Verwendung der Apple ID für Ihr Apple-Entwicklerkonto erstellt werden:

  1. Melden Sie sich in einem Webbrowser bei Ihrem Apple-Entwicklerkonto an.

  2. Wählen Sie in Ihrem Apple-Entwicklerkonto die Registerkarte Zertifikate, IDs und Profile aus.

  3. Wählen Sie auf der Seite Zertifikate, Identifikatoren & Profile die Schaltfläche + aus, um ein neues Zertifikat zu erstellen.

  4. Wählen Sie auf der Seite Erstellen eines neuen Zertifikats das Optionsfeld Entwickler-ID-App aus, bevor Sie die Schaltfläche Weiter auswählen:

    Erstellen Sie ein Entwickler-ID-Anwendungszertifikat.

  5. Aktivieren Sie auf der Seite Neues Zertifikat erstellen das Optionsfeld G2 Sub-CA und wählen Sie anschließend Datei auswählen aus:

    Laden Sie Ihre Zertifikatsignieranforderung für ein Entwickler-ID-Anwendungszertifikat hoch.

  6. Wählen Sie im Dialogfeld Dateien zum Hochladen auswählen die erste zuvor erstellte Zertifikatsanforderungsdatei (eine Datei mit einer .certSigningRequest Dateierweiterung) aus und wählen Sie anschließend Hochladen aus.

  7. Wählen Sie auf der Seite Erstellen eines neuen Zertifikats die Schaltfläche Weiter aus:

    Fahren Sie mit der Erstellung Ihres Verteilungszertifikats fort.

  8. Wählen Sie auf der Seite Ihr Zertifikat herunterladen die Schaltfläche Herunterladen aus:

    Laden Sie Ihr Entwickler-ID-Anwendungszertifikat herunter.

    Die Zertifikatsdatei (eine Datei mit einer .cer-Erweiterung) wird an Ihren ausgewählten Speicherort heruntergeladen.

  9. Doppelklicken Sie auf Ihrem Mac auf die heruntergeladene Zertifikatsdatei, um das Zertifikat in Ihrem Schlüsselbund zu installieren. Das Zertifikat wird in der Kategorie Meine Zertifikate in Keychain Access angezeigt und beginnt mit Developer ID Application:

    Schlüsselbundzugriff mit Entwickler-ID-Anwendungszertifikat.

    Hinweis

    Notieren Sie sich den vollständigen Zertifikatsnamen in Keychain Access. Sie wird beim Signaturen Ihrer App benötigt.

Erstellen Sie ein Entwickler-ID-Installationszertifikat

Mit der CSR können Sie ein Entwickler-ID-Installationszertifikat erstellen, das zum Signaturen des Installationspakets Ihrer App erforderlich ist. Das Installationszertifikat muss mit der Apple ID für Ihr Apple-Entwicklerkonto erstellt werden:

  1. Wählen Sie in Ihrem Apple-Entwicklerkonto die Registerkarte Zertifikate, IDs und Profile aus.

  2. Wählen Sie auf der Seite Zertifikate, Identifikatoren & Profile die Schaltfläche + aus, um ein neues Zertifikat zu erstellen.

  3. Wählen Sie auf der Seite Ein neues Zertifikat erstellen das Optionsfeld Entwickler-ID-Installer aus, bevor Sie die Schaltfläche Weiter auswählen:

    Erstellen Sie ein Entwickler-ID-Installationszertifikat.

  4. Aktivieren Sie auf der Seite Neues Zertifikat erstellen das Optionsfeld G2 Sub-CA und wählen Sie anschließend Datei auswählen aus:

    Laden Sie Ihre Zertifikatsignieranforderung für ein Entwickler-ID-Installationszertifikat hoch.

  5. Wählen Sie im Dialogfeld Dateien zum Hochladen auswählen die zweite Zertifikatsanforderungsdatei aus, die Sie zuvor erstellt haben (eine Datei mit einer .certSigningRequest-Dateierweiterung), und wählen Sie anschließend Hochladen aus.

  6. Wählen Sie auf der Seite Erstellen eines neuen Zertifikats die Schaltfläche Weiter aus:

    Fahren Sie mit der Erstellung Ihres Installationszertifikats fort.

  7. Wählen Sie auf der Seite Ihr Zertifikat herunterladen die Schaltfläche Herunterladen aus:

    Laden Sie Ihr Verteilungszertifikat herunter.

    Die Zertifikatsdatei (eine Datei mit einer .cer-Erweiterung) wird an Ihren ausgewählten Speicherort heruntergeladen.

  8. Doppelklicken Sie auf Ihrem Mac auf die heruntergeladene Zertifikatsdatei, um das Zertifikat in Ihrem Schlüsselbund zu installieren. Das Zertifikat erscheint in der Kategorie Meine Zertifikate in Keychain Access und beginnt mit Developer ID Installer:

    Schlüsselbundzugriff mit Installationszertifikat.

    Hinweis

    Notieren Sie sich den vollständigen Zertifikatsnamen in Keychain Access. Sie wird beim Signaturen Ihrer App benötigt.

Erstellen eines Verteilungsprofils

Mit einem Distributionsbereitstellungsprofil kann Ihre .NET MAUI Mac Catalyst-App für die Freigabe digital signiert werden, sodass sie auf einem anderen Mac installiert werden kann. Ein Bereitstellungsprofil für die Verteilung außerhalb des Mac App Store enthält eine App-ID und ein Entwickler-ID-Appszertifikat.

Erstellen einer App-ID

Eine App ID ist erforderlich, um die App zu identifizieren, die Sie verteilen. Eine App ID ähnelt einer Reverse-DNS-Zeichenfolge, die eine App eindeutig identifiziert und mit dem Bündelbezeichner für Ihre App identisch sein sollte. Sie können dieselbe App-ID verwenden, die Sie beim Bereitstellen Ihrer App auf einem Gerät zum Testen verwendet haben.

Es gibt zwei Arten von App ID:

  • Platzhalter Mit einer App-ID mit Platzhalter können Sie eine einzige App-ID verwenden, um mehrere Apps abzugleichen, und sie hat normalerweise die Form com.domainname.*. Eine Wildcard-App-ID kann für die Verteilung mehrerer Apps verwendet werden und sollte für Apps verwendet werden, die keine app-spezifischen Funktionen ermöglichen.
  • Explizit. Eine explizite App-ID ist eindeutig für eine einzelne App und hat normalerweise die Form com.domainname.myid. Eine explizite App-ID ermöglicht die Verteilung einer App mit einem passenden Bundle-Identifikator. Explizite App IDs werden in der Regel für Apps verwendet, die app-spezifische Funktionen wie Apple Pay oder Game Center aktivieren. Weitere Informationen finden Sie unter Funktionen.

Formular zum Erstellen einer neuen App ID

  1. Navigieren Sie in Ihrem Apple-Developerkonto zu Zertifikaten, IDs und Profilen.

  2. Wählen Sie auf der Seite Zertifikate, Bezeichner und Profile die Registerkarte Bezeichner aus.

  3. Wählen Sie auf der Seite Bezeichner die Schaltfläche + aus, um eine neue App-ID zu erstellen.

  4. Wählen Sie auf der Seite Einen neuen Bezeichner registrieren das Optionsfeld App IDs aus, bevor Sie die Schaltfläche Weiter auswählen:

    Erstellen einer App-ID

  5. Wählen Sie auf der Seite Einen neuen Bezeichner registrieren App aus, bevor Sie die Schaltfläche Weiter auswählen.

    Registrieren einer App-ID.

  6. Geben Sie auf der Seite Registrieren einer App-ID eine Beschreibung ein und wählen Sie entweder die Optionsschaltfläche Explizit oder Wildcard Bundle-ID aus. Geben Sie dann die Bundle-ID für Ihre App im umgekehrten DS-Format ein:

    Geben Sie den Bündelbezeichner für die App an.

    Wichtig

    Die eingegebene Bundle-ID muss mit dem Bundle-Bezeichner in der Datei Info.plist in Ihrem Appsprojekt übereinstimmen.

    Der Bundle-Bezeichner für eine .NET MAUI-App wird in der Projektdatei als die Eigenschaft Anwendungs-ID gespeichert. Klicken Sie in Visual Studio im Solution Explorer mit der rechten Maustaste auf Ihr .NET MAUI-App-Projekt und wählen Sie Eigenschaften aus. Navigieren Sie dann zur Registerkarte MAUI Shared > General. Das Feld Apps-ID listet den Bundle-Identifikator auf.

    Wenn der Wert des Feldes Apps-ID aktualisiert wird, wird der Wert des Bundle-Bezeichners in der Info.plist automatisch aktualisiert.

  7. Wählen Sie auf der Seite Eine App ID registrieren alle Funktionen aus, die die App verwendet. Alle Funktionen müssen sowohl auf dieser Seite als auch in der Datei Entitlements.plist in Ihrem Appsprojekt konfiguriert werden. Weitere Informationen finden Sie unter Fähigkeiten und Berechtigungen.

  8. Wählen Sie auf der Seite Registrieren einer App-ID die Schaltfläche Weiter aus.

  9. Auf der Seite Ihre App-ID bestätigen wählen Sie die Schaltfläche Registrieren aus.

Erstellen eines Bereitstellungsprofils

Nachdem die App-ID erstellt wurde, sollten Sie ein Verteilungsbereitstellungsprofil erstellen. Mit diesem Profil kann die App für die Veröffentlichung digital signiert werden, sodass sie auf Macs installiert werden kann.

So erstellen Sie ein Bereitstellungsprofil für den Vertrieb außerhalb des Mac App Store:

  1. Wählen Sie auf der Seite "Zertifikate, Bezeichner und Profile" Ihres Apple-Developerkontos die Registerkarte "Profile" aus.

  2. Auf der Registerkarte Profile klicken Sie auf die Schaltfläche +, um ein neues Profil zu erstellen.

  3. Wählen Sie auf der Seite Ein neues Bereitstellungsprofil erstellen das Optionsfeld Developer ID aus, bevor Sie auf die Schaltfläche Weiter klicken:

    Registrieren Sie eine Verteilung von Bereitstellungsprofilen außerhalb des App Stores.

  4. Wählen Sie auf der Seite Ein Bereitstellungprofil erstellen das Optionsfeld Mac Catalyst aus. Wählen Sie dann in der Dropdown-Liste App-ID die App-ID aus, die Sie zuvor erstellt haben, bevor Sie auf die Schaltfläche Weiter klicken:

    Wählen Sie Ihre App-ID aus.

  5. Wählen Sie auf der Seite Ein Bereitstellungsprofil erstellen das Optionsfeld aus, das Ihrem Verteilungszertifikat entspricht, bevor Sie auf die Schaltfläche Weiter klicken:

    Wählen Sie Ihr Verteilungszertifikat aus.

  6. Geben Sie auf der Seite Ein Bereitstellungsprofil erstellen einen Namen für das Provisioning-Profil ein, bevor Sie auf die Schaltfläche Erstellen klicken:

    Generieren Sie das Bereitstellungsprofil.

    Hinweis

    Notieren Sie sich den Namen des Bereitstellungsprofils, da es beim Signaturen Ihrer App erforderlich ist.

  7. Klicken Sie auf der Seite Erstellen eines Bereitstellungsprofils optional auf die Schaltfläche Herunterladen, um Ihr Bereitstellungsprofil herunterzuladen.

    Hinweis

    Es ist nicht erforderlich, Ihr Bereitstellungsprofil jetzt herunterzuladen. Stattdessen werden Sie dies in Xcode tun.

Laden Sie Ihr Bereitstellungsprofil in Xcode herunter

Nachdem Sie ein Bereitstellungsprofil in Ihrem Apple-Entwicklerkonto erstellt haben, kann Xcode es herunterladen, sodass es für das Signaturen Ihrer App verfügbar ist:

  1. Starten Sie auf Ihrem Mac Xcode.

  2. Wählen Sie in Xcode das Menüelement Xcode > Einstellungen … aus.

  3. Wählen Sie im Dialog Einstellungen die Registerkarte Konten aus.

  4. Klicken Sie auf der Registerkarte Konten auf die Schaltfläche +, um Ihren Apple-Entwicklerkonto zu Xcode hinzuzufügen:

    Xcode-Konten-Dialog in den Einstellungen.

  5. Wählen Sie im Popup-Fenster Kontotyp die Option Apple ID aus und klicken Sie anschließend auf die Schaltfläche Weiter:

    Xcode wählt den Kontotyp aus, den Sie hinzufügen möchten.

  6. Geben Sie im Anmeldefenster Ihre Apple ID ein und klicken Sie auf die Schaltfläche Weiter.

  7. Geben Sie im Anmeldefenster Ihr Apple ID-Kennwort ein und klicken Sie auf die Schaltfläche Weiter:

    Xcode Apple-Kontoanmeldung.

  8. Klicken Sie auf der Registerkarte Konten auf die Schaltfläche Zertifikate verwalten…, um sicherzustellen, dass Ihr Verteilungszertifikat heruntergeladen wurde.

  9. Klicken Sie auf der Registerkarte Konten auf die Schaltfläche Manuelle Profile herunterladen, um Ihre Provisionierungsprofile herunterzuladen:

    Details zum Xcode-Apple-Entwicklerprogrammkonto.

  10. Warten Sie, bis der Download abgeschlossen ist, und schließen Sie dann Xcode.

Hinzufügen von Berechtigungen

Die App Sandbox von Apple schränkt den Zugriff auf Systemressourcen und Benutzerdaten in Mac-Apps ein, um den Schaden einzudämmen, wenn eine App kompromittiert wird. Sie kann optional für Mac Catalyst-Apps aktiviert werden, die außerhalb des Mac App Store vertrieben werden.

Dies kann durch Hinzufügen einer Entitlements.plist-Datei zum Ordner Platforms/MacCatalyst Ihres .NET MAUI-App-Projekts erreicht werden:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
  </dict>
</plist>

Die App Sandbox-Berechtigung wird über den Schlüssel com.apple.security.app-sandbox vom Typ boolean definiert. Informationen zu App Sandbox finden Sie unter Schutz von Benutzerdaten mit App Sandbox auf developer.apple.com. Informationen über die App Sandbox-Berechtigung finden Sie unter App Sandbox-Berechtigung.

Wenn Ihre App ausgehende Netzwerkverbindungen öffnet, müssen Sie auch den Schlüssel com.apple.security.network.client vom Typ boolean zu Ihrer Datei Entitlements.plist hinzufügen:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.network.client</key>
    <true/>
  </dict>
</plist>

Informationen zur Berechtigung für ausgehende Netzwerkverbindungen finden Sie unter com.apple.security.network.client auf developer.apple.com.

Info.plist aktualisieren

Bevor Sie Ihre App veröffentlichen, sollten Sie die Datei Info.plist mit zusätzlichen Informationen aktualisieren.

Angeben des Benutzeroberflächen-Idioms

Eine Mac Catalyst-App kann in der iPad- oder Mac-Benutzeroberflächensprache ausgeführt werden:

  • Das iPad-Benutzeroberflächen-Idiom weist macOS an, die Benutzeroberfläche der App so zu skalieren, dass sie der Mac-Display-Umgebung entspricht und gleichzeitig das iPad-ähnliche Aussehen beibehält.
  • Die Mac-Benutzeroberfläche skaliert die Benutzeroberfläche der App nicht an die Mac-Anzeigeumgebung. Einige Steuerelemente ändern ihre Größe und ihr Aussehen, und die Interaktion mit ihnen fühlt sich genauso an wie die Interaktion mit AppKit-Steuerelementen.

Standardmäßig verwenden .NET MAUI Mac Catalyst-Apps das iPad-Benutzeroberflächen-Idiom. Wenn dies Ihr gewünschtes Verhalten ist, stellen Sie sicher, dass die Datei Info.plist der App nur 2 als Wert des Schlüssels UIDeviceFamily angibt:

<key>UIDeviceFamily</key>
<array>
  <integer>2</integer>
</array>

Um das Idiom der Mac-Benutzeroberfläche zu übernehmen, aktualisieren Sie die Datei Info.plist der App, um 6 als Wert des Schlüssels UIDeviceFamily anzugeben:

<key>UIDeviceFamily</key>
<array>
  <integer>6</integer>
</array>

Weitere Informationen über Mac Catalyst-Benutzeroberflächen-Idiome finden Sie unter Das UI-Idiom für Ihre Mac Catalyst-App bestimmen.

Festlegen der Standardsprache und Region für die App

Setzen Sie den Schlüssel CFBundleDevelopmentRegion in der Info.plist Ihrer App auf einen string, der die native Entwicklungsregion der Lokalisierung darstellt:

<key>CFBundleDevelopmentRegion</key>
<string>en</string>

Der Wert des Schlüssels sollte ein Sprachbezeichner und optional ein Regionalbezeichner sein. Weitere Informationen finden Sie unter CFBundleDevelopmentRegion auf developer.apple.com.

Setzen Sie den Schlüssel NSHumanReadableCopyright in der Info.plist Ihrer App auf einen string, der den für Menschen lesbaren Urheberrechtshinweis für Ihre App darstellt:

<key>NSHumanReadableCopyright</key>
<string>MyMauiApp © 2023</string>

Für weitere Informationen siehe NSHumanReadableCopyright auf developer.apple.com.

Deklarieren Sie die Verwendung von Verschlüsselung in Ihrer App

Wenn Ihre App verschlüsselt ist und Sie planen, sie außerhalb der USA oder Kanadas zu vertreiben, unterliegt sie den US-Ausfuhrbestimmungen. Sie können Informationen über die Verwendung der Verschlüsselung in der Info.plist-Datei Ihrer App bereitstellen.

Dies wird erreicht, indem der ITSAppUsesNonExemptEncryption-Schlüssel zur Info.plist Ihrer App mit einem boolean-Wert hinzugefügt wird, der angibt, ob Ihre App Verschlüsselung verwendet:

<key>ITSAppUsesNonExemptEncryption</key>
<false/>

Weitere Informationen finden Sie unter Einhaltung der Exportbestimmungen für Verschlüsselung auf developer.apple.com.

Überprüfung der Codesignatur deaktivieren

Wenn Sie derzeit versuchen, eine .NET MAUI Mac Catalyst-App für den Vertrieb außerhalb des Mac App Store zu veröffentlichen, erhalten Sie, sofern Sie die Bereitstellungsanforderungen erfüllt haben, eine Fehlermeldung über codesign exiting with code 3:

/usr/local/share/dotnet/packs/Microsoft.MacCatalyst.Sdk/16.2.1040/tools/msbuild/iOS/Xamarin.Shared.targets(1930,3): error MSB6006: "codesign" exited with code 3. [/Users/davidbritch/Projects/MyMauiApp/MyMauiApp/MyMauiApp.csproj::TargetFramework=net8.0-maccatalyst]

Während codesign Ihre App erfolgreich signiert, kann das Ziel _CodesignVerify die Codesignatur nicht verifizieren:

test-requirement: code failed to satisfy specified code requirement(s)

Aufgrund dieses Fehlers wird keine .pkg-Datei erzeugt.

Daher ist es derzeit notwendig, das folgende Build-Target an das Ende Ihrer Projektdatei anzufügen, um die Überprüfung der Codesignatur zu deaktivieren:

<Project Sdk="Microsoft.NET.Sdk">
  ...
  <Target Name="_SkipCodesignVerify" BeforeTargets="_CodesignVerify" AfterTargets="_CodesignAppBundle">  
    <PropertyGroup>    
      <_RequireCodeSigning>false</_RequireCodeSigning>  
    </PropertyGroup>
  </Target>
</Project>

Veröffentlichen über die Befehlszeile

Um Ihre Mac Catalyst-App über die Befehlszeile auf einem Mac zu veröffentlichen, öffnen Sie ein Terminal und navigieren Sie zu dem Ordner für Ihr .NET MAUI-Appsprojekt. Führen Sie den Befehl dotnet publish mit den folgenden Parametern aus:

Parameter Wert
-f oder --framework Das Zielframework ist net8.0-maccatalyst.
-c oder --configuration Die Buildkonfiguration ist Release.
-p:MtouchLink Der Verknüpfungsmodus für das Projekt, der None, SdkOnly oder Full sein kann.
-p:CreatePackage Legen Sie die Einstellung auf true fest, damit am Ende des Builds ein Paket (.pkg) für die App erstellt wird.
-p:EnableCodeSigning Auf true setzen, damit Codesignieren aktiviert wird.
-p:EnablePackageSigning Legen Sie diese Einstellung auf true fest, sodass das erstellte Paket signiert wird.
-p:CodesignKey Der Name des Codesignaturschlüssels. Legen Sie den Namen Ihres Verteilungszertifikats fest, wie in Keychain Access angezeigt.
-p:CodesignProvision Name des Bereitstellungsprofils, das beim Signaturen verwendet werden soll
-p:CodesignEntitlements Der Pfad zur Berechtigungsdatei, die die von der App benötigten Berechtigungen angibt. Auf Platforms\MacCatalyst\Entitlements.plist festlegen.
-p:PackageSigningKey Der Signaturschlüssel des Pakets, der beim Signaturen des Pakets verwendet werden soll. Stellen Sie den Namen Ihres Installationszertifikats ein, wie er in Keychain Access angezeigt wird.
-p:RuntimeIdentifier Der Laufzeitbezeichner (RID) für das Projekt. Release-Builds von .NET MAUI Mac Catalyst-Apps verwenden standardmäßig maccatalyst-x64 und maccatalyst-arm64 als Laufzeitbezeichner, um universelle Apps zu unterstützen. Geben Sie maccatalyst-x64 an, oder maccatalyst-arm64, um nur eine einzelne Architektur zu unterstützen.
-p:UseHardenedRuntime Setzen Sie den Wert auf true, um die gehärtete Laufzeit zu aktivieren, die für Mac Catalyst-Apps erforderlich ist, die außerhalb des Mac App Store vertrieben werden.

Warnung

Der Versuch, eine .NET MAUI-Lösung zu veröffentlichen, führt dazu, dass der Befehl dotnet publish versucht, jedes Projekt in der Lösung einzeln zu veröffentlichen, was zu Problemen führen kann, wenn Sie andere Projekttypen zu Ihrer Lösung hinzugefügt haben. Daher sollte der Befehl dotnet publish auf Ihr .NET MAUI-Appsprojekt beschränkt sein.

Zusätzliche Build-Parameter können auf der Kommandozeile angegeben werden, wenn sie nicht in einer <PropertyGroup> in Ihrer Projektdatei enthalten sind. In der folgenden Tabelle sind einige der üblichen Parameter aufgeführt:

Parameter Wert
-p:ApplicationTitle Der vom Benutzer sichtbare Name für die App.
-p:ApplicationId Der eindeutige Bezeichner für die App, wie etwa com.companyname.mymauiapp.
-p:ApplicationVersion Die Version des Builds, die eine Iteration der App identifiziert.
-p:ApplicationDisplayVersion Die Versionsnummer der API.
-p:RuntimeIdentifier Der Laufzeitbezeichner (RID) für das Projekt. Release-Builds von .NET MAUI Mac Catalyst-Apps verwenden standardmäßig maccatalyst-x64 und maccatalyst-arm64 als Laufzeitbezeichner, um universelle Apps zu unterstützen. Geben Sie maccatalyst-x64 an, oder maccatalyst-arm64, um nur eine einzelne Architektur zu unterstützen.

Eine vollständige Liste der Build-Eigenschaften finden Sie unter Projektdateieigenschaften.

Wichtig

Die Werte für alle diese Parameter müssen nicht in der Befehlszeile angegeben werden. Sie können auch in der Projektdatei angegeben werden. Wenn ein Parameter in der Befehlszeile und in der Projektdatei angegeben ist, hat der Befehlszeilenparameter Vorrang. Weitere Informationen über die Bereitstellung von Build-Eigenschaften in Ihrer Projektdatei finden Sie unter Build-Eigenschaften in Ihrer Projektdatei definieren.

Verwenden Sie beispielsweise den folgenden Befehl, um ein .pkg auf einem Mac zu erstellen und zu signieren, um es außerhalb des Mac App Store zu verteilen:

dotnet publish -f net8.0-maccatalyst -c Release -p:MtouchLink=SdkOnly -p:CreatePackage=true -p:EnableCodeSigning=true -p:EnablePackageSigning=true -p:CodesignKey="Developer ID Application: John Smith (AY2GDE9QM7)" -p:CodesignProvision="MyMauiApp (Non-App Store)" -p:CodesignEntitlements="Platforms\MacCatalyst\Entitlements.plist" -p:PackageSigningKey="Developer ID Installer: John Smith (AY2GDE9QM7)" -p:UseHardenedRuntime=true

Hinweis

In .NET 8 wird für den Befehl dotnet publish standardmäßig die Konfiguration Release verwendet. Daher kann die Buildkonfiguration von der Befehlszeile weggelassen werden.

Veröffentlichen erstellt, signiert und verpackt die App und kopiert die .pkg in den Ordner bin/Release/net8.0-maccatalyst/publish/. Wenn Sie die App nur mit einer einzigen Architektur veröffentlichen, wird sie im Ordner bin/Release/net8.0-maccatalyst/{architecture}/publish/ veröffentlicht.

Während des Signaturvorgangs müssen Sie möglicherweise Ihr Anmeldekennwort eingeben und die Ausführung von codesign und productbuild erlauben:

Erlauben Sie Codesign, Ihre App auf Ihrem Mac zu signieren.Erlauben Sie Productbuild, Ihre App auf Ihrem Mac zu signieren.

Weitere Informationen über den Befehl dotnet publish finden Sie unter dotnet publish.

Definieren von Buildeigenschaften in der Projektdatei

Eine Alternative zur Angabe von Build-Parametern auf der Befehlszeile besteht darin, sie in Ihrer Projektdatei in einem <PropertyGroup> anzugeben. In der folgenden Tabelle sind einige der üblichen Build-Eigenschaften aufgeführt:

Eigenschaft Wert
<ApplicationTitle> Der vom Benutzer sichtbare Name für die App.
<ApplicationId> Der eindeutige Bezeichner für die App, wie etwa com.companyname.mymauiapp.
<ApplicationVersion> Die Version des Builds, die eine Iteration der App identifiziert.
<ApplicationDisplayVersion> Die Versionsnummer der API.
<CodesignKey> Der Name des Codesignaturschlüssels. Legen Sie den Namen Ihres Verteilungszertifikats fest, wie in Keychain Access angezeigt.
<CodesignEntitlements> Der Pfad zur Berechtigungsdatei, die die von der App benötigten Berechtigungen angibt. Auf Platforms\MacCatalyst\Entitlements.plist festlegen.
<CodesignProvision> Name des Bereitstellungsprofils, das beim Signaturen verwendet werden soll
<CreatePackage> Legen Sie die Einstellung auf true fest, damit am Ende des Builds ein Paket (.pkg) für die App erstellt wird.
<EnableCodeSigning> Auf true setzen, damit Codesignieren aktiviert wird.
<EnablePackageSigning> Legen Sie diese Einstellung auf true fest, sodass das erstellte Paket signiert wird.
<MtouchLink> Der Verknüpfungsmodus für das Projekt, der None, SdkOnly oder Full sein kann.
<PackageSigningKey> Der Signaturschlüssel des Pakets, der beim Signaturen des Pakets verwendet werden soll. Stellen Sie den Namen Ihres Installationszertifikats ein, wie er in Keychain Access angezeigt wird.
<RuntimeIdentifier> Der Laufzeitbezeichner (RID) für das Projekt. Release-Builds von .NET MAUI Mac Catalyst-Apps verwenden standardmäßig maccatalyst-x64 und maccatalyst-arm64 als Laufzeitbezeichner, um universelle Apps zu unterstützen. Geben Sie maccatalyst-x64 an, oder maccatalyst-arm64, um nur eine einzelne Architektur zu unterstützen.
<UseHardenedRuntime> Setzen Sie den Wert auf true, um die gehärtete Laufzeit zu aktivieren, die für Mac Catalyst-Apps erforderlich ist, die außerhalb des Mac App Store vertrieben werden.

Eine vollständige Liste der Build-Eigenschaften finden Sie unter Projektdateieigenschaften.

Wichtig

Die Werte für diese Build-Eigenschaften müssen nicht in der Projektdatei angegeben werden. Sie können auch in der Befehlszeile angegeben werden, wenn Sie die App veröffentlichen. Auf diese Weise können Sie bestimmte Werte in Ihrer Projektdatei auslassen.

Das folgende Beispiel zeigt eine typische Eigenschaftsgruppe für das Erstellen und Signaturen Ihrer Mac Catalyst-App für den Vertrieb außerhalb des Mac App Store:

<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-maccatalyst|AnyCPU'">
  <MtouchLink>SdkOnly</MtouchLink>
  <EnableCodeSigning>True</EnableCodeSigning>
  <EnablePackageSigning>true</EnablePackageSigning>
  <CreatePackage>true</CreatePackage>
  <CodesignKey>Developer ID Application: John Smith (AY2GDE9QM7)</CodesignKey>
  <CodesignProvision>MyMauiApp (Non-App Store)</CodesignProvision>
  <CodesignEntitlements>Platforms\MacCatalyst\Entitlements.plist</CodesignEntitlements>
  <PackageSigningKey>Developer ID Installer: John Smith (AY2GDE9QM7)</PackageSigningKey>
  <UseHardenedRuntime>true</UseHardenedRuntime>
</PropertyGroup>

In diesem Beispiel <PropertyGroup> wird eine Bedingungsprüfung hinzugefügt, die verhindert, dass die Einstellungen verarbeitet werden, wenn die Bedingungsprüfung nicht bestanden wird. Bei der Konditionsprüfung werden zwei Punkte überprüft:

  1. Die Build-Konfiguration ist auf Release eingestellt.
  2. Das Zielframework wird auf etwas festgelegt, das den Text net8.0-maccatalyst enthält.
  3. Die Plattform ist auf AnyCPU festgelegt.

Wenn eine dieser Bedingungen nicht erfüllt ist, werden die Einstellungen nicht verarbeitet. Noch wichtiger ist, dass die Einstellungen <CodesignKey>, <CodesignProvision> und <PackageSigningKey> nicht gesetzt sind, wodurch die App nicht signiert werden kann.

Nach dem Hinzufügen der oben genannten Eigenschaftsgruppe kann die App über die Befehlszeile auf einem Mac veröffentlicht werden, indem Sie ein Terminal öffnen und zu dem Ordner für Ihr .NET MAUI-Appsprojekt navigieren. Führen Sie dann den folgenden Befehl aus:

dotnet build -f net8.0-maccatalyst -c Release

Hinweis

In .NET 8 wird für den Befehl dotnet publish standardmäßig die Konfiguration Release verwendet. Daher kann die Buildkonfiguration von der Befehlszeile weggelassen werden.

Veröffentlichen erstellt, signiert und verpackt die App und kopiert die .pkg in den Ordner bin/Release/net8.0-maccatalyst/publish/.

Notarisieren Ihrer App

macOS enthält eine Technologie namens Gatekeeper, mit der sichergestellt wird, dass nur vertrauenswürdige Software auf einem Mac läuft. Wenn ein/e Benutzer*in ein Installationspaket oder eine App herunterlädt und öffnet, verifiziert Gatekeeper, dass die Software von einem/einer identifizierten Entwickler*in stammt. Dazu wird nach einem Entwickler-ID-Zertifikat gesucht, und es wird überprüft, ob die Software von Apple als frei von bekannten bösartigen Inhalten beglaubigt wurde und nicht verändert wurde. Daher sollten Sie Ihre App nach der Bereitstellung und Veröffentlichung bei Apple zur Beglaubigung einreichen. Der Notardienst von Apple scannt automatisch Ihre mit der Entwickler-ID signierte App und führt Sicherheitsüberprüfungen durch. Wenn die Beglaubigung erfolgreich war, wird Ihrer Software ein Ticket zugewiesen, um Gatekeeper mitzuteilen, dass sie beglaubigt wurde.

Apps können mit dem Kommandozeilenwerkzeug notarytool an den Notardienst von Apple übermittelt werden:

xcrun notarytool submit {my_package_filename} --wait --apple-id {my_apple_id} --password {my_app_specific_password} --team-id {my_team_id}

Ein Beispiel für die Verwendung des notarytool-Tools zum Signaturen einer .NET MAUI Mac Catalyst .pkg-Datei wird unten gezeigt:

xcrun notarytool submit MyMauiApp-1.0.pkg --wait --apple-id johm.smith@provider.com --password fqtk-cprr-gqdt-bvyo --team-id AY2GDE9QM7

Das wait-Flag weist notarytool an, sich erst dann zu beenden, wenn der Notardienst die Bearbeitung der Übermittlung abgeschlossen hat, sodass keine Notwendigkeit besteht, den Dienst nach seinem Status zu fragen. Die Argumente apple-id, password und team-id werden verwendet, um Ihre App Store Connect-Anmeldedaten zu übermitteln. Da App Store Connect eine Zwei-Faktor-Authentifizierung erfordert, müssen Sie ein app-spezifisches Kennwort für notarytool erstellen. Informationen zum Erstellen eines app-spezifischen Kennworts finden Sie unter Mit app-spezifischen Kennwörtern bei Apps mit Ihrer Apple ID anmelden auf developer.apple.com.

Nachdem Sie Ihren Antrag bei Apple eingereicht haben, dauert das Beglaubigungsverfahren in der Regel weniger als 1 Stunde.

Hinweis

Die Notarisierung wird für die meisten Apps innerhalb von 5 Minuten abgeschlossen. Informationen zur Vermeidung langer Antwortzeiten des Notariatsdienstes finden Sie unter Lange Antwortzeiten und Größenbeschränkungen bei der Beglaubigung vermeiden auf developer.apple.com.

Wenn die Beglaubigung erfolgreich war, erstellt der Notardienst ein Ticket für das signierte Installationspaket und das darin enthaltene App-Bundle.

Weitere Informationen zur Beglaubigung finden Sie unter Beglaubigung von macOS-Software vor der Verteilung. Weitere Möglichkeiten, Ihre App an den Notar-Service von Apple zu übermitteln, finden Sie unter Hochladen Ihrer App im Notar-Service auf developer.apple.com. Informationen zur Behebung allgemeiner Notarisierungsprobleme finden Sie unter Lösung allgemeiner Notarisierungsprobleme.

Heften Sie das Ticket an Ihre App

Die Beglaubigung erzeugt ein Ticket für das signierte Installationspaket und das darin enthaltene App-Bündel, das Gatekeeper mitteilt, dass Ihre App beglaubigt ist. Sobald die Beglaubigung abgeschlossen ist und Benutzer*innen versuchen, Ihre App unter macOS 10.14 oder höher auszuführen, findet Gatekeeper das Ticket online.

Nachdem die Beglaubigung erfolgreich war, sollten Sie das Ticket mit dem stapler-Tool an Ihre App anhängen. Dadurch wird sichergestellt, dass Gatekeeper das Ticket auch dann finden kann, wenn keine Netzwerkverbindung verfügbar ist. Führen Sie den folgenden Befehl aus, um das Ticket an Ihr .pkg anzuhängen:

xcrun stapler staple {filename}.pkg

Das Werkzeug stapler ruft das Ticket ab und fügt es dem Installationspaket hinzu. Sie erhalten eine Meldung, dass die Heften- und Bestätigen-Aktion funktioniert hat, sofern das Heften erfolgreich war.

Notarielle Beglaubigung validieren

Wenn Sie die notarielle Beglaubigung validieren möchten, können Sie dies mit dem folgenden Befehl tun:

xcrun stapler validate mypackage.pkg

Verteilen Ihrer App

Das signierte und notariell beglaubigte .pkg kann außerhalb des Mac App Store an einem Ort Ihrer Wahl, z. B. einem Webserver, sicher verteilt werden.

Informationen zum sicheren Öffnen von Apps auf einem Mac finden Sie unter Apps sicher auf dem Mac öffnen auf support.apple.com.

Siehe auch