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:
- Erstellen Sie zwei Signaturanforderungen für Zertifikate. Weitere Informationen finden Sie unter Erstellen einer Zertifikatsignierungsanforderung.
- Erstellen Sie ein Entwickler-ID-Appszertifikat. Weitere Informationen finden Sie unter Erstellen eines Entwickler-ID-Appszertifikats.
- Erstellen Sie ein Entwickler-ID-Installer-Zertifikat. Weitere Informationen finden Sie unter Erstellen eines Entwickler-ID-Installationszertifikats.
- Erstellen einer App-ID Weitere Informationen finden Sie unter Erstellen einer App ID.
- Erstellen eines Bereitstellungsprofils Zusätzliche Informationen finden Sie unter Ein Bereitstellungsprofil erstellen.
- 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:
- Optional können Sie Ihrer App Berechtigungen hinzufügen. Weitere Informationen finden Sie unter Berechtigungen hinzufügen.
- Aktualisieren Sie die Datei Info.plist der App. Weitere Informationen finden Sie unter Info.plist aktualisieren.
- Deaktivieren Sie die Code-Signaturprüfung für Ihre App. Weitere Informationen finden Sie unter Deaktivieren der Codesignaturprüfung.
- Veröffentlichen Sie Ihre App über die Befehlszeile. Weitere Informationen finden Sie unter Veröffentlichen über die Befehlszeile.
- 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:
Starten Sie auf dem Mac Keychain Access.
Wählen Sie in Keychain Access das Menüelement Keychain Access > Zertifikatsassistent > Zertifikat von einer Zertifizierungsstelle anfordern… aus.
Geben Sie im Dialog Zertifikatsassistent eine E-Mail-Adresse in das Feld Benutzer-E-Mail-Adresse ein.
Geben Sie im Dialog Zertifikatsassistent einen Namen für den Schlüssel in das Feld Gemeinsamer Name ein.
Lassen Sie im Dialogfeld Zertifikatsassistent das Feld CA-E-Mail-Adresse leer.
Wählen Sie im Dialogfeld Zertifikatsassistent das Optionsfeld Auf Festplatte gespeichert aus und wählen Sie Weiter aus:
Speichern Sie die Zertifikatssignierungsanforderung an einem bekannten Ort.
Wählen Sie im Dialog Zertifikatsassistent die Schaltfläche Erledigt aus.
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:
Melden Sie sich in einem Webbrowser bei Ihrem Apple-Entwicklerkonto an.
Wählen Sie in Ihrem Apple-Entwicklerkonto die Registerkarte Zertifikate, IDs und Profile aus.
Wählen Sie auf der Seite Zertifikate, Identifikatoren & Profile die Schaltfläche + aus, um ein neues Zertifikat zu erstellen.
Wählen Sie auf der Seite Erstellen eines neuen Zertifikats das Optionsfeld Entwickler-ID-App aus, bevor Sie die Schaltfläche Weiter auswählen:
Aktivieren Sie auf der Seite Neues Zertifikat erstellen das Optionsfeld G2 Sub-CA und wählen Sie anschließend Datei auswählen aus:
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.Wählen Sie auf der Seite Erstellen eines neuen Zertifikats die Schaltfläche Weiter aus:
Wählen Sie auf der Seite Ihr Zertifikat herunterladen die Schaltfläche Herunterladen aus:
Die Zertifikatsdatei (eine Datei mit einer
.cer
-Erweiterung) wird an Ihren ausgewählten Speicherort heruntergeladen.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:
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:
Wählen Sie in Ihrem Apple-Entwicklerkonto die Registerkarte Zertifikate, IDs und Profile aus.
Wählen Sie auf der Seite Zertifikate, Identifikatoren & Profile die Schaltfläche + aus, um ein neues Zertifikat zu erstellen.
Wählen Sie auf der Seite Ein neues Zertifikat erstellen das Optionsfeld Entwickler-ID-Installer aus, bevor Sie die Schaltfläche Weiter auswählen:
Aktivieren Sie auf der Seite Neues Zertifikat erstellen das Optionsfeld G2 Sub-CA und wählen Sie anschließend Datei auswählen aus:
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.Wählen Sie auf der Seite Erstellen eines neuen Zertifikats die Schaltfläche Weiter aus:
Wählen Sie auf der Seite Ihr Zertifikat herunterladen die Schaltfläche Herunterladen aus:
Die Zertifikatsdatei (eine Datei mit einer
.cer
-Erweiterung) wird an Ihren ausgewählten Speicherort heruntergeladen.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:
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
Navigieren Sie in Ihrem Apple-Developerkonto zu Zertifikaten, IDs und Profilen.
Wählen Sie auf der Seite Zertifikate, Bezeichner und Profile die Registerkarte Bezeichner aus.
Wählen Sie auf der Seite Bezeichner die Schaltfläche + aus, um eine neue App-ID zu erstellen.
Wählen Sie auf der Seite Einen neuen Bezeichner registrieren das Optionsfeld App IDs aus, bevor Sie die Schaltfläche Weiter auswählen:
Wählen Sie auf der Seite Einen neuen Bezeichner registrieren App aus, bevor Sie die Schaltfläche Weiter auswählen.
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:
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.
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.
Wählen Sie auf der Seite Registrieren einer App-ID die Schaltfläche Weiter aus.
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:
Wählen Sie auf der Seite "Zertifikate, Bezeichner und Profile" Ihres Apple-Developerkontos die Registerkarte "Profile" aus.
Auf der Registerkarte Profile klicken Sie auf die Schaltfläche +, um ein neues Profil zu erstellen.
Wählen Sie auf der Seite Ein neues Bereitstellungsprofil erstellen das Optionsfeld Developer ID aus, bevor Sie auf die Schaltfläche Weiter klicken:
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 auf der Seite Ein Bereitstellungsprofil erstellen das Optionsfeld aus, das Ihrem Verteilungszertifikat entspricht, bevor Sie auf die Schaltfläche Weiter klicken:
Geben Sie auf der Seite Ein Bereitstellungsprofil erstellen einen Namen für das Provisioning-Profil ein, bevor Sie auf die Schaltfläche Erstellen klicken:
Hinweis
Notieren Sie sich den Namen des Bereitstellungsprofils, da es beim Signaturen Ihrer App erforderlich ist.
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:
Starten Sie auf Ihrem Mac Xcode.
Wählen Sie in Xcode das Menüelement Xcode > Einstellungen … aus.
Wählen Sie im Dialog Einstellungen die Registerkarte Konten aus.
Klicken Sie auf der Registerkarte Konten auf die Schaltfläche +, um Ihren Apple-Entwicklerkonto zu Xcode hinzuzufügen:
Wählen Sie im Popup-Fenster Kontotyp die Option Apple ID aus und klicken Sie anschließend auf die Schaltfläche Weiter:
Geben Sie im Anmeldefenster Ihre Apple ID ein und klicken Sie auf die Schaltfläche Weiter.
Geben Sie im Anmeldefenster Ihr Apple ID-Kennwort ein und klicken Sie auf die Schaltfläche Weiter:
Klicken Sie auf der Registerkarte Konten auf die Schaltfläche Zertifikate verwalten…, um sicherzustellen, dass Ihr Verteilungszertifikat heruntergeladen wurde.
Klicken Sie auf der Registerkarte Konten auf die Schaltfläche Manuelle Profile herunterladen, um Ihre Provisionierungsprofile herunterzuladen:
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.
Festlegen des Copyright-Schlüssels
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:
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:
- Die Build-Konfiguration ist auf
Release
eingestellt. - Das Zielframework wird auf etwas festgelegt, das den Text
net8.0-maccatalyst
enthält. - 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
- Vorbereitung Ihrer App für die Verteilung auf developer.apple.com
- Geschützte Laufzeit auf developer.apple.com
- Anpassen des Beglaubigungsworkflows auf developer.apple.com