Допускается использование dlopen внутри статической библиотеки в iOS
Я работаю с толстой статической библиотекой, которая использует dlopen() для загрузки файлов внутренних модулей (.so) внутри статической библиотеки. Разработчики утверждают, что в stackru dlopen() является частным API.
В этом случае нормально использовать dlopen() или являться частным API, его не следует использовать в пользовательских библиотеках независимо от характера библиотеки, то есть статического / динамического.
Если я не могу использовать dlopen(), то кто-то может указать на любой ресурс для альтернативного способа выполнить ту же задачу.
Примечание: это касается библиотеки baresip BSD. ( http://www.creytiv.com/)
Обновление: библиотека сначала пытается статически загрузить все настроенные модули, а если происходит сбой, то пытается динамически загрузить их с помощью dlopen(). поэтому удаление кода динамической загрузки решит мою проблему.
2 ответа
С помощью dlopen
с буквальными параметрами всегда было в порядке.
dlopen задокументирован, поэтому он не является частным API. Просто введите man dlopen
в терминале или см. Руководство по программированию расширений приложений> Обработка общих сценариев или Руководство по использованию динамической библиотеки> 1, 2.
Если вы попытаетесь использовать dlopen
код, подписанный вами, но не включенный в проверенное приложение, нарушает Принципы обзора приложений 2.5.2:
2.5.2 Приложения должны быть автономными в своих пакетах и не могут читать или записывать данные за пределами указанной области контейнера, а также не могут загружать, устанавливать или выполнять код, включая другие приложения.
и вы можете получить сообщение, подобное этому:
Ваше приложение, расширение и / или связанная инфраструктура, по-видимому, содержат код, специально разработанный с возможностью изменять поведение или функциональность вашего приложения после утверждения обзора приложения, что не соответствует Рекомендациям по проверке App Store 2.5.2 и разделу 3.3.2 из Лицензионное соглашение Apple Developer Program.
Этот код в сочетании с удаленным ресурсом может способствовать существенным изменениям в поведении вашего приложения по сравнению с тем, которое было первоначально проверено для App Store. Хотя вы, возможно, не используете эту функцию в настоящее время, у нее есть потенциал для загрузки частных платформ, частных методов и включения будущих изменений функций. Это включает в себя любой код, который передает произвольные параметры динамическим методам, таким как dlopen (), dlsym (), RespondsToSelector:, executeSelector:, method_exchangeImplementations(), и запускает удаленные сценарии для изменения поведения приложения и / или вызова SPI на основе содержимое скачанного скрипта. Даже если удаленный ресурс не является преднамеренно вредоносным, его можно легко перехватить с помощью атаки Man In The Middle (MiTM), которая может стать серьезной уязвимостью для безопасности пользователей вашего приложения.