Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
A partire da .NET 9, Native AOT supporta la pubblicazione di librerie di classi .NET che non dipendono dai carichi di lavoro iOS per piattaforme simili a iOS. Questo supporto consente di creare librerie native autonome che possono essere usate da applicazioni iOS, Mac Catalyst e tvOS.
Importante
Questo approccio non include il supporto predefinito per l'interoperabilità con Objective-C e potrebbe essere necessario adattare codice aggiuntivo, come il marshalling degli argomenti di tipo riferimento, per ottenere l'interoperabilità.
Creare librerie condivise
Questa sezione descrive i passaggi per creare un semplice progetto libreria di classi .NET con supporto NativeAOT e produrre una libreria nativa per piattaforme simili a iOS da essa.
Scarica .NET 9 SDK
Creare un progetto di libreria di classi
dotnet new classlib -n "MyNativeAOTLibrary"Aggiungere le proprietà seguenti nel file di progetto
MyNativeAOTLibrary.csproj<PublishAot>true</PublishAot> <PublishAotUsingRuntimePack>true</PublishAotUsingRuntimePack>Modificare il
MyNativeAOTLibrary/Class1.cscodice sorgente per esporre un metodo gestito in modo che possa essere fatto riferimento dal codice nativo comeaotsample_add. Ad esempio:using System.Runtime.InteropServices; namespace NaotLib; public class Class1 { [UnmanagedCallersOnly(EntryPoint = "aotsample_add")] public static int Add(int a, int b) { return a + b; } }Pubblicare la libreria di classi e specificare come destinazione la piattaforma iOS desiderata specificando l'identificatore di runtime appropriato (indicato di seguito come
<rid>):dotnet publish -r <rid> MyNativeAOTLibrary/MyNativeAOTLibrary.csproj
Il completamento corretto del passaggio precedente produce una coppia di file: una libreria MyNativeAOTLibrary.dylib condivisa e i MyNativeAOTLibrary.dylib.dSYMrelativi simboli di debug, che si trovano in: MyNativeAOTLibrary/bin/Release/net9.0/<rid>/publish/.
Nota
Per creare framework universali, è necessario pubblicare la libreria di classi per entrambe Arm64 le architetture e x64 per una determinata piattaforma.
Ciò significa che è necessario ripetere il passaggio 5 con un identificatore di runtime diverso.
Ad esempio, si pubblica la libreria di classi con gli identificatori di runtime maccatalyst-arm64 e maccatalyst-x64 come prerequisito per l'impacchettamento della libreria condivisa in un framework universale MacCatalyst personalizzato.
Creare e usare un framework personalizzato
Apple impone un requisito che le librerie condivise (con estensione dylibs) debbano essere inserite in pacchetti in framework per poter essere utilizzate dalle applicazioni.
Questa sezione descrive tutti i passaggi necessari per ottenere questo risultato e uno scenario semplice di un'applicazione iOS/MacCatalyst che usa una libreria/framework NativeAOT condiviso.
Nota
I passaggi descritti sono solo a scopo dimostrativo. I requisiti effettivi possono variare a seconda del caso d'uso esatto.
Creare un pacchetto della libreria condivisa in un framework iOS personalizzato
Creare una cartella del framework:
mkdir MyNativeAOTLibrary.frameworkModificare i comandi di caricamento:
LC_RPATHcomando loadinstall_name_tool -rpath @executable_path @executable_path/Frameworks MyNativeAOTLibrary/bin/Release/net9.0/ios-arm64/publish/MyNativeAOTLibrary.dylibLC_ID_DYLIBcomando caricamentoinstall_name_tool -id @rpath/MyNativeAOTLibrary.framework/MyNativeAOTLibrary MyNativeAOTLibrary/bin/Release/net9.0/ios-arm64/publish/MyNativeAOTLibrary.dylib
Creare manualmente il pacchetto binario in un file universale:
lipo -create MyNativeAOTLibrary/bin/Release/net9.0/ios-arm64/publish/MyNativeAOTLibrary.dylib -output MyNativeAOTLibrary.framework/MyNativeAOTLibraryAggiungere un file dell'elenco di proprietà al framework:
- Creare un file
Info.plist
touch MyNativeAOTLibrary.framework/Info.plist- Creare un file
Dopo il passaggio finale, la struttura del framework dovrebbe essere simile alla seguente:
MyNativeAOTLibrary.framework
|_ MyNativeAOTLibrary
|_ Info.plist
Imballare la libreria condivisa in un framework universale MacCatalyst personalizzato
I framework universali richiedono file binari sia per l'architettura Arm64, sia per l'architettura x64.
Per questo motivo, è necessario pubblicare librerie native destinate a entrambi i rid seguenti in anticipo: maccatalyst-arm64 e maccatalyst-x64.
Creare una struttura di cartelle del framework:
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/CurrentModificare i comandi di caricamento:
LC_RPATHcomando di caricamentoinstall_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_DYLIBcomando di caricamentoinstall_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
Creare manualmente il pacchetto binario in un file universale:
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/MyNativeAOTLibraryAggiungere un file dell'elenco di proprietà al framework:
- Creare un file
Info.plist
touch MyNativeAOTLibrary.framework/Versions/A/Resources/Info.plist- Creare un file
Dopo il passaggio finale, la struttura del framework dovrebbe essere simile alla seguente:
MyNativeAOTLibrary.framework
|_ MyNativeAOTLibrary -> Versions/Current/MyNativeAOTLibrary
|_ Resources -> Versions/Current/Resources
|_ Versions
|_ A
| |_ Resources
| | |_ Info.plist
| |_ MyNativeAOTLibrary
|_ Current -> A
Utilizzare framework personalizzati
Apri
Xcode(in questo esempioXcode 16.0viene usato)Creare un nuovo
AppprogettoScegliere il nome dell'app (ad esempio,
MyiOSApp) e scegliere Objective-C come linguaggio di origineAggiungere un riferimento al
MyNativeAOTLibraryframework-
MyiOSAppNella scheda Generale delle destinazioni, sotto Framework, librerie e contenuti incorporati, selezionare + per aggiungereMyNativeAOTLibrarycome framework di riferimento. - Nella finestra di dialogo scegliere Aggiungi altri ->Aggiungi file e quindi passare al percorso di
MyNativeAOTLibrary.frameworke selezionarlo - Una volta selezionato, impostare l'opzione
Embed and Signper il frameworkMyNativeAOTLibrary
-
Aggiungere
MyNativeAOTLibrary.frameworkil percorso all'elenco dei Percorsi di ricerca del framework nella scheda delle Impostazioni di Compilazione
Modificare
main.mchiamando il metodoaotsample_addgestito esposto e stampando il risultatoextern int aotsample_add(int a, int b); int main(int argc, char * argv[]) { ... NSLog(@"2 + 5 = %d", aotsample_add(2, 5)); ... }Selezionare il dispositivo iOS fisico ed eseguire l'app
Esaminare i log dopo l'avvio dell'app. L'app deve stampare:
2 + 5 = 7
Nota
Per MacCatalyst, usare gli stessi passaggi, ad eccezione del passaggio 7, in cui la destinazione di esecuzione deve essere impostata come : Mac (Mac Catalyst).
Creare librerie statiche con NativeAOT per piattaforme simili a iOS
Come descritto in Panoramica della creazione di librerie native, è preferibile creare librerie condivise rispetto a quelle statiche a causa di diverse limitazioni.
Tuttavia, se lo si desidera, è possibile compilare una libreria statica seguendo i passaggi per la compilazione di uno condiviso e includendo una proprietà aggiuntiva nel file di progetto:
<NativeLib>Static</NativeLib>
Dopo la pubblicazione del progetto, la libreria MyNativeAOTLibrary.a statica è disponibile in: MyNativeAOTLibrary/bin/Release/net9.0/<rid>/publish.
Questo articolo non illustra come usare la libreria statica e configurare il progetto consumer.
Contenuto del file Info.plist nell'Appendice
<?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>