class Fastlane::Actions::CreateIpaFlavorsAction
Public Class Methods
available_options()
click to toggle source
# File lib/fastlane/plugin/ios_flavors/actions/create_ipa_flavors.rb, line 37 def self.available_options [ FastlaneCore::ConfigItem.new(key: :ipa, env_name: "IOS_FLAVORS_IPA", description: "The .ipa file to use as a basis for creating your flavors. Can be omitted if using `gym`", optional: true, type: String), FastlaneCore::ConfigItem.new(key: :flavors, env_name: "IOS_FLAVORS_DIRECTORY", description: "The directory containing .plist files to use to create your flavors", default_value: "fastlane/flavors", optional: true, type: String), FastlaneCore::ConfigItem.new(key: :output_directory, env_name: "IOS_FLAVORS_OUTPUT", description: "The output flavors directory", default_value: "fastlane/build_output/flavors", optional: true, type: String), FastlaneCore::ConfigItem.new(key: :target_plist, env_name: "IOS_FLAVORS_TARGET_PLIST", description: "The name of the .plist file to overwrite with your flavor .plist", default_value: "Info.plist", optional: true, type: String), FastlaneCore::ConfigItem.new(key: :signing_identity, env_name: "IOS_FLAVORS_SIGNING_IDENTITY", description: "The signing identity to use for signing flavors, e.g. 'Apple Distribution: Gem Technologies Limited (XXXXXXXXXXX)'", optional: false, type: String), FastlaneCore::ConfigItem.new(key: :provisioning_profile, env_name: "IOS_FLAVORS_PROVISIONING_PROFILE", description: "The provisioning profile to use for signing flavors. Can be omitted if using `sigh`, or will automatically attempt to detect via the passed in .ipa file", optional: true, type: String), ] end
create_flavor_ipa(ipa:, plist:, target_plist:)
click to toggle source
# File lib/fastlane/plugin/ios_flavors/actions/create_ipa_flavors.rb, line 128 def self.create_flavor_ipa(ipa:, plist:, target_plist:) output_directory = lane_context[SharedValues::IOS_FLAVORS_IPA_OUTPUT] signing_identity = lane_context[SharedValues::IOS_FLAVORS_SIGNING_IDENTITY] provisioning_profile = lane_context[SharedValues::IOS_FLAVORS_PROVISIONING_PROFILE] expanded = { plist: File.expand_path(plist) } output_filename = File.basename(plist, '.plist') output_ipa = "#{output_directory}/#{output_filename}.ipa" UI.header "Flavor: #{output_filename}" UI.message "Copying #{ipa} to #{output_ipa}" FileUtils.cp_r(ipa, output_ipa, remove_destination: true) UI.message "Replacing #{target_plist} with #{plist}" other_action.act( archive_path: output_ipa, replace_files: { target_plist => expanded[:plist] } ) UI.important "Resigning IPA: #{output_ipa}" UI.important "Certificate: #{signing_identity}" UI.important "Provisioning Profile: #{provisioning_profile}" other_action.resign(ipa: output_ipa, signing_identity: signing_identity, provisioning_profile: provisioning_profile) end
create_flavors_from(ipa:, target_plist:)
click to toggle source
# File lib/fastlane/plugin/ios_flavors/actions/create_ipa_flavors.rb, line 117 def self.create_flavors_from(ipa:, target_plist:) input_directory = lane_context[SharedValues::IOS_FLAVORS_IPA_INPUT] output_directory = lane_context[SharedValues::IOS_FLAVORS_IPA_OUTPUT] FileUtils.mkdir_p(output_directory) Dir["#{input_directory}/*.plist"].each do |flavor| self.create_flavor_ipa(ipa: ipa, plist: flavor, target_plist: target_plist) end end
description()
click to toggle source
# File lib/fastlane/plugin/ios_flavors/actions/create_ipa_flavors.rb, line 20 def self.description "Create multiple build flavors of an iOS .ipa file using a directory of .plist files" end
is_supported?(platform)
click to toggle source
# File lib/fastlane/plugin/ios_flavors/actions/create_ipa_flavors.rb, line 80 def self.is_supported?(platform) [:ios].include?(platform) end
output()
click to toggle source
# File lib/fastlane/plugin/ios_flavors/actions/create_ipa_flavors.rb, line 28 def self.output [ ['IOS_FLAVORS_IPA_INPUT', 'The input .ipa file'], ['IOS_FLAVORS_IPA_OUTPUT', 'The output directory containing flavors'], ['IOS_FLAVORS_SIGNING_IDENTITY', 'The signing identity used to sign flavors'], ['IOS_FLAVORS_PROVISIONING_PROFILE', 'The provisioning profile used to sign flavors'] ] end
parse_params(params)
click to toggle source
# File lib/fastlane/plugin/ios_flavors/actions/create_ipa_flavors.rb, line 84 def self.parse_params(params) ipa = params[:ipa] || lane_context[SharedValues::IPA_OUTPUT_PATH] flavors = params[:flavors] || 'flavors' output_directory = params[:output_directory] || 'build_output/flavors' target_plist = params[:target_plist] || 'Info.plist' signing_identity = params[:signing_identity] provisioning_profile = params[:provisioning_profile] || Helper::IOSFlavorsHelper.locate_installed_provisioning_profile_for_ipa(params[:ipa]) || lane_context[SharedValues::SIGH_PROFILE_PATH] raise "You must supply an :ipa (can be omitted if using 'ipa')" unless ipa raise 'You must supply a :flavors directory of .plist files.' unless flavors raise 'You must supply a :target_plist to be replaced in the :ipa.' unless target_plist raise 'You must supply a :signing_identity' unless signing_identity raise "Could not locate a :provisioning_profile for the :ipa provided." unless provisioning_profile raise "#{ipa} not found." unless File.file?(ipa) raise "#{flavors} not found." unless Dir.exist?(flavors) # TODO: Add check for signing_identity validity? raise "#{provisioning_profile} not found." unless File.file?(provisioning_profile) lane_context[SharedValues::IOS_FLAVORS_IPA_INPUT] = File.expand_path(flavors) lane_context[SharedValues::IOS_FLAVORS_IPA_OUTPUT] = File.expand_path(output_directory) lane_context[SharedValues::IOS_FLAVORS_SIGNING_IDENTITY] = signing_identity lane_context[SharedValues::IOS_FLAVORS_PROVISIONING_PROFILE] = File.expand_path(provisioning_profile) return { ipa: File.expand_path(ipa), flavors: flavors, target_plist: target_plist, signing_identity: signing_identity, provisioning_profile: provisioning_profile } end
run(params)
click to toggle source
# File lib/fastlane/plugin/ios_flavors/actions/create_ipa_flavors.rb, line 14 def self.run(params) Helper::IOSFlavorsHelper.verify_dependencies params = parse_params(params) create_flavors_from(ipa: params[:ipa], target_plist: params[:target_plist]) end