Fastlane increment_build_number插件agvtool报错:无法找到$(SRCROOT)/Info.plist
解决Fastlane increment_build_number调用agvtool时找不到$(SRCROOT)/Info.plist的问题
我之前在多人协作的项目里也碰到过一模一样的坑!当用Fastlane的increment_build_number工具自动升级版本号时,agvtool突然抛出错误:
正在更新Info.plist中的CFBundleVersion... $(SRCROOT)/Info.plist 无法找到"$(SRCROOT)/Info.plist"
问题根源
agvtool是个独立的命令行工具,它根本不认识Xcode项目里的$(SRCROOT)这类环境变量——它会把这个变量当成路径的一部分直接去查找,自然找不到对应的文件。
关于“改绝对路径”方案的问题
确实有人会想到把Xcode设置里的Info.plist路径改成绝对路径,但这个方案在多人协作场景下完全行不通:每个开发者的本地项目路径大概率不一样,把绝对路径提交到Git仓库只会导致其他同事的项目报错,反而徒增协作成本。
更靠谱的替代方案
方案1:让Fastlane直接操作Xcode项目(推荐)
绕过agvtool的路径解析问题,让Fastlane直接修改Xcode项目文件来更新build number。在你的Fastfile里,给increment_build_number指定xcodeproj参数即可:
lane :bump_build do # 获取当前最新的build号 current_build = get_build_number(xcodeproj: "./YourApp.xcodeproj").to_i # 递增build号 increment_build_number( xcodeproj: "./YourApp.xcodeproj", build_number: current_build + 1 ) end
这样Fastlane会直接修改Xcode项目文件里的build配置,完全不需要调用agvtool,自然就避开了路径变量解析的坑。
方案2:动态替换路径后调用agvtool
如果你坚持要用agvtool的话,可以在Fastlane里先动态获取项目的实际根路径,把$(SRCROOT)替换成真实路径再执行命令:
lane :bump_with_agv do # 获取项目根路径 src_root = File.expand_path(".") current_build = get_build_number(xcodeproj: "./YourApp.xcodeproj").to_i # 调用agvtool时指定正确路径 sh "agvtool new-version -all #{current_build + 1}", chdir: src_root end
内容的提问来源于stack exchange,提问作者Alex Andrews
相关产品推荐
相关产品推荐

