使用Fastlane自动递增Google Play版本号时遇类型转换错误
Fastlane Google Play版本号自动递增报错:no implicit conversion of Symbol into Integer
问题场景
使用Fastlane实现Google Play版本号自动递增时,执行Fastfile触发类型转换错误,错误出现在第20行的版本码获取逻辑。
错误信息
Error in your Fastfile at line 20 18: #end 19: => 20: current_version_code = google_play_info[:version_codes].max.to_i 21: 22: new_version_code = current_version_code + 1 no implicit conversion of Symbol into Integer
关联Fastfile代码
default_platform(:android) platform :android do desc "Deploy a new version to the Google Play internal track" lane :internal do # Fetching the current version code from Google Play google_play_info = google_play_track_version_codes( track: "internal" ) # Debug output to inspect google_play_info UI.message("Google Play Info: #{google_play_info}") #if google_play_info[:version_codes].nil? || google_play_info[:version_codes].empty? # UI.user_error!("Could not fetch version codes from Google Play") #end current_version_code = google_play_info[:version_codes].max.to_i new_version_code = current_version_code + 1 # Define a helper method to increment version code in build.gradle def increment_version_code_in_gradle(new_version_code) gradle_file_path = "./app/build.gradle" gradle_content = File.read(gradle_file_path) updated_content = gradle_content.gsub(/versionCode\s+\d+/) do |match| "versionCode #{new_version_code}" end File.write(gradle_file_path, updated_content) end # Increment the version code in build.gradle increment_version_code_in_gradle(new_version_code) # Build the AAB (Android App Bundle) gradle( task: "bundle", build_type: "Release" ) # Upload the AAB to the internal track on Google Play upload_to_play_store( track: "internal", aab: "./app/build/outputs/bundle/release/app-release.aab", ) end end
问题原因
google_play_track_version_codes action的返回值是数组类型,每个元素对应一个track的哈希结构(包含track和version_codes等字段)。你直接用哈希的键值访问方式google_play_info[:version_codes]操作数组,而数组仅支持整数索引,因此触发“Symbol无法转换为Integer”的错误。
修复方案
修改版本码获取逻辑,先从返回数组中定位到目标track,再提取版本码:
# Fetching the current version code from Google Play google_play_info = google_play_track_version_codes( track: "internal" ) # Debug output to inspect google_play_info UI.message("Google Play Info: #{google_play_info}") # 从返回数组中找到internal track的信息 target_track = google_play_info.find { |track| track[:track] == "internal" } # 检查track是否存在,避免空值错误 if target_track.nil? || target_track[:version_codes].nil? || target_track[:version_codes].empty? UI.user_error!("Could not fetch valid version codes from Google Play internal track") end # 获取当前最大版本码 current_version_code = target_track[:version_codes].max.to_i new_version_code = current_version_code + 1
替换原Fastfile中对应代码段即可解决问题。
内容的提问来源于stack exchange,提问作者Shahid Mehmood
相关产品推荐
相关产品推荐

