如何探索 NSBundle 内容?

Posted

技术标签:

【中文标题】如何探索 NSBundle 内容?【英文标题】:How to explore NSBundle contents? 【发布时间】:2020-05-04 07:01:58 【问题描述】:

我有一个名为 main.jsbundle 的 NSBundle 文件,由 react-native 包打包,我可以使用哪个工具来探索它的内容?我可以看到它里面有缩小的 js 代码,还有文件开头的某种索引。我需要提取 js 代码来调试问题。

【问题讨论】:

【参考方案1】:

NSBundle 是一个完全不同的东西——它是一个原生类,代表了一种封装应用程序和框架的 Apple 格式,允许从原生代码访问和操作它。

您问的是 React Native 包,这是一个相当松散的概念,即单个缩小的 JS 代码文件 + 用于图像和数据的资产文件夹。实际上,您可以使用 uglify-js 等常规工具对 js-bundle 进行分解并尝试对其进行检查。

您也可以使用sourcemaps produced by Metro 和metro-symbolicate 来了解压缩包中的代码如何映射到实际源代码,尽管在不知道手头的问题的情况下我不能推荐任何更具体的东西。 metro-symbolicate 也没有文档,这意味着您必须了解它的来源。

【讨论】:

它与浏览器js包有点不同,因为文件开头有一堆二进制数据。我发现通过strings 管道传输文件可以为我剥离二进制数据 那么你使用的是 RAM 捆绑包吗? 我想我确实这样做了,我记得设置了类似的东西。【参考方案2】:

正如@ivanmoskalev 指出的那样,这可能不一定是 NSBundle。无论如何,通过strings 输出文件几乎只是文件的javascript部分,所以这对我有用。

【讨论】:

以上是关于如何探索 NSBundle 内容?的主要内容,如果未能解决你的问题,请参考以下文章

NSBundle 中的类

IOS开发-UI学习-NSBundle和NSHomeDirectory的区别

是否可以跨 NSBundle 共享图像?

[NSBundle loadNibNamed:owner:] 如何在 Xcode 3.1 中工作?

NSBundle 中预加载内容的 iOS 存储问题以及来自 API 的增量更新

如何卸载 NSBundle?