Добавление swift framework извлечено из IPA
Я пытаюсь запустить приложение IOS, созданное другим разработчиком, использующим cocoapod из частного репозитория, к которому у меня нет доступа. Мне удалось извлечь пакет.framework из IPA и добавить его в проект xcode, но он не распознается (я получаю "Нет такого модуля").
Можно ли сделать то, что я пытаюсь достичь?
Пока что я попробовал:
- построить его в релизе, как я предполагаю, что фреймворк в IPA находится в выпуске
- добавить.framework как встроенный двоичный файл
- добавьте.framework в качестве связанных рамок и библиотек
- скопируйте.framework в ~/System/Library/Framework
- обновить путь поиска фреймворка, включая $(SRCROOT), рекурсивные, жестко заданные пути и т. д.
- измените местоположение.framework на "Относительно продуктов сборки"
Спасибо!
1 ответ
Было не так легко получить фреймворки, используемые в проекте, из файла ipa.
При первом запуске приложения, а также при архивировании приложения все связанные файлы.frameworks преобразуются в.dylib, который является динамической библиотекой.
Что такое статическая библиотека - это блок кода, связанный во время компиляции, который не изменяется.
Что такое динамическая библиотека - блок кода и / или ресурсов, связанных во время выполнения, которые могут измениться.
Каркас - Каркас - это иерархический каталог, который заключает в один пакет динамическую библиотеку, файлы заголовков и ресурсы, такие как раскадровки, файлы изображений и локализованные строки. Приложения, использующие фреймворки, должны встраивать фреймворк в пакет приложения.
Динамическая библиотека
Динамический файл lib находится в папке фреймворка.
Ниже приведено описание из документации Apple
Динамические библиотеки за пределами пакета инфраструктуры, которые обычно имеют расширение файла.dylib, не поддерживаются в iOS, watchOS или tvOS, за исключением системных библиотек Swift, предоставляемых Xcode.
Ссылка: Документация
Таким образом, вы не можете просто скопировать.dylib в пакет xcode и просто использовать его. Здесь тоже есть какая-то безопасность.
Еще один подход
Можно декомпилировать исходный код из файлов.ipa. Вы получите представление по ссылкам ниже.
Кажется, что когда приложение архивируется для распространения, Headers
а также Modules
папки удаляются из пакета.framework.
Header
папка содержит заголовки.h для Objective-C и Modules
Папка содержит эквивалентные файлы.swiftmodule для Swift.
Без этих файлов у вас нет общедоступного API-интерфейса, который можно использовать для бинарного фреймворка, поэтому, к сожалению, это делает фреймворки непригодными без реинжиниринга.