代码之家  ›  专栏  ›  技术社区  ›  Rodrigo Recio

Fastlane:如何才能仅对一个目标进行“increment_build_number”?

  •  13
  • Rodrigo Recio  · 技术社区  · 9 年前

    我的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)<--此内部版本号应保持不变

    有办法实现吗?谢谢

    4 回复  |  直到 9 年前
        1
  •  8
  •   Francois Nadeau    5 年前

    这里有一个 plug-in 以增加内部版本号。

    这是Fastfile中的样子:

    increment_build_number_in_plist(        
       target:"MyAwesomeApp"
    )
    
        2
  •  5
  •   KrauseFx    9 年前

    我可以很容易地将此选项添加到 fastlane 行动,但需要 agvtool 相当于这样做。这个 increment_build_number 步骤主要是包装 农业工具 .

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

        3
  •  5
  •   Dharman Sebastian    3 年前

    我已经创建了我的自定义通道,通过使用“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"
    
        4
  •  2
  •   NSCabezon    9 年前

    那么,如何将您要加载的.plist文件指定为参数??类似于:

    plist_path: "./Info.plist"