排毒代码是如何插入到应用程序包中的

Posted

技术标签:

【中文标题】排毒代码是如何插入到应用程序包中的【英文标题】:How is detox code inserted into the app bundle 【发布时间】:2018-09-01 20:19:03 【问题描述】:

我使用 detox 在 react native 上运行 e2e 测试。

artcile 是一位从事排毒工作的人写的

灰盒本质上是使用了一段植入应用程序的代码,它可以帮助我们看到里面发生了什么。

我的问题是,这是怎么发生的?查看docs 用于detox build 的命令是

xcodebuild -project ios/YourProject.xcodeproj -scheme YourProject -sdk iphonesimulator -derivedDataPath ios/build

那里没有专门提到排毒。

此外,文档state here 认为构建命令是可选的,并且

您也可以选择不使用,自行提供编译好的应用。

好吧,我该怎么做?如何注入排毒/确保没有将排毒注入我的应用程序?如果我从我的 CI 服务器下载已编译的应用程序,它不能与 detox 一起使用(不足为奇,因为 detox 代码没有植入应用程序中)。但是如果我使用detox build 命令(它似乎只是运行配置中build 命令指定的任何内容),测试工作。似乎发生了一些新人无法理解的“魔法”。

谢谢。

【问题讨论】:

【参考方案1】:

太神奇了!

嗯,实际上不是。构建步骤完全可选的,并且如文档中所述,Detox 适用于任何有效的应用程序。

为了加载 Detox,我们告诉动态链接器使用 DYLD_INSERT_LIBRARIES 环境变量加载它。所以它只会在你从命令行运行detox test 时加载 Detox。

这在模拟器上很容易,因为它可以访问您的 Mac 的文件系统。一旦我们实现了对在实际硬件设备上进行测试的支持,我们仍将使用该环境变量,但我们必须将其直接注入您的 IPA 文件中。

【讨论】:

这意味着我不需要运行detox build 命令,我应该能够使用 CI 的输出。 CI 给了我一个 xcarchive 文件,其中包含一个 .app 文件(除其他外) - 你能确认 detox 应该与它一起工作吗(它不能开箱即用,所以看来我必须做一些调试,我只是想确定我是否走对了方向)。谢谢! Xcarchive 通常是 arm64 架构,而模拟器是 x86_64。 只要您的 CI 可以使用 x86_64 架构(iphonesimulatoros SDK)构建 .app,就可以与 Detox 一起使用。如果我的回答已经回答了你的问题,请注明。

以上是关于排毒代码是如何插入到应用程序包中的的主要内容,如果未能解决你的问题,请参考以下文章

排毒:如何测试多行 TextInput

如何在 SSIS 包中使用变量和 SQL 代码?

如何从包中的类创建一个Intent到不同包中的类?

排毒测试 - 如何禁用排毒信息记录到标准输出

排毒测试在运行测试之前挂起并重新加载应用程序几次,如何调试?

如何获取存储在应用程序包中的 javascript 文件 (JS) 路径到文档目录中的 html 文件