Как правильно подписать C dylib для загрузки через dlopen в iOS

#ios #code-signing #dylib

#iOS #подписание кода #dylib

Вопрос:

Мы интегрируем наши языковые инструменты в мобильные платформы.

Таким образом, существуют библиотеки, зависящие от языка, которые загружаются по запросу пользователя — в настоящее время английский, французский, испанский или греческий.

Эти библиотеки слишком велики, чтобы быть связанными статически.

В настоящее время мы можем загружать эти библиотеки с помощью вызовов dlopen и dlsym в linux.

Я видел, что мы можем использовать эти вызовы, начиная с iOS v8.

Как сообщила служба поддержки разработчиков Apple, «… нет общего запрета на использование dlopen и друзей».

После компиляции наших библиотек (с использованием CMake и соответствующего набора инструментов iOS) они были подписаны тем же сертификатом и идентификатором, что и приложение, с использованием

 codesign --deep --force --sign "78037F819B5AA1522177B06DA8E7C5343DDBC0CF" --identifier=fr.teamname.libtext_fr ./libtext_fr.dylib
 

Однако, когда приложение (запущенное на iPad с iOS v14) пытается загрузить файл, возникает ошибка, и мы получаем следующую причину :

 code signature invalid (errno=1) sliceOffset=0x00000000, codeBlobOffset=0x0205D0F0, codeBlobSize=0x000453E0
 

Обратите внимание, что в настоящее время мы используем бесплатный Apple Id и еще не присоединились к программе разработчика.

Я провел много поисков, но пока не нашел того, чего не хватает.

В каком правильном направлении двигаться сейчас?

Ответ №1:

После долгих исследований я открыл запрос на форуме разработчиков Apple.

Ответ на этот вопрос можно найти здесь : https://developer.apple.com/forums/thread/670761