Ruby 魔法:用 Monkey Patching 解决 Fastlane Gym 的清理困境
在 iOS 开发中,自动化构建和打包流程是提高效率的关键。Fastlane 的 Gym 工具为我们提供了强大的自动化能力,但有时也会带来一些令人头疼的问题。今天,我们就来探讨一个我遇到的 Gym 打包问题,并分享一个巧妙的解决方案。
问题描述
在使用 Fastlane 的 Gym 工具进行批量 iOS 打包时,我们可能会遇到一个棘手的问题。特别是当我们将 Gym 的 clean
参数设置为 true
时,可能会导致构建过程失败。
在执行打包命令时,Gym 会运行类似这样的命令:
1 | $ /usr/bin/xcrun \ |
问题出现在这里:当 clean
参数设置为 true
时,Gym 会在构建过程中清理临时文件和目录。这可能导致 exportOptionsPlist
指定的文件路径被删除,从而引发 “文件或目录不存在”的错误,最终导致整个打包过程失败。
更具体地说,问题的根源在于:
- Gym 使用系统的临时目录来存储 exportOptionsPlist 文件。
- 当
clean
参数为true
时,这些临时文件可能在需要使用之前就被清理掉了。 - Gym 没有提供直接的方法让我们自定义这个文件的存储路径。
这个问题特别棘手,因为它只在特定配置下出现(即 clean: true
),而这个配置在某些情况下是必要的,比如为了确保每次构建都是从一个干净的状态开始。