Руководство по разработке компиляции и упаковки для устройств iOS
Предыстория
LCC Unity SDK публикуется в виде предварительно скомпилированных DLL. Поскольку платформа iOS требует связывания нативных плагинов как статических библиотек (__Internal), а не динамической загрузки (dlopen), перед сборкой приложения iOS необходимо выполнить дополнительные шаги настройки, описанные в этом документе. Между iOS и другими платформами существует фундаментальное различие в механизмах загрузки нативных плагинов; другие платформы (Windows, macOS, Android, Linux) не требуют дополнительных операций.
Этот SDK использует "libwebp" в качестве цели P/Invoke при компиляции в DLL. Встроенный скрипт SDK Editor/RewriteWebpDllImport.cs автоматически переписывает его в "__Internal" при сборках iOS, гарантируя, что IL2CPP генерирует правильные прямые вызовы символов.
Примечание:
При компиляции приложения для устройства iOS сначала переименуйте
Editor/RewriteWebpDllImport.txtв пакете SDK вEditor/RewriteWebpDllImport.cs, чтобы скрипт вступил в силу. Либо напрямую измените суффикс скрипта в пакете SDK и скопируйте его в каталог Assets/Editor/ проекта.
Предварительные условия
Скрипт RewriteWebpDllImport.cs использует библиотеку перезаписи IL Mono.Cecil во время сборки, поэтому сначала необходимо добавить её в проект как зависимость. Есть два способа; выберите любой.
Метод 1: Добавить через Package Manager (рекомендуется)
Откройте строку меню Unity Window → Package Manager, нажмите кнопку + в верхнем левом углу, выберите Add package by name..., введите имя com.unity.nuget.mono-cecil, введите версию 1.11.5, нажмите Add и дождитесь завершения установки в Package Manager, как показано ниже.

Добавление com.unity.nuget.mono-cecil по имени в Package Manager
Метод 2: Вручную отредактируйте manifest.json
Напрямую отредактируйте файл проекта Packages/manifest.json и добавьте строку в раздел dependencies:
{
"dependencies": {
"com.unity.nuget.mono-cecil": "1.11.5"
}
}
После сохранения переключитесь обратно в Unity; редактор автоматически разрешит и установит зависимость.
Рабочий процесс сборки
После завершения предварительной настройки следуйте стандартному рабочему процессу сборки iOS; RewriteWebpDllImport вмешается автоматически во время сборки.
- Переименуйте
Editor/RewriteWebpDllImport.txtвEditor/RewriteWebpDllImport.cs(если ещё не переименован). - В строке меню Unity выберите File → Build Settings, выберите iOS из списка платформ и нажмите Switch Platform.
- Нажмите Build (или Build And Run), выберите выходной каталог и сгенерируйте проект Xcode.
- Во время сборки скрипт автоматически переписывает все записи
DllImportв SDK, нацеленные на"libwebp", в"__Internal". После успешной сборки Console выводит журнал, похожий на:
[RewriteWebpDllImport] Rewrote 77 P/Invoke entries from "libwebp" to "__Internal".
- Откройте сгенерированный проект в Xcode и в разделе Build Phases → Link Binary With Libraries цели подтвердите, что связаны
libwebp.a,libwebpdemux.aиlibsharpyuv.a. - Подключите устройство iOS, подпишите и запустите в Xcode.
Примечание:
Если журнал
[RewriteWebpDllImport]не появляется в Console, это обычно означает, что скрипт не вступил в силу — подтвердите, что суффикс файла изменён с.txtна.csи что зависимость Mono.Cecil установлена правильно.
Устранение неполадок
| Сообщение об ошибке | Причина | Решение |
|---|---|---|
Unable to load DLL 'libwebp' | Скрипт не вступил в силу, и DllImport всё ещё указывает на имя динамической библиотеки | Подтвердите, что RewriteWebpDllImport.txt переименован в .cs, пересоберите и проверьте журнал Console |
Cannot find LCCSDK.dll in staging area | Основная DLL SDK не найдена во время сборки, цель перезаписи отсутствует | Подтвердите, что SDK правильно импортирован в проект и DLL не исключена из iOS через Exclude Platform |
Ошибки компиляции, связанные с Mono.Cecil (не удаётся найти пространство имён Mono.Cecil) | Не установлено или несовпадение версии | Добавьте com.unity.nuget.mono-cecil@1.11.5 согласно разделу «Предварительные условия» и дождитесь повторного разрешения компилятором |
Примечания
- Рекомендуется использовать Unity 2022.3 LTS или выше (включая Unity 6); совместимость с Mono.Cecil и IL2CPP на слишком старых версиях не гарантируется.
- Если нужно запускать на iOS Simulator, подтвердите, что связанная статическая библиотека содержит архитектурный срез
arm64-simulator, иначе симулятор не сможет выполнить связывание. - Вышеуказанная конфигурация влияет только на платформу iOS. Рабочие процессы сборки Windows, macOS, Android и Linux совершенно не затрагиваются, и нет необходимости переименовывать скрипт или добавлять зависимость Mono.Cecil.