Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Vanaf .NET 9 biedt Native AOT ondersteuning voor het publiceren van .NET-klassebibliotheken die niet afhankelijk zijn van iOS-workloads voor iOS-achtige platforms. Met deze ondersteuning kunt u zelfstandige systeemeigen bibliotheken maken die kunnen worden gebruikt vanuit iOS-, Mac Catalyst- en tvOS-toepassingen.
Belangrijk
Deze aanpak wordt niet geleverd met de ingebouwde ondersteuning voor objective-C-interoperabiliteit en er zijn mogelijk aanvullende codeaanpassingen vereist (zoals marshalling van referentietypeargumenten) om interoperabiliteit te bereiken.
Gedeelde bibliotheken bouwen
In deze sectie worden de stappen beschreven voor het maken van een eenvoudig .NET-klassebibliotheekproject met nativeAOT-ondersteuning en het produceren van een systeemeigen bibliotheek voor iOS-achtige platforms.
.NET 9 SDK downloaden
Een klassebibliotheekproject maken
dotnet new classlib -n "MyNativeAOTLibrary"Voeg de volgende eigenschappen toe aan het projectbestand
MyNativeAOTLibrary.csproj<PublishAot>true</PublishAot> <PublishAotUsingRuntimePack>true</PublishAotUsingRuntimePack>Bewerk de
MyNativeAOTLibrary/Class1.csbroncode om een beheerde methode beschikbaar te maken, zodat er vanuit de systeemeigen code naar kan worden verwezen alsaotsample_add. Voorbeeld:using System.Runtime.InteropServices; namespace NaotLib; public class Class1 { [UnmanagedCallersOnly(EntryPoint = "aotsample_add")] public static int Add(int a, int b) { return a + b; } }Publiceer de klassebibliotheek en richt u op het gewenste iOS-achtige platform door de juiste runtime-id op te geven (waarnaar hieronder wordt verwezen als
<rid>):dotnet publish -r <rid> MyNativeAOTLibrary/MyNativeAOTLibrary.csproj
Geslaagde voltooiing van de vorige stap produceert een paar bestanden: een gedeelde bibliotheek MyNativeAOTLibrary.dylib en de bijbehorende foutopsporingssymbolen MyNativeAOTLibrary.dylib.dSYM, die zich bevinden op: MyNativeAOTLibrary/bin/Release/net9.0/<rid>/publish/.
Notitie
Voor het maken van universele frameworks is het vereist om de klassebibliotheek voor zowel als Arm64x64 architecturen voor een bepaald platform te publiceren.
Dit betekent dat u stap 5 moet herhalen met een andere runtime-id.
U publiceert bijvoorbeeld de klassebibliotheek met beide maccatalyst-arm64 en maccatalyst-x64 runtime-id's als een vereiste voor het verpakken van de gedeelde bibliotheek in een aangepast universeel MacCatalyst-framework.
Een aangepast framework maken en gebruiken
Apple legt een vereiste op dat gedeelde bibliotheken (.dylibs) moeten worden verpakt in frameworks om te kunnen worden gebruikt vanuit toepassingen.
In deze sectie worden alle vereiste stappen beschreven om dit te bereiken en een eenvoudig scenario van een iOS-/MacCatalyst-toepassing die gebruikmaakt van een gedeelde NativeAOT-bibliotheek/-framework.
Notitie
De beschreven stappen zijn alleen bedoeld voor demonstratiedoeleinden. De werkelijke vereisten kunnen verschillen, afhankelijk van de exacte use-case.
De gedeelde bibliotheek verpakken in een aangepast iOS-framework
Een frameworkmap maken:
mkdir MyNativeAOTLibrary.frameworkLaadopdrachten aanpassen:
LC_RPATHopdracht ladeninstall_name_tool -rpath @executable_path @executable_path/Frameworks MyNativeAOTLibrary/bin/Release/net9.0/ios-arm64/publish/MyNativeAOTLibrary.dylibLC_ID_DYLIBopdracht ladeninstall_name_tool -id @rpath/MyNativeAOTLibrary.framework/MyNativeAOTLibrary MyNativeAOTLibrary/bin/Release/net9.0/ios-arm64/publish/MyNativeAOTLibrary.dylib
Pakket het binaire bestand handmatig in een universeel bestand:
lipo -create MyNativeAOTLibrary/bin/Release/net9.0/ios-arm64/publish/MyNativeAOTLibrary.dylib -output MyNativeAOTLibrary.framework/MyNativeAOTLibraryVoeg een eigenschappenlijstbestand toe aan uw framework:
-
Info.plistEen bestand maken
touch MyNativeAOTLibrary.framework/Info.plist- De inhoud van de bijlage toevoegen aan het gemaakte
Info.plistbestand
-
Na de laatste stap moet de structuur van het framework er als volgt uitzien:
MyNativeAOTLibrary.framework
|_ MyNativeAOTLibrary
|_ Info.plist
De gedeelde bibliotheek verpakken in een aangepast universeel MacCatalyst-framework
Universele frameworks vereisen binaire bestanden voor zowel als Arm64x64 architectuur.
Daarom moet u vooraf systeemeigen bibliotheken publiceren die zijn gericht op beide volgende RID's: maccatalyst-arm64 en maccatalyst-x64.
Maak een structuur van een frameworkmap:
mkdir -p MyNativeAOTLibrary.framework/Versions/A/Resources ln -sfh Versions/Current/MyNativeAOTLibrary MyNativeAOTLibrary.framework/MyNativeAOTLibrary ln -sfh Versions/Current/Resources MyNativeAOTLibrary.framework/Resources ln -sfh A MyNativeAOTLibrary.framework/Versions/CurrentLaadopdrachten aanpassen:
LC_RPATHopdracht ladeninstall_name_tool -rpath @executable_path @executable_path/../Frameworks MyNativeAOTLibrary/bin/Release/net9.0/maccatalyst-arm64/publish/MyNativeAOTLibrary.dylib install_name_tool -rpath @executable_path @executable_path/../Frameworks MyNativeAOTLibrary/bin/Release/net9.0/maccatalyst-x64/publish/MyNativeAOTLibrary.dylibLC_ID_DYLIBopdracht ladeninstall_name_tool -id @rpath/MyNativeAOTLibrary.framework/Versions/A/MyNativeAOTLibrary MyNativeAOTLibrary/bin/Release/net9.0/maccatalyst-arm64/publish/MyNativeAOTLibrary.dylib install_name_tool -id @rpath/MyNativeAOTLibrary.framework/Versions/A/MyNativeAOTLibrary MyNativeAOTLibrary/bin/Release/net9.0/maccatalyst-x64/publish/MyNativeAOTLibrary.dylib
Pakket het binaire bestand handmatig in een universeel bestand:
lipo -create MyNativeAOTLibrary/bin/Release/net9.0/maccatalyst-arm64/publish/MyNativeAOTLibrary.dylib MyNativeAOTLibrary/bin/Release/net9.0/maccatalyst-x64/publish/MyNativeAOTLibrary.dylib -output MyNativeAOTLibrary.framework/Versions/A/MyNativeAOTLibraryVoeg een eigenschappenlijstbestand toe aan uw framework:
-
Info.plistEen bestand maken
touch MyNativeAOTLibrary.framework/Versions/A/Resources/Info.plist- De inhoud van de bijlage toevoegen aan het gemaakte
Info.plistbestand
-
Na de laatste stap moet de structuur van het framework er als volgt uitzien:
MyNativeAOTLibrary.framework
|_ MyNativeAOTLibrary -> Versions/Current/MyNativeAOTLibrary
|_ Resources -> Versions/Current/Resources
|_ Versions
|_ A
| |_ Resources
| | |_ Info.plist
| |_ MyNativeAOTLibrary
|_ Current -> A
Aangepaste frameworks gebruiken
Openen
Xcode(in dit voorbeeldXcode 16.0wordt gebruikt)Een nieuw
Appproject makenKies de naam voor uw app (bijvoorbeeld
MyiOSApp) en kies Objective-C als brontaalEen verwijzing naar het
MyNativeAOTLibraryframework toevoegen- Selecteer op het tabblad Algemeen onder Frameworks, Bibliotheken en Ingesloten inhoud
MyiOSApp - Kies In het dialoogvenster Andere> bestanden toevoegen en blader naar de locatie van
MyNativeAOTLibrary.frameworken selecteer het - Zodra deze optie is geselecteerd, stelt u de
Embed and Signoptie voorMyNativeAOTLibraryframework in
- Selecteer op het tabblad Algemeen onder Frameworks, Bibliotheken en Ingesloten inhoud
Locatie toevoegen
MyNativeAOTLibrary.frameworkaan de lijst met frameworkzoekpaden op het tabblad Build Settings
Bewerken
main.mdoor de weergegeven beheerde methodeaotsample_addaan te roepen en het resultaat af te drukkenextern int aotsample_add(int a, int b); int main(int argc, char * argv[]) { ... NSLog(@"2 + 5 = %d", aotsample_add(2, 5)); ... }Selecteer uw fysieke iOS-apparaat en bouw/voer de app uit
Controleer de logboeken nadat de app is gestart. De app moet worden afgedrukt:
2 + 5 = 7
Notitie
Voor MacCatalyst gebruikt u dezelfde stappen, met uitzondering van stap 7, waarbij de uitvoeringsbestemming moet worden ingesteld als: Mac (Mac Catalyst).
Statische bibliotheken bouwen met NativeAOT voor iOS-achtige platforms
Zoals beschreven in het overzicht van systeemeigen bibliotheken bouwen, is het beter om gedeelde bibliotheken te bouwen ten opzichte van statische bibliotheken vanwege verschillende beperkingen.
Indien gewenst kunt u echter een statische bibliotheek bouwen door de stappen te volgen voor het bouwen van een gedeelde bibliotheek en het toevoegen van een extra eigenschap in het projectbestand:
<NativeLib>Static</NativeLib>
Nadat het project is gepubliceerd, kunt u de statische bibliotheek MyNativeAOTLibrary.a vinden op: MyNativeAOTLibrary/bin/Release/net9.0/<rid>/publish.
In dit artikel wordt niet beschreven hoe u de statische bibliotheek gebruikt en het consumentenproject configureert.
Bijlage Info.plist-inhoud
<?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>CFBundleName</key>
<string>MyNativeAOTLibrary</string>
<key>CFBundleIdentifier</key>
<string>com.companyname.MyNativeAOTLibrary</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CFBundleExecutable</key>
<string>MyNativeAOTLibrary</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
</dict>
</plist>