class Fastlane::Actions::CordovaAction
Constants
- ANDROID_ARGS_MAP
- IOS_ARGS_MAP
Public Class Methods
available_options()
click to toggle source
# File lib/fastlane/plugin/cordova/actions/cordova_action.rb, line 150 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: :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: :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: :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", is_string: true, 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: "Build Number for iOS", 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 `npx 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 `npx cordova platform add` with `--nofetch` 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 `npx 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
# File lib/fastlane/plugin/cordova/actions/cordova_action.rb, line 89 def self.build(params) args = [params[:release] ? '--release' : '--debug'] args << '--device' if params[:device] args << '--browserify' if params[:browserify] 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] sh "npx --no-install cordova prepare #{params[:platform]} #{args.join(' ')} #{ios_args} -- #{android_args}" end 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 sh "npx --no-install cordova compile #{params[:platform]} #{args.join(' ')} #{ios_args} -- #{android_args}" end
category()
click to toggle source
# File lib/fastlane/plugin/cordova/actions/cordova_action.rb, line 327 def self.category :building end
check_platform(params)
click to toggle source
# File lib/fastlane/plugin/cordova/actions/cordova_action.rb, line 73 def self.check_platform(params) platform = params[:platform] if platform && !File.directory?("./platforms/#{platform}") if params[:cordova_no_fetch] sh "npx --no-install cordova platform add #{platform} --nofetch" else sh "npx --no-install cordova platform add #{platform}" end end end
description()
click to toggle source
@!group Documentation
# File lib/fastlane/plugin/cordova/actions/cordova_action.rb, line 142 def self.description "Build your Cordova app" end
details()
click to toggle source
# File lib/fastlane/plugin/cordova/actions/cordova_action.rb, line 146 def self.details "Easily integrate your cordova build into a Fastlane setup" end
example_code()
click to toggle source
# File lib/fastlane/plugin/cordova/actions/cordova_action.rb, line 313 def self.example_code [ "cordova( platform: 'ios' )", "cordova( 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/cordova/actions/cordova_action.rb, line 48 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
# File lib/fastlane/plugin/cordova/actions/cordova_action.rb, line 84 def self.get_app_name() config = REXML::Document.new(File.open('config.xml')) return config.elements['widget'].elements['name'].first.value end
get_ios_args(params)
click to toggle source
# File lib/fastlane/plugin/cordova/actions/cordova_action.rb, line 56 def self.get_ios_args(params) app_identifier = CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier) if params[:provisioning_profile].empty? 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, args_map)
click to toggle source
# File lib/fastlane/plugin/cordova/actions/cordova_action.rb, line 27 def self.get_platform_args(params, args_map) platform_args = [] args_map.each do |action_key, cli_param| param_value = params[action_key] 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 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/cordova/actions/cordova_action.rb, line 309 def self.is_supported?(platform) true end
output()
click to toggle source
# File lib/fastlane/plugin/cordova/actions/cordova_action.rb, line 298 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/cordova/actions/cordova_action.rb, line 132 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
# File lib/fastlane/plugin/cordova/actions/cordova_action.rb, line 119 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[: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" end