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

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

  1. MyAwesomeApp(构建 1)
  2. MyGreatApp(构建 1)

increment_build_number 操作后,他们都转向:

  1. MyAwesomeApp(构建 2)
  2. MyGreatApp(构建 2)

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

他们转向:

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

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

【问题讨论】:

    标签: ios fastlane


    【解决方案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"
    

    【讨论】:

    【解决方案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"
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多