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