Guida allo sviluppo di compilazione e packaging per dispositivi iOS
Contesto
L'LCC Unity SDK viene distribuito sotto forma di DLL precompilate. Poiché la piattaforma iOS richiede che i plugin nativi vengano collegati come librerie statiche (__Internal) anziché caricati dinamicamente (dlopen), devi completare i passaggi di configurazione aggiuntivi descritti in questo documento prima di compilare un'applicazione iOS. Esiste una differenza fondamentale nei meccanismi di caricamento dei plugin nativi tra iOS e le altre piattaforme; le altre piattaforme (Windows, macOS, Android, Linux) non richiedono alcuna operazione aggiuntiva.
Questo SDK usa "libwebp" come destinazione P/Invoke quando viene compilato in una DLL. Lo script integrato Editor/RewriteWebpDllImport.cs dell'SDK lo riscrive automaticamente in "__Internal" durante le compilazioni iOS, garantendo che IL2CPP generi le chiamate dirette ai simboli corrette.
Nota:
Quando compili un'applicazione per dispositivi iOS, rinomina prima
Editor/RewriteWebpDllImport.txtnel pacchetto dell'SDK inEditor/RewriteWebpDllImport.csaffinché lo script abbia effetto. In alternativa, cambia direttamente il suffisso dello script nel pacchetto dell'SDK e copialo nella directory Assets/Editor/ del progetto.
Prerequisiti
Lo script RewriteWebpDllImport.cs usa la libreria di riscrittura IL Mono.Cecil durante la compilazione, quindi devi prima aggiungerla come dipendenza al progetto. Ci sono due modi; scegline uno.
Metodo 1: aggiungi tramite Gestione pacchetti (consigliato)
Apri la barra dei menu di Unity Finestra → Gestione pacchetti, fai clic sul pulsante + nell'angolo in alto a sinistra, scegli Aggiungi pacchetto per nome..., inserisci il nome com.unity.nuget.mono-cecil, inserisci la versione 1.11.5, fai clic su Aggiungi e attendi che Gestione pacchetti completi l'installazione, come mostrato di seguito.

Aggiungi com.unity.nuget.mono-cecil tramite nome in Gestione pacchetti
Metodo 2: modifica manualmente manifest.json
Modifica direttamente il file Packages/manifest.json del progetto e aggiungi una riga sotto dependencies:
{
"dependencies": {
"com.unity.nuget.mono-cecil": "1.11.5"
}
}
Dopo aver salvato, torna a Unity; l'Editor risolverà e installerà automaticamente la dipendenza.
Flusso di lavoro di compilazione
Dopo aver completato la configurazione dei prerequisiti, segui il flusso di lavoro di compilazione iOS standard; RewriteWebpDllImport interverrà automaticamente durante la compilazione.
- Rinomina
Editor/RewriteWebpDllImport.txtinEditor/RewriteWebpDllImport.cs(se non è già stato rinominato). - Nella barra dei menu di Unity, seleziona File → Build Settings, seleziona iOS dall'elenco delle piattaforme e fai clic su Switch Platform.
- Fai clic su Build (oppure Build And Run), seleziona una directory di output e genera il progetto Xcode.
- Durante la compilazione, lo script riscrive automaticamente tutte le voci
DllImportdell'SDK destinate a"libwebp"in"__Internal". Dopo una compilazione riuscita, la Console restituisce un log simile a:
[RewriteWebpDllImport] Rewrote 77 P/Invoke entries from "libwebp" to "__Internal".
- Apri il progetto generato con Xcode e, in Build Phases → Link Binary With Libraries del target, conferma che
libwebp.a,libwebpdemux.aelibsharpyuv.asiano collegati. - Collega il dispositivo iOS, firma ed esegui in Xcode.
Nota:
Se il log
[RewriteWebpDllImport]non compare nella Console, di solito significa che lo script non ha avuto effetto: conferma che il suffisso del file sia stato cambiato da.txta.cse che la dipendenza Mono.Cecil sia installata correttamente.
Risoluzione dei problemi
| Messaggio di errore | Causa | Soluzione |
|---|---|---|
Unable to load DLL 'libwebp' | Lo script non ha avuto effetto e DllImport punta ancora al nome della libreria dinamica | Conferma che RewriteWebpDllImport.txt sia stato rinominato in .cs, ricompila e controlla il log della Console |
Cannot find LCCSDK.dll in staging area | La DLL principale dell'SDK non è stata trovata durante la compilazione e manca la destinazione della riscrittura | Conferma che l'SDK sia importato correttamente nel progetto e che la DLL non sia esclusa da iOS tramite Exclude Platform |
Errori di compilazione relativi a Mono.Cecil (namespace Mono.Cecil non trovato) | Non installato o versione non corrispondente | Aggiungi com.unity.nuget.mono-cecil@1.11.5 secondo i "Prerequisiti" e attendi che il compilatore risolva di nuovo |
Note
- Si consiglia di usare Unity 2022.3 LTS o superiore (incluso Unity 6); la compatibilità con Mono.Cecil e IL2CPP non può essere garantita su versioni troppo vecchie.
- Se devi eseguire su iOS Simulator, conferma che la libreria statica collegata contenga la slice dell'architettura
arm64-simulator, altrimenti il simulatore non può collegarsi. - La configurazione precedente riguarda solo la piattaforma iOS. I flussi di lavoro di compilazione di Windows, macOS, Android e Linux non ne sono minimamente influenzati e non è necessario rinominare lo script o aggiungere la dipendenza Mono.Cecil.