Как вручную включить динамическую библиотеку в приложение для iOS
У меня есть приложение для iOS (не с xcode), и мне нужно включить в него динамическую библиотеку. У меня есть эта библиотека на моем компьютере:
\webrtc
\WebRTC.framework
\Headers
\*.h
\Modules
\module.modulemap
\WebRTC
\Info.plist
и я разверну эти файлы внутри моего приложения следующим образом:
ALLiveVideoChatClient.app
\Frameworks
\WebRTC.framework
\Headers
\*.h
\Modules
\module.modulemap
\WebRTC
\Info.plist
когда я делаю
otool -L ALLiveVideoChatClient.app/ALLiveVideoChatClient
это верни мне
@rpath/WebRTC.framework/WebRTC (compatibility version 0.0.0, current version 0.0.0)
и когда я пытаюсь запустить свое приложение, я получаю сообщение об ошибке:
Тип исключения: EXC_CRASH (SIGABRT) Коды исключений: 0x0000000000000000, 0x0000000000000000 Примечание об исключении: EXC_CORPSE_NOTIFY Описание завершения: DYLD, библиотека не загружена: @rpath/WebRTC.framework/WebRTC | Ссылка на: /var/containers/Bundle/Application/A2C3A7DA-D35E-4649-AEA0-9AB518E48971/ALLiveVideoChatClient.app/ALLiveVideoChatClient | Причина: изображение не найдено
поэтому я проверяю значение @rpath делая
otool -l ALLiveVideoChatClient.app/ALLiveVideoChatClient
это возвращает меня
cmd LC_RPATH
cmdsize 32
path $ORIGIN (offset 12)
Я не уверен, что значит $ORIGIN
но шов это точка ALLiveVideoChatClient.app
поэтому я обновляю @rpath так, чтобы он указывал на $ORIGIN/Frameworks
добавление -rpath $ORIGIN/Frameworks
на компоновщик ( http://www.manpagez.com/man/1/ld/), но я все еще получаю изображение ошибки не найден
Что я сделал не так? Какие шаги нужно вручную добавить (без xcode) динамической библиотеки в приложение iOS?
2 ответа
WebRTC.framework - это встроенный фреймворк, и вам нужно встроить его в свое приложение. Если нет, вы получите вышеупомянутую ошибку.
Чтобы встроить, перейдите в настройки сборки. Вы найдете раздел "Вставить рамки". Нажмите на значок +. Он покажет вам список фреймворков, которые вы включили в ваше приложение, выберите фреймворк WebRTC. Подробнее здесь Apple TechNote - Встраивание фреймворков в приложение
С другой стороны, я нахожу решение Google об удалении статической целевой библиотеки из WebRTC абсурдом. Мы изменили build.gn(s) для генерации статической библиотеки и ее использования. Если вам нужно, я могу поделиться этим.
Поскольку WebRTC _dynamic framework
вы можете встроить его [Xcode v11] [Xcode pre v11] с помощью Xcode