Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Från och med .NET 9 stöder intern AOT publicering av .NET-klassbibliotek som inte är beroende av iOS-arbetsbelastningar för iOS-liknande plattformar. Med det här stödet kan du skapa fristående interna bibliotek som kan användas från iOS-, Mac Catalyst- och tvOS-program.
Viktigt!
Den här metoden kommer inte med det inbyggda stödet för Objective-C-samverkan och ytterligare kodanpassningar kan krävas (till exempel argument för marshalling av referenstyper) för att uppnå samverkan.
Skapa delade bibliotek
I det här avsnittet beskrivs steg för att skapa ett enkelt .NET-klassbiblioteksprojekt med NativeAOT-stöd och skapa ett inbyggt bibliotek för iOS-liknande plattformar från det.
- Ladda ned .NET 9 SDK 
- Skapa ett klassbiblioteksprojekt - dotnet new classlib -n "MyNativeAOTLibrary"
- Lägg till följande egenskaper i projektfilen - MyNativeAOTLibrary.csproj- <PublishAot>true</PublishAot> <PublishAotUsingRuntimePack>true</PublishAotUsingRuntimePack>
- Redigera källkoden - MyNativeAOTLibrary/Class1.csför att exponera en hanterad metod så att den kan refereras från den interna koden som- aotsample_add. Till exempel:- using System.Runtime.InteropServices; namespace NaotLib; public class Class1 { [UnmanagedCallersOnly(EntryPoint = "aotsample_add")] public static int Add(int a, int b) { return a + b; } }
- Publicera klassbiblioteket och rikta in dig på önskad iOS-liknande plattform genom att ange lämplig körningsidentifierare (refereras nedan som - <rid>):- dotnet publish -r <rid> MyNativeAOTLibrary/MyNativeAOTLibrary.csproj
När föregående steg har slutförts skapas ett par filer: ett delat bibliotek MyNativeAOTLibrary.dylib och dess felsökningssymboler MyNativeAOTLibrary.dylib.dSYM, som finns på: MyNativeAOTLibrary/bin/Release/net9.0/<rid>/publish/.
Kommentar
För att skapa universella ramverk måste du publicera klassbiblioteket för både Arm64 och x64 arkitekturer för en viss plattform.
Det innebär att du måste upprepa steg 5 med en annan körningsidentifierare.
Du skulle till exempel publicera klassbiblioteket med både maccatalyst-arm64 och maccatalyst-x64 körningsidentifierare som en förutsättning för att paketera det delade biblioteket i ett anpassat universellt MacCatalyst-ramverk.
Skapa och använda ett anpassat ramverk
Apple inför ett krav på att delade bibliotek (.dylibs) måste paketeras i ramverk för att kunna användas från program.
I det här avsnittet beskrivs alla nödvändiga steg för att uppnå detta och ett enkelt scenario med ett iOS/MacCatalyst-program som använder ett delat NativeAOT-bibliotek/ramverk.
Kommentar
De beskrivna stegen är bara i demonstrationssyfte. De faktiska kraven kan variera beroende på det exakta användningsfallet.
Paketera det delade biblioteket i anpassat iOS-ramverk
- Skapa en ramverksmapp: - mkdir MyNativeAOTLibrary.framework
- Justera inläsningskommandon: - LC_RPATHkommandot load- install_name_tool -rpath @executable_path @executable_path/Frameworks MyNativeAOTLibrary/bin/Release/net9.0/ios-arm64/publish/MyNativeAOTLibrary.dylib
- LC_ID_DYLIBkommandot load- install_name_tool -id @rpath/MyNativeAOTLibrary.framework/MyNativeAOTLibrary MyNativeAOTLibrary/bin/Release/net9.0/ios-arm64/publish/MyNativeAOTLibrary.dylib
 
- Paketera binärfilen manuellt i en universell fil: - lipo -create MyNativeAOTLibrary/bin/Release/net9.0/ios-arm64/publish/MyNativeAOTLibrary.dylib -output MyNativeAOTLibrary.framework/MyNativeAOTLibrary
- Lägg till en egenskapslistfil i ramverket: - Skapa en Info.plistfil
 - touch MyNativeAOTLibrary.framework/Info.plist- Lägg till innehållet från bilagan i den skapade Info.plistfilen
 
- Skapa en 
Efter det sista steget bör ramverksstrukturen se ut så här:
MyNativeAOTLibrary.framework
    |_ MyNativeAOTLibrary
    |_ Info.plist
Paketera det delade biblioteket i ett anpassat universellt MacCatalyst-ramverk
Universella ramverk kräver binärfiler för både Arm64 och x64 arkitektur.
Därför måste du publicera interna bibliotek som riktar sig till båda följande RID:er i förväg: maccatalyst-arm64 och maccatalyst-x64.
- Skapa en ramverksmappstruktur: - 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/Current
- Justera inläsningskommandon: - LC_RPATHkommandot load- install_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.dylib
- LC_ID_DYLIBkommandot load- install_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
 
- Paketera binärfilen manuellt i en universell fil: - 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/MyNativeAOTLibrary
- Lägg till en egenskapslistfil i ramverket: - Skapa en Info.plistfil
 - touch MyNativeAOTLibrary.framework/Versions/A/Resources/Info.plist- Lägg till innehållet från bilagan i den skapade Info.plistfilen
 
- Skapa en 
Efter det sista steget bör ramverksstrukturen se ut så här:
MyNativeAOTLibrary.framework
    |_ MyNativeAOTLibrary -> Versions/Current/MyNativeAOTLibrary
    |_ Resources -> Versions/Current/Resources
    |_ Versions
        |_ A
        |   |_ Resources
        |   |   |_ Info.plist
        |   |_ MyNativeAOTLibrary
        |_ Current -> A
Använda anpassade ramverk
- Öppna - Xcode(i det här exemplet- Xcode 16.0används)
- Skapa ett nytt - Appprojekt
- Välj namnet på din app (till exempel - MyiOSApp) och välj Objective-C som källspråk
- Lägga till en referens till ramverket - MyNativeAOTLibrary- På fliken MyiOSAppMål allmänt går du till Ramverk, Bibliotek och Inbäddat innehåll och väljer + att lägga tillMyNativeAOTLibrarysom det refererade ramverket
- I dialogrutan väljer du Lägg till andra ->Lägg till filer och bläddrar sedan till platsen MyNativeAOTLibrary.frameworkför och väljer den
- När du har valt det anger du Embed and Signalternativet förMyNativeAOTLibraryramverk
   
- På fliken 
- Lägg till - MyNativeAOTLibrary.frameworkplats i listan över ramverkssökvägar på fliken Bygginställningar  
- Redigera - main.mgenom att anropa den exponerade hanterade metoden- aotsample_addoch skriva ut resultatet- extern int aotsample_add(int a, int b); int main(int argc, char * argv[]) { ... NSLog(@"2 + 5 = %d", aotsample_add(2, 5)); ... }
- Välj din fysiska iOS-enhet och skapa/köra appen 
- Granska loggarna när appen har startats. Appen bör skriva ut: - 2 + 5 = 7
Kommentar
För MacCatalyst använder du samma steg förutom steg 7, där körmålet måste anges som: Mac (Mac Catalyst).
Skapa statiska bibliotek med NativeAOT för iOS-liknande plattformar
Som beskrivs i översikten över att skapa inbyggda bibliotek är det bättre att skapa delade bibliotek över statiska bibliotek på grund av flera begränsningar.
Om du vill kan du dock skapa ett statiskt bibliotek genom att följa stegen för att skapa en delad och inkludera ytterligare en egenskap i projektfilen:
<NativeLib>Static</NativeLib>
När projektet har publicerats finns det statiska biblioteket MyNativeAOTLibrary.a på: MyNativeAOTLibrary/bin/Release/net9.0/<rid>/publish.
Den här artikeln beskriver inte hur du använder det statiska biblioteket och konfigurerar konsumentprojektet.
Bilaga Info.plist-innehåll
<?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>