Fastlane:我怎样才能“increment_build_number”只有一个目标?

Posted

技术标签:

【中文标题】Fastlane:我怎样才能“increment_build_number”只有一个目标?【英文标题】:Fastlane: How can I "increment_build_number" of one target only? 【发布时间】:2015-08-05 15:52:36 【问题描述】:

我的 Xcode 项目中有两个目标:

    MyAwesomeApp(构建 1) MyGreatApp(构建 1)

increment_build_number 操作后,他们都转向:

    MyAwesomeApp(构建 2) MyGreatApp(构建 2)

但我希望它只应用于一个目标。所以当我再次执行这样的事情时: increment_builder_number(scheme: "MyAwesomeAppScheme")

他们转向:

    MyAwesomeApp(构建 3) MyGreatApp(内部版本 2)

有没有办法实现它?谢谢!

【问题讨论】:

【参考方案1】:

这是一个plug-in,用于增加内部版本号。

这是它在 Fastfile 中的样子:

increment_build_number_in_plist(        
   target:"MyAwesomeApp"
)

【讨论】:

别忘了现在不支持Faslane.swift的插件:(【参考方案2】:

我可以轻松地将此选项添加到fastlane 操作,但需要agvtool 等效项才能执行此操作。 increment_build_number 步骤主要是 agvtool 的包装。

您可以在 Apple 文档中找到更多信息:https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/agvtool.1.html

【讨论】:

请看@NSCabezon 的建议【参考方案3】:

那么将您要碰撞的 .plist 文件指定为参数呢?类似于:

plist_path: "./Info.plist"

【讨论】:

但是这些动作没有名为 plist_path 的参数,对吧? github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/…【参考方案4】:

我创建了自定义通道,通过使用“xcodeproj”可以为特定目标名称设置版本和内部版本号。

# Sets the "VERSION" and "BUILD" number for a target
#
# @param args [Hash] Key value arguments. All the values are Strings. List: 
#   - target_name: The name of the target (REQUIRED)
#   - version: The version number to be used (REQUIRED)
#   - build: The build number to be used (REQUIRED)
#
desc "Sets the \"VERSION\" and \"BUILD\" number for a target"
lane :set_version_build_number do |args|
    puts("\"set_version_build_number\" lane with ARGUMENTS: #args")

    target_name = args[:target_name]
    version = args[:version]
    build = args[:build]

    raise(StandardError, "Invalid ARGUMENTS for: \"set_version_build_number\" LANE") unless (
        target_name != nil &&
        version != nil &&
        build != nil
    )

    puts("Variables:")
    puts("\ttarget_name: #target_name")
    puts("\tversion: #version")
    puts("\tbuild: #build")
    
    project_url = find_xcode_project()
    raise(StandardError, "Invalid Xcode project for: \"set_version_build_number\" LANE") unless project_url != nil
    project = Xcodeproj::Project.open(project_url)

    xc_target = project.targets.find  |target| target.name == target_name 
    raise(StandardError, "Invalid target for: \"set_version_build_number\" LANE") unless xc_target != nil

    xc_target.build_configurations.each  |build_configuration| 
        build_configuration.build_settings["MARKETING_VERSION"] = version
        build_configuration.build_settings["CURRENT_PROJECT_VERSION"] = build
    

    project.save()
end

地点:

# Finds the location for an Xcode project within the current directory and all his parents
#
# @return [String] Full path to the Xcode project or nil if unsuccess
#
def find_xcode_project ()
    absolute_dir_path = Dir.getwd
    loop do
        entries = Dir.entries(absolute_dir_path)
        index = entries.find_index |entry| entry.include?(".xcodeproj") 
        if index != nil
          return "#absolute_dir_path/#entries[index]"
        end
  
        absolute_dir_path = File.dirname(absolute_dir_path)
        if absolute_dir_path == nil || absolute_dir_path == "/"
          break
        end
    end
  
    return nil
end

使用方便:

bundle exec fastlane set_version_build_number target_name:TargetApp version:2.0 build:3

当然不要忘记将这个添加到 Fastlane 文件中:

require "xcodeproj" 

并将其放入 Gemfile

gem "xcodeproj"

【讨论】:

谢谢。我已经修改并更新了它以增加现有的内部版本号,而不必将其传入。还删除了营销版本号的设置。任何有兴趣的人都在这里:gist.github.com/gdavis/6b594e98ec99ea9ee51d937264d80382

以上是关于Fastlane:我怎样才能“increment_build_number”只有一个目标?的主要内容,如果未能解决你的问题,请参考以下文章

在当前目录中找不到 fastlane

MySQL 添加序号列

运行命令 fastlane init 时,Fastlane 永远卡住

为什么fastlane工作目录不同于我设置的

如何在模拟器中使用 fastlane 运行仪器测试?

Fastlane 不断警告我正在使用 Ruby 2.2.4