Как вручную включить динамическую библиотеку в приложение для 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

Другие вопросы по тегам