Встраивание .dylib в фреймворк для iOS

Я пытался отправить приложение Swift с динамической библиотекой Obj-C (.dylib), которая постоянно отклоняется магазином приложений iOS с такими сообщениями об ошибках, как

Недопустимая поддержка Swift - файлы libswiftDarwin.dylib, libswiftDispatch.dylib, libswiftCoreGraphics.dylib, libswiftUIKit.dylib, libswiftCore.dylib, libswiftFoundation.dylib, libswiftQuartzCore.dylib, libswiftCore.dylib, libswiftCore.dylib, libswiftCore.dylib, libswiftCore.dylibjective, libswiftCore.dylib, libswiftCore.dylib не ожидаются в ожидаемом местоположении. // Фреймворки. Переместите файл в ожидаемое место, перестройте приложение, используя текущую общедоступную (GM) версию Xcode, и повторно отправьте его.

Из документации Apple по адресу https://developer.apple.com/library/archive/technotes/tn2435/_index.html#//apple_ref/doc/uid/DTS40017543-CH1-PROJ_CONFIG-APPS_WITH_DEPENDENCIES_BETRESWORKS_BET. strong> может означать, что ваше приложение встраивает динамическую библиотеку, которая не упакована как платформа. Динамические библиотеки вне пакета платформы, которые обычно имеют расширение файла .dylib, не поддерживаются в iOS, watchOS или tvOS, за исключением системные библиотеки Swift, предоставляемые Xcode. "

Итак, следующим шагом было встраивание динамической библиотеки (в качестве подпроекта) в проект Cocoa Touch Framework. Как только это было настроено, несмотря на то, что фреймворк был построен нормально, я застрял на ошибках «символ не найден» для импортированных классов dylib.

Я хотел бы знать шаги, необходимые для достижения этой структуры проекта, или возможно ли это даже на iOS.


person Adamski    schedule 17.12.2018    source источник
comment
Убедитесь, что в проекте приложения есть зависимость от динамической библиотеки. Я думаю, вы можете проверить в XCode команду ссылки, и она должна содержать --framework YouFramework.   -  person smaryus    schedule 19.12.2018
comment
какие-нибудь обновления по этому поводу? В настоящее время я сталкиваюсь с той же проблемой при преобразовании dylib - ›framework. В проекте Cocoa Touch Framework в xcode dylib связан (в разделе Linked Libs and Frameworks), но когда я проверяю размер Framework в конце, который построен, он имеет только 50 КБ, хотя dylib составляет около 4 МБ.   -  person peco    schedule 08.04.2020


Ответы (1)


Мне удалось отправить приложение с .dylib, сначала создав фреймворк. Сначала я попробовал метод, описанный в документации Apple, но получил ошибки при отправке в магазин (недопустимый пакет. Пакет на xyz.framework содержит запрещенный файл Frameworks)

Я использовал липо, чтобы вручную упаковать свой .dylib в фреймворк.

$ lipo -create mylib.dylib -output mylib

Теперь у вас есть двоичный файл с именем mylib. Создайте папку с именем mylib.framework и поместите в нее двоичный файл. Затем добавьте Info.plist (вы можете просто скопировать и изменить его из существующего фреймворка). В Info.plist заполните поля для своего фреймворка. Главный, который нужно обновить или добавить, - это Executable, который должен быть именем этого двоичного файла.

У меня была еще одна проблема, когда другой фреймворк, который я использовал, ссылался на мой исходный .dylib, который исчез и теперь находится внутри фреймворка. Чтобы исправить это, я использовал install_name_tool, чтобы изменить другой фреймворк для поиска моего нового фреймворка.

$ cd OtherLib.framework 
$ install_name_tool -change @rpath/mylib.dylib @rpath/mylib.framework/mylib OtherLib

Вы можете узнать больше об этом инструменте в этом хорошем сообщении в блоге: https://medium.com/@donblas/fun-with-rpath-otool-and-install-name-tool-e3e41ae86172

person Morty    schedule 17.07.2020