5

我正在尝试运行由另一个开发人员创建的 IOS 应用程序,该应用程序使用我无法访问的私有存储库中的 cocoapod。我设法从 IPA 中提取 .framework 包并将其添加到 xcode 项目中,但它未被识别(我得到“没有这样的模块”)。

有可能做我想要实现的目标吗?

到目前为止,我已经尝试过:

  • 在发布中构建它,因为我猜 IPA 中的框架正在发布中
  • 将 .framework 添加为嵌入式二进制文件
  • 将 .framework 添加为链接框架和库
  • 将 .framework 复制到 ~/System/Library/Framework
  • 更新框架搜索路径,包括 $(SRCROOT)、递归、硬编码路径等。
  • 将 .framework 位置更改为“相对于构建产品”

谢谢!

4

2 回答 2

3

从 ipa 文件中获取项目中使用的框架并不容易。

每当应用程序第一次运行时,以及归档应用程序时,所有链接的 .frameworks 都将转换为动态库的 .dylib。

什么是静态库- 在编译时链接的代码单元,它不会改变。

什么是动态库- 在运行时链接的代码单元和/或资产可能会发生变化。

框架- 框架是一个分层目录,它将动态库、头文件和资源(例如情节提要、图像文件和本地化字符串)封装到单个包中。使用框架的应用程序需要将框架嵌入应用程序的包中。

动态库

动态库文件只是驻留在框架文件夹中。

以下是来自苹果文档的描述

除了 Xcode 提供的系统 Swift 库外,iOS、watchOS 或 tvOS 不支持框架包之外的动态库(通常具有文件扩展名 .dylib)。

参考:文档

因此,您不能简单地将 .dylib 复制到 xcode 包并直接使用它。也有某种安全性。

另一种方法

可以从 .ipa 文件中反编译源代码。您将从以下链接中获得想法。

关于反编译ipa文件的SO问题

反编译可能性

于 2017-10-31T10:57:24.617 回答
0

似乎当一个应用程序被归档以进行分发时,HeadersModules文件夹从 .framework 包中删除。

Header文件夹包含用于 Objective-C 的 .h 标头,该Modules文件夹包含用于 Swift 的 .swiftmodule 等效文件。

如果没有这些文件,您就没有公共 API 可用于框架二进制文件,因此不幸的是,如果没有逆向工程,这会使框架无法使用。

于 2019-06-24T14:52:01.247 回答