Aktualisieren von Xamarin.Mac Unified-Anwendungen auf 64-Bit

Ab Januar 2018 erfordert Apple, dass neue Mac-App Store-Übermittlungen 64-Bit als Ziel haben. Apps, die bereits auf dem Mac App Store verfügbar sind, müssen bis Juni 2018 auf die 64-Bit-Version aktualisiert werden.

Die Projektvorlage Datei>neu Xamarin.Mac erstellt standardmäßig 64-Bit-Anwendungen, sodass alle kürzlich erstellten Apps bereits 64-Bit-kompatibel sind und keine Änderungen erfordern.

64-Bit-Ziel

  1. Öffnen Sie das Fenster Projektoptionen für Ihre Xamarin.Mac-App:

    Das Kontextmenü für das Projekt

  2. Wählen Sie Mac-Build aus, und legen Sie Unterstützte Architekturenauf x86_64 fest:

    Festlegen der unterstützten Architekturen auf x86_64

  3. Wenn Ihre App über externe Abhängigkeiten wie native Verweise oder Bindungsprojekte verfügt, aktualisieren Sie diese auf die 64-Bit-Zielversion.

Errors

Wenn Sie Ihre Anwendung zum ersten Mal mit 64-Bit-Unterstützung erstellen oder ausführen, können Linkfehler aus Clang- oder Laufzeitproblemen auftreten. Diese Fehler können auftreten, wenn Abhängigkeiten von Drittanbietern – z. B. native Verweise in Ihren Xamarin.Mac- oder Bindungsprojekten oder manuell geladene systemweite Frameworks – nicht auf 64-Bit aktualisiert wurden.

Tipp

Die Konvertierung Ihres Projekts in eine 64-Bit-Version ist eine große Änderung und kann indirekt verschiedene Programmierfehler aufdecken. Insbesondere kann dies die Größe und Ausrichtung von Datenstrukturen ändern, was sich auf p/invoke Signaturen und nativen Code auswirken würde, der in Ihrem Projekt verknüpft ist. Erwägen Sie, die angegebenen Buildwarnungen zu überprüfen und Ihre Anwendung anschließend gründlich zu testen, um potenzielle Probleme abzufangen.

Beispielfehler, der sich aus einer dynamisch verknüpften Drittanbieterabhängigkeit ergibt, die nicht auf eine 64-Bit-Version ausgerichtet ist:

ld : warning : ignoring file PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary, 
file was built for i386 which is not the architecture being linked (x86_64): 
PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary 

Diesem Fehler kann zur Laufzeit gefolgt werden, IntPtr.Zero indem dlopen anstelle eines erwarteten Handle zurückgegeben wird.

Beispielfehler, der aus einer statisch verknüpften Drittanbieterabhängigkeit resultiert, die nicht auf eine 64-Bit-Version ausgerichtet ist:

Undefined symbols for architecture x86_64:
  "_LibraryFunction", referenced from:
     -u command line option
ld: symbol(s) not found for architecture x86_64 

Aktualisieren Sie diese Abhängigkeiten auf die 64-Bit-Version, und kompilieren Sie Ihre App neu, um sie erfolgreich zu erstellen und auszuführen.