class Fastlane::Actions::IonicAction
Constants
- ANDROID_ARGS_MAP
valid action params
- IOS_ARGS_MAP
Public Class Methods
available_options()
click to toggle source
# File lib/fastlane/plugin/us_ionic/actions/ionic_action.rb, line 171 def self.available_options [ FastlaneCore::ConfigItem.new( key: :platform, env_name: "CORDOVA_PLATFORM", description: "Platform to build on. Should be either android or ios", is_string: true, default_value: '', verify_block: proc do |value| UI.user_error!("Platform should be either android or ios") unless ['', 'android', 'ios'].include? value end ), FastlaneCore::ConfigItem.new( key: :release, env_name: "CORDOVA_RELEASE", description: "Build for release if true, or for debug if false", is_string: false, default_value: true, verify_block: proc do |value| UI.user_error!("Release should be boolean") unless [false, true].include? value end ), FastlaneCore::ConfigItem.new( key: :device, env_name: "CORDOVA_DEVICE", description: "Build for device", is_string: false, default_value: true, verify_block: proc do |value| UI.user_error!("Device should be boolean") unless [false, true].include? value end ), FastlaneCore::ConfigItem.new( key: :prod, env_name: "IONIC_PROD", description: "Build for production", is_string: false, default_value: false, verify_block: proc do |value| UI.user_error!("Prod should be boolean") unless [false, true].include? value end ), FastlaneCore::ConfigItem.new( key: :type, env_name: "CORDOVA_IOS_PACKAGE_TYPE", description: "This will determine what type of build is generated by Xcode. Valid options are development, enterprise, adhoc, and appstore", is_string: true, default_value: 'appstore', verify_block: proc do |value| UI.user_error!("Valid options are development, enterprise, adhoc, and appstore.") unless ['development', 'enterprise', 'adhoc', 'appstore', 'ad-hoc', 'app-store'].include? value end ), FastlaneCore::ConfigItem.new( key: :verbose, env_name: "CORDOVA_VERBOSE", description: "Pipe out more verbose output to the shell", default_value: false, is_string: false, verify_block: proc do |value| UI.user_error!("Verbose should be boolean") unless [false, true].include? value end ), FastlaneCore::ConfigItem.new( key: :team_id, env_name: "CORDOVA_IOS_TEAM_ID", description: "The development team (Team ID) to use for code signing", is_string: true, default_value: CredentialsManager::AppfileConfig.try_fetch_value(:team_id) ), FastlaneCore::ConfigItem.new( key: :provisioning_profile, env_name: "CORDOVA_IOS_PROVISIONING_PROFILE", description: "GUID of the provisioning profile to be used for signing", is_string: true, default_value: '' ), FastlaneCore::ConfigItem.new( key: :android_package_type, env_name: "CORDOVA_ANDROID_PACKAGE_TYPE", description: "This will determine what type of Android build is generated. Valid options are apk or bundle", default_value: 'apk', verify_block: proc do |value| UI.user_error!("Valid options are apk or bundle.") unless ['apk', 'bundle'].include? value end ), FastlaneCore::ConfigItem.new( key: :keystore_path, env_name: "CORDOVA_ANDROID_KEYSTORE_PATH", description: "Path to the Keystore for Android", is_string: true, default_value: '' ), FastlaneCore::ConfigItem.new( key: :keystore_password, env_name: "CORDOVA_ANDROID_KEYSTORE_PASSWORD", description: "Android Keystore password", is_string: true, default_value: '' ), FastlaneCore::ConfigItem.new( key: :key_password, env_name: "CORDOVA_ANDROID_KEY_PASSWORD", description: "Android Key password (default is keystore password)", is_string: true, default_value: '' ), FastlaneCore::ConfigItem.new( key: :keystore_alias, env_name: "CORDOVA_ANDROID_KEYSTORE_ALIAS", description: "Android Keystore alias", is_string: true, default_value: '' ), FastlaneCore::ConfigItem.new( key: :build_number, env_name: "CORDOVA_BUILD_NUMBER", description: "Sets the build number for iOS and version code for Android", optional: true, is_string: false ), FastlaneCore::ConfigItem.new( key: :browserify, env_name: "CORDOVA_BROWSERIFY", description: "Specifies whether to browserify build or not", default_value: false, is_string: false ), FastlaneCore::ConfigItem.new( key: :cordova_prepare, env_name: "CORDOVA_PREPARE", description: "Specifies whether to run `ionic cordova prepare` before building", default_value: true, is_string: false ), FastlaneCore::ConfigItem.new( key: :min_sdk_version, env_name: "CORDOVA_ANDROID_MIN_SDK_VERSION", description: "Overrides the value of minSdkVersion set in AndroidManifest.xml", default_value: '', is_string: false ), FastlaneCore::ConfigItem.new( key: :cordova_no_fetch, env_name: "CORDOVA_NO_FETCH", description: "Call `cordova platform add` with `--nofetch` parameter", default_value: false, is_string: false ), FastlaneCore::ConfigItem.new( key: :cordova_no_resources, env_name: "CORDOVA_NO_RESOURCES", description: "Call `cordova platform add` with `--no-resources` parameter", default_value: false, is_string: false ), FastlaneCore::ConfigItem.new( key: :build_flag, env_name: "CORDOVA_IOS_BUILD_FLAG", description: "An array of Xcode buildFlag. Will be appended on compile command", is_string: false, optional: true, default_value: [] ), FastlaneCore::ConfigItem.new( key: :cordova_build_config_file, env_name: "CORDOVA_BUILD_CONFIG_FILE", description: "Call `ionic cordova compile` with `--buildConfig=<ConfigFile>` to specify build config file path", is_string: true, optional: true, default_value: '' ) ] end
build(params)
click to toggle source
actual building! (run step #2)
# File lib/fastlane/plugin/us_ionic/actions/ionic_action.rb, line 98 def self.build(params) args = [params[:release] ? '--release' : '--debug'] args << '--device' if params[:device] args << '--prod' if params[:prod] args << '--browserify' if params[:browserify] args << '--verbose' if params[:verbose] if !params[:cordova_build_config_file].to_s.empty? args << "--buildConfig=#{Shellwords.escape(params[:cordova_build_config_file])}" end android_args = self.get_android_args(params) if params[:platform].to_s == 'android' ios_args = self.get_ios_args(params) if params[:platform].to_s == 'ios' if params[:cordova_prepare] # TODO: Remove params not allowed/used for `prepare` sh "ionic cordova prepare #{params[:platform]} --no-interactive #{args.join(' ')}" end # special handling for `build_number` param if params[:platform].to_s == 'ios' && !params[:build_number].to_s.empty? cf_bundle_version = params[:build_number].to_s Actions::UpdateInfoPlistAction.run( xcodeproj: "./platforms/ios/#{self.get_app_name}.xcodeproj", plist_path: "#{self.get_app_name}/#{self.get_app_name}-Info.plist", block: lambda { |plist| plist['CFBundleVersion'] = cf_bundle_version } ) end if params[:platform].to_s == 'ios' sh "ionic cordova compile #{params[:platform]} --no-interactive #{args.join(' ')} -- #{ios_args}" elsif params[:platform].to_s == 'android' sh "ionic cordova compile #{params[:platform]} --no-interactive #{args.join(' ')} -- -- #{android_args}" end end
category()
click to toggle source
# File lib/fastlane/plugin/us_ionic/actions/ionic_action.rb, line 374 def self.category :building end
check_platform(params)
click to toggle source
add platform if missing (run step #1)
# File lib/fastlane/plugin/us_ionic/actions/ionic_action.rb, line 81 def self.check_platform(params) platform = params[:platform] args = [] args << '--nofetch' if params[:cordova_no_fetch] args << '--no-resources' if params[:cordova_no_resources] if platform && !File.directory?("./platforms/#{platform}") sh "ionic cordova platform add #{platform} --no-interactive #{args.join(' ')}" end end
description()
click to toggle source
@!group Documentation
# File lib/fastlane/plugin/us_ionic/actions/ionic_action.rb, line 163 def self.description "Build your Ionic app" end
details()
click to toggle source
# File lib/fastlane/plugin/us_ionic/actions/ionic_action.rb, line 167 def self.details "Easily integrate your Ionic build into a Fastlane setup" end
example_code()
click to toggle source
# File lib/fastlane/plugin/us_ionic/actions/ionic_action.rb, line 360 def self.example_code [ "ionic( platform: 'ios' )", "ionic( platform: 'android', keystore_path: './staging.keystore', keystore_alias: 'alias_name', keystore_password: 'store_password' )" ] end
get_android_args(params)
click to toggle source
# File lib/fastlane/plugin/us_ionic/actions/ionic_action.rb, line 54 def self.get_android_args(params) if params[:key_password].empty? params[:key_password] = params[:keystore_password] end return self.get_platform_args(params, ANDROID_ARGS_MAP) end
get_app_name()
click to toggle source
app_name
# File lib/fastlane/plugin/us_ionic/actions/ionic_action.rb, line 92 def self.get_app_name config = REXML::Document.new(File.open('config.xml')) return config.elements['widget'].elements['name'].first.value # TODO: Simplify!? (Check logic in cordova) end
get_ios_args(params)
click to toggle source
# File lib/fastlane/plugin/us_ionic/actions/ionic_action.rb, line 62 def self.get_ios_args(params) app_identifier = CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier) if params[:provisioning_profile].empty? # If `match` or `sigh` were used before this, use the certificates returned from there params[:provisioning_profile] = ENV['SIGH_UUID'] || ENV["sigh_#{app_identifier}_#{params[:type].sub('-', '')}"] end if params[:type] == 'adhoc' params[:type] = 'ad-hoc' end if params[:type] == 'appstore' params[:type] = 'app-store' end return self.get_platform_args(params, IOS_ARGS_MAP) end
get_platform_args(params, platform_args_map)
click to toggle source
extract arguments only valid for the platform from all arguments + map action params to the cli param they will be used for
# File lib/fastlane/plugin/us_ionic/actions/ionic_action.rb, line 31 def self.get_platform_args(params, platform_args_map) platform_args = [] platform_args_map.each do |action_key, cli_param| param_value = params[action_key] # handle `build_flag` being an Array if action_key.to_s == 'build_flag' && param_value.kind_of?(Array) unless param_value.empty? param_value.each do |flag| platform_args << "--#{cli_param}=#{flag.shellescape}" end end # handle all other cases else unless param_value.to_s.empty? platform_args << "--#{cli_param}=#{Shellwords.escape(param_value)}" end end end return platform_args.join(' ') end
is_supported?(platform)
click to toggle source
# File lib/fastlane/plugin/us_ionic/actions/ionic_action.rb, line 356 def self.is_supported?(platform) true end
output()
click to toggle source
# File lib/fastlane/plugin/us_ionic/actions/ionic_action.rb, line 345 def self.output [ ['CORDOVA_ANDROID_RELEASE_BUILD_PATH', 'Path to the signed release APK or AAB if it was generated'], ['CORDOVA_IOS_RELEASE_BUILD_PATH', 'Path to the signed release IPA if it was generated'] ] end
run(params)
click to toggle source
# File lib/fastlane/plugin/us_ionic/actions/ionic_action.rb, line 153 def self.run(params) self.check_platform(params) self.build(params) self.set_build_paths(params) end
set_build_paths(params)
click to toggle source
export build paths (run step #3)
# File lib/fastlane/plugin/us_ionic/actions/ionic_action.rb, line 137 def self.set_build_paths(params) app_name = self.get_app_name build_type = params[:release] ? 'release' : 'debug' # Update the build path accordingly if Android is being # built as an Android Application Bundle. android_package_type = params[:android_package_type] || 'apk' android_package_extension = android_package_type == 'bundle' ? '.aab' : '.apk' ENV['CORDOVA_ANDROID_RELEASE_BUILD_PATH'] = "./platforms/android/app/build/outputs/#{android_package_type}/#{build_type}/app-#{build_type}#{android_package_extension}" ENV['CORDOVA_IOS_RELEASE_BUILD_PATH'] = "./platforms/ios/build/device/#{app_name}.ipa" # TODO: https://github.com/bamlab/fastlane-plugin-cordova/issues/7 # TODO: Set env vars that gym and Co automatically use end