Добавление быстрой структуры, извлеченной из IPA

Я пытаюсь запустить приложение IOS, созданное другим разработчиком, использующим план-кокао из частного репозитория, к которому у меня нет доступа. Мне удалось извлечь пакет .framework из IPA и добавить его в проект xcode, но он не распознается (я получаю «Нет такого модуля»).

Можно ли сделать то, чего я пытаюсь достичь?

До сих пор, что я пробовал:

  • создайте его в релизе, так как я предполагаю, что фреймворк в IPA находится в релизе
  • добавить .framework как встроенный двоичный файл
  • добавьте .framework как Linked Framework и библиотеки
  • скопируйте .framework в ~/System/Library/Framework
  • обновить путь поиска фреймворков, включая $(SRCROOT), рекурсивные, жестко заданные пути и т. д.
  • измените местоположение .framework на «Относительно продуктов сборки»

Спасибо!


person Ivo    schedule 24.10.2017    source источник
comment
Итак, как вы получили файл .framework? Это будет файл .dylib..   -  person Saranjith    schedule 31.10.2017
comment
@ivowiblo, вы можете добавить в список вопросов файлы, которые у вас есть?   -  person sage444    schedule 31.10.2017


Ответы (2)


Было не так просто получить используемые в проекте фреймворки из файла ipa.

Всякий раз, когда приложение запускается в первый раз, а также когда вы архивируете свое приложение, все связанные .frameworks будут преобразованы в .dylib, которые являются динамическими библиотеками.

Что такое статическая библиотека? — единица кода, связанная во время компиляции, которая не изменяется.

Что такое динамическая библиотека? — единица кода и/или ресурсы, связанные во время выполнения, которые могут изменяться.

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

Динамическая библиотека

Динамический файл lib просто находится внутри папки фреймворка.

Ниже приведено описание из документации Apple.

Динамические библиотеки вне пакета фреймворка, которые обычно имеют расширение файла .dylib, не поддерживаются в iOS, watchOS или tvOS, за исключением системных библиотек Swift, предоставляемых Xcode.

Ссылка: документация

Таким образом, вы не можете просто скопировать пакет .dylib в xcode и просто использовать его. Какая-то безопасность тоже есть.

Другой подход

Можно декомпилировать исходный код из файлов .ipa. Вы получите представление по ссылкам ниже.

SO Вопрос о декомпиляции файла ipa

Возможность декомпиляции

person Saranjith    schedule 31.10.2017
comment
Мне любопытно. Могу ли я использовать dlopen на iOS? - person sage444; 31.10.2017

Похоже, что когда приложение архивируется для распространения, папки Headers и Modules удаляются из пакета .framework.

Папка Header содержит заголовки .h для Objective-C, а папка Modules содержит эквивалентные файлы .swiftmodule для Swift.

Без этих файлов у вас нет общедоступного API, который можно было бы использовать для двоичного кода фреймворка, поэтому, к сожалению, это делает фреймворки непригодными для использования без обратного проектирования.

person Jonathan Ellis    schedule 24.06.2019