fastlane 2.68.0.beta.20171129010003 → 2.68.0.beta.20171130010004

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/fastlane/lib/assets/ActionDetails.md.erb +2 -2
  3. data/fastlane/lib/fastlane/actions/appstore.rb +3 -32
  4. data/fastlane/lib/fastlane/actions/build_android_app.rb +14 -0
  5. data/fastlane/lib/fastlane/actions/build_app.rb +14 -0
  6. data/fastlane/lib/fastlane/actions/build_ios_app.rb +143 -0
  7. data/fastlane/lib/fastlane/actions/capture_android_screenshots.rb +57 -0
  8. data/fastlane/lib/fastlane/actions/capture_ios_screenshots.rb +55 -0
  9. data/fastlane/lib/fastlane/actions/capture_screenshots.rb +14 -0
  10. data/fastlane/lib/fastlane/actions/cert.rb +6 -60
  11. data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +53 -0
  12. data/fastlane/lib/fastlane/actions/create_app_online.rb +76 -0
  13. data/fastlane/lib/fastlane/actions/deliver.rb +6 -56
  14. data/fastlane/lib/fastlane/actions/docs/frameit.md +2 -1
  15. data/fastlane/lib/fastlane/actions/frame_screenshots.rb +62 -0
  16. data/fastlane/lib/fastlane/actions/frameit.rb +6 -53
  17. data/fastlane/lib/fastlane/actions/get_certificates.rb +69 -0
  18. data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +88 -0
  19. data/fastlane/lib/fastlane/actions/get_push_certificate.rb +82 -0
  20. data/fastlane/lib/fastlane/actions/gym.rb +6 -133
  21. data/fastlane/lib/fastlane/actions/match.rb +3 -87
  22. data/fastlane/lib/fastlane/actions/pem.rb +6 -73
  23. data/fastlane/lib/fastlane/actions/pilot.rb +3 -55
  24. data/fastlane/lib/fastlane/actions/precheck.rb +6 -44
  25. data/fastlane/lib/fastlane/actions/produce.rb +6 -66
  26. data/fastlane/lib/fastlane/actions/run_tests.rb +105 -0
  27. data/fastlane/lib/fastlane/actions/scan.rb +6 -96
  28. data/fastlane/lib/fastlane/actions/screengrab.rb +6 -48
  29. data/fastlane/lib/fastlane/actions/sigh.rb +6 -79
  30. data/fastlane/lib/fastlane/actions/snapshot.rb +6 -46
  31. data/fastlane/lib/fastlane/actions/supply.rb +3 -56
  32. data/fastlane/lib/fastlane/actions/sync_code_signing.rb +99 -0
  33. data/fastlane/lib/fastlane/actions/testflight.rb +3 -32
  34. data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +67 -0
  35. data/fastlane/lib/fastlane/actions/upload_to_play_store.rb +68 -0
  36. data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +67 -0
  37. data/fastlane/lib/fastlane/version.rb +1 -1
  38. data/spaceship/lib/spaceship/client.rb +1 -1
  39. metadata +19 -2
@@ -0,0 +1,82 @@
1
+ module Fastlane
2
+ module Actions
3
+ class GetPushCertificateAction < Action
4
+ def self.run(params)
5
+ require 'pem'
6
+ require 'pem/options'
7
+ require 'pem/manager'
8
+
9
+ success_block = params[:new_profile]
10
+
11
+ PEM.config = params
12
+
13
+ if Helper.is_test?
14
+ profile_path = './test.pem'
15
+ else
16
+ profile_path = PEM::Manager.start
17
+ end
18
+
19
+ if success_block and profile_path
20
+ success_block.call(File.expand_path(profile_path)) if success_block
21
+ end
22
+ end
23
+
24
+ def self.description
25
+ "Ensure a valid push profile is active, creating a new one if needed (via `pem`)"
26
+ end
27
+
28
+ def self.author
29
+ "KrauseFx"
30
+ end
31
+
32
+ def self.details
33
+ [
34
+ "Additionally to the available options, you can also specify a block that only gets executed if a new",
35
+ "profile was created. You can use it to upload the new profile to your server.",
36
+ "Use it like this: ",
37
+ "get_push_certificate(",
38
+ " new_profile: proc do ",
39
+ " # your upload code",
40
+ " end",
41
+ ")"
42
+ ].join("\n")
43
+ end
44
+
45
+ def self.available_options
46
+ require 'pem'
47
+ require 'pem/options'
48
+
49
+ @options = PEM::Options.available_options
50
+ @options << FastlaneCore::ConfigItem.new(key: :new_profile,
51
+ description: "Block that is called if there is a new profile",
52
+ optional: true,
53
+ is_string: false)
54
+ @options
55
+ end
56
+
57
+ def self.is_supported?(platform)
58
+ platform == :ios
59
+ end
60
+
61
+ def self.example_code
62
+ [
63
+ 'get_push_certificate',
64
+ 'pem # alias for "get_push_certificate"',
65
+ 'get_push_certificate(
66
+ force: true, # create a new profile, even if the old one is still valid
67
+ app_identifier: "net.sunapps.9", # optional app identifier,
68
+ save_private_key: true,
69
+ new_profile: proc do |profile_path| # this block gets called when a new profile was generated
70
+ puts profile_path # the absolute path to the new PEM file
71
+ # insert the code to upload the PEM file to the server
72
+ end
73
+ )'
74
+ ]
75
+ end
76
+
77
+ def self.category
78
+ :push
79
+ end
80
+ end
81
+ end
82
+ end
@@ -1,140 +1,13 @@
1
1
  module Fastlane
2
2
  module Actions
3
- module SharedValues
4
- IPA_OUTPUT_PATH = :IPA_OUTPUT_PATH
5
- DSYM_OUTPUT_PATH = :DSYM_OUTPUT_PATH
6
- end
7
-
8
- class GymAction < Action
9
- def self.run(values)
10
- require 'gym'
11
-
12
- unless Actions.lane_context[SharedValues::SIGH_PROFILE_TYPE].to_s == "development"
13
- values[:export_method] ||= Actions.lane_context[SharedValues::SIGH_PROFILE_TYPE]
14
- end
15
-
16
- if Actions.lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING]
17
- # Since Xcode 9 you need to explicitly provide the provisioning profile per app target
18
- # If the user is smart and uses match and gym together with fastlane, we can do all
19
- # the heavy lifting for them
20
- values[:export_options] ||= {}
21
- # It's not always a hash, because the user might have passed a string path to a ready plist file
22
- # If that's the case, we won't set the provisioning profiles
23
- # see https://github.com/fastlane/fastlane/issues/9490
24
- if values[:export_options].kind_of?(Hash)
25
- match_mapping = (Actions.lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING] || {}).dup
26
- existing_mapping = (values[:export_options][:provisioningProfiles] || {}).dup
27
-
28
- # Be smart about how we merge those mappings in case there are conflicts
29
- mapping_object = Gym::CodeSigningMapping.new
30
- hash_to_use = mapping_object.merge_profile_mapping(primary_mapping: existing_mapping,
31
- secondary_mapping: match_mapping,
32
- export_method: values[:export_method])
33
-
34
- values[:export_options][:provisioningProfiles] = hash_to_use
35
- else
36
- self.show_xcode_9_warning
37
- end
38
- elsif Actions.lane_context[SharedValues::SIGH_PROFILE_PATHS]
39
- # Since Xcode 9 you need to explicitly provide the provisioning profile per app target
40
- # If the user used sigh we can match the profiles from sigh
41
- values[:export_options] ||= {}
42
- if values[:export_options].kind_of?(Hash)
43
- # It's not always a hash, because the user might have passed a string path to a ready plist file
44
- # If that's the case, we won't set the provisioning profiles
45
- # see https://github.com/fastlane/fastlane/issues/9684
46
- values[:export_options][:provisioningProfiles] ||= {}
47
- Actions.lane_context[SharedValues::SIGH_PROFILE_PATHS].each do |profile_path|
48
- begin
49
- profile = FastlaneCore::ProvisioningProfile.parse(profile_path)
50
- profile_team_id = profile["TeamIdentifier"].first
51
- next if profile_team_id != values[:export_team_id] && !values[:export_team_id].nil?
52
- bundle_id = profile["Entitlements"]["application-identifier"].gsub("#{profile_team_id}.", "")
53
- values[:export_options][:provisioningProfiles][bundle_id] = profile["Name"]
54
- rescue => ex
55
- UI.error("Couldn't load profile at path: #{profile_path}")
56
- UI.error(ex)
57
- UI.verbose(ex.backtrace.join("\n"))
58
- end
59
- end
60
- else
61
- self.show_xcode_9_warning
62
- end
63
- end
64
-
65
- gym_output_path = Gym::Manager.new.work(values)
66
- if gym_output_path.nil?
67
- UI.important("No output path received from gym")
68
- return nil
69
- end
70
-
71
- absolute_ipa_path = File.expand_path(gym_output_path)
72
- absolute_dsym_path = absolute_ipa_path.gsub(".ipa", ".app.dSYM.zip")
73
-
74
- # This might be the mac app path, so we don't want to set it here
75
- # https://github.com/fastlane/fastlane/issues/5757
76
- if absolute_ipa_path.include?(".ipa")
77
- Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] = absolute_ipa_path
78
- ENV[SharedValues::IPA_OUTPUT_PATH.to_s] = absolute_ipa_path # for deliver
79
- end
80
-
81
- Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH] = absolute_dsym_path if File.exist?(absolute_dsym_path)
82
- Actions.lane_context[SharedValues::XCODEBUILD_ARCHIVE] = Gym::BuildCommandGenerator.archive_path
83
- ENV[SharedValues::DSYM_OUTPUT_PATH.to_s] = absolute_dsym_path if File.exist?(absolute_dsym_path)
84
-
85
- return absolute_ipa_path
86
- end
3
+ require 'fastlane/actions/build_ios_app'
4
+ class GymAction < BuildIosAppAction
5
+ #####################################################
6
+ # @!group Documentation
7
+ #####################################################
87
8
 
88
9
  def self.description
89
- "Easily build and sign your app using _gym_"
90
- end
91
-
92
- def self.details
93
- "More information: https://fastlane.tools/gym"
94
- end
95
-
96
- def self.return_value
97
- "The absolute path to the generated ipa file"
98
- end
99
-
100
- def self.author
101
- "KrauseFx"
102
- end
103
-
104
- def self.available_options
105
- require 'gym'
106
- Gym::Options.available_options
107
- end
108
-
109
- def self.is_supported?(platform)
110
- [:ios, :mac].include? platform
111
- end
112
-
113
- def self.example_code
114
- [
115
- 'gym(scheme: "MyApp", workspace: "MyApp.xcworkspace")',
116
- 'gym(
117
- workspace: "MyApp.xcworkspace",
118
- configuration: "Debug",
119
- scheme: "MyApp",
120
- silent: true,
121
- clean: true,
122
- output_directory: "path/to/dir", # Destination directory. Defaults to current directory.
123
- output_name: "my-app.ipa", # specify the name of the .ipa file to generate (including file extension)
124
- sdk: "10.0" # use SDK as the name or path of the base SDK when building the project.
125
- )'
126
- ]
127
- end
128
-
129
- def self.category
130
- :building
131
- end
132
-
133
- def self.show_xcode_9_warning
134
- return unless Helper.xcode_at_least?("9.0")
135
- UI.message("You passed a path to a custom plist file for exporting the binary.")
136
- UI.message("Make sure to include information about what provisioning profiles to use with Xcode 9")
137
- UI.message("More information: https://docs.fastlane.tools/codesigning/xcode-project/#xcode-9-and-up")
10
+ "Alias for the `build_ios_app` action"
138
11
  end
139
12
  end
140
13
  end
@@ -1,97 +1,13 @@
1
1
  module Fastlane
2
2
  module Actions
3
- module SharedValues
4
- MATCH_PROVISIONING_PROFILE_MAPPING = :MATCH_PROVISIONING_PROFILE_MAPPING
5
- end
6
-
7
- class MatchAction < Action
8
- def self.run(params)
9
- require 'match'
10
-
11
- params.load_configuration_file("Matchfile")
12
- Match::Runner.new.run(params)
13
-
14
- define_profile_type(params)
15
- define_provisioning_profile_mapping(params)
16
- end
17
-
18
- def self.define_profile_type(params)
19
- profile_type = "app-store"
20
- profile_type = "ad-hoc" if params[:type] == 'adhoc'
21
- profile_type = "development" if params[:type] == 'development'
22
- profile_type = "enterprise" if params[:type] == 'enterprise'
23
-
24
- UI.message("Setting Provisioning Profile type to '#{profile_type}'")
25
-
26
- Actions.lane_context[SharedValues::SIGH_PROFILE_TYPE] = profile_type
27
- end
28
-
29
- # Maps the bundle identifier to the appropriate provisioning profile
30
- # This is used in the _gym_ action as part of the export options
31
- # e.g.
32
- #
33
- # export_options: {
34
- # provisioningProfiles: { "me.themoji.app.beta": "match AppStore me.themoji.app.beta" }
35
- # }
36
- #
37
- def self.define_provisioning_profile_mapping(params)
38
- mapping = Actions.lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING] || {}
39
-
40
- # Array (...) to make sure it's an Array, Ruby is magic, try this
41
- # Array(1) # => [1]
42
- # Array([1, 2]) # => [1, 2]
43
- Array(params[:app_identifier]).each do |app_identifier|
44
- env_variable_name = Match::Utils.environment_variable_name_profile_name(app_identifier: app_identifier,
45
- type: Match.profile_type_sym(params[:type]),
46
- platform: params[:platform])
47
- mapping[app_identifier] = ENV[env_variable_name]
48
- end
49
-
50
- Actions.lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING] = mapping
51
- end
52
-
3
+ require 'fastlane/actions/sync_code_signing'
4
+ class MatchAction < SyncCodeSigningAction
53
5
  #####################################################
54
6
  # @!group Documentation
55
7
  #####################################################
56
8
 
57
9
  def self.description
58
- "Easily sync your certificates and profiles across your team using git"
59
- end
60
-
61
- def self.details
62
- "More details https://github.com/fastlane/fastlane/tree/master/match"
63
- end
64
-
65
- def self.available_options
66
- require 'match'
67
- Match::Options.available_options
68
- end
69
-
70
- def self.output
71
- []
72
- end
73
-
74
- def self.return_value
75
- end
76
-
77
- def self.authors
78
- ["KrauseFx"]
79
- end
80
-
81
- def self.is_supported?(platform)
82
- platform == :ios
83
- end
84
-
85
- def self.example_code
86
- [
87
- 'match(type: "appstore", app_identifier: "tools.fastlane.app")',
88
- 'match(type: "development", readonly: true)',
89
- 'match(app_identifier: ["tools.fastlane.app", "tools.fastlane.sleepy"])'
90
- ]
91
- end
92
-
93
- def self.category
94
- :code_signing
10
+ "Alias for the `sync_code_signing` action"
95
11
  end
96
12
  end
97
13
  end
@@ -1,80 +1,13 @@
1
1
  module Fastlane
2
2
  module Actions
3
- class PemAction < Action
4
- def self.run(params)
5
- require 'pem'
6
- require 'pem/options'
7
- require 'pem/manager'
8
-
9
- success_block = params[:new_profile]
10
-
11
- PEM.config = params
12
-
13
- if Helper.is_test?
14
- profile_path = './test.pem'
15
- else
16
- profile_path = PEM::Manager.start
17
- end
18
-
19
- if success_block and profile_path
20
- success_block.call(File.expand_path(profile_path)) if success_block
21
- end
22
- end
3
+ require 'fastlane/actions/get_push_certificate'
4
+ class PemAction < GetPushCertificateAction
5
+ #####################################################
6
+ # @!group Documentation
7
+ #####################################################
23
8
 
24
9
  def self.description
25
- "Makes sure a valid push profile is active and creates a new one if needed"
26
- end
27
-
28
- def self.author
29
- "KrauseFx"
30
- end
31
-
32
- def self.details
33
- [
34
- "Additionally to the available options, you can also specify a block that only gets executed if a new",
35
- "profile was created. You can use it to upload the new profile to your server.",
36
- "Use it like this: ",
37
- "pem(",
38
- " new_profile: proc do ",
39
- " # your upload code",
40
- " end",
41
- ")"
42
- ].join("\n")
43
- end
44
-
45
- def self.available_options
46
- require 'pem'
47
- require 'pem/options'
48
-
49
- @options = PEM::Options.available_options
50
- @options << FastlaneCore::ConfigItem.new(key: :new_profile,
51
- description: "Block that is called if there is a new profile",
52
- optional: true,
53
- is_string: false)
54
- @options
55
- end
56
-
57
- def self.is_supported?(platform)
58
- platform == :ios
59
- end
60
-
61
- def self.example_code
62
- [
63
- 'pem',
64
- 'pem(
65
- force: true, # create a new profile, even if the old one is still valid
66
- app_identifier: "net.sunapps.9", # optional app identifier,
67
- save_private_key: true,
68
- new_profile: proc do |profile_path| # this block gets called when a new profile was generated
69
- puts profile_path # the absolute path to the new PEM file
70
- # insert the code to upload the PEM file to the server
71
- end
72
- )'
73
- ]
74
- end
75
-
76
- def self.category
77
- :push
10
+ "Alias for the `get_push_certificate` action"
78
11
  end
79
12
  end
80
13
  end
@@ -1,65 +1,13 @@
1
1
  module Fastlane
2
2
  module Actions
3
- class PilotAction < Action
4
- def self.run(values)
5
- require 'pilot'
6
- require 'pilot/options'
7
-
8
- changelog = Actions.lane_context[SharedValues::FL_CHANGELOG]
9
- values[:changelog] ||= changelog if changelog
10
-
11
- values[:ipa] ||= Actions.lane_context[SharedValues::IPA_OUTPUT_PATH]
12
- values[:ipa] = File.expand_path(values[:ipa]) if values[:ipa]
13
-
14
- return values if Helper.test?
15
-
16
- Pilot::BuildManager.new.upload(values) # we already have the finished config
17
- end
18
-
3
+ require 'fastlane/actions/upload_to_testflight'
4
+ class PilotAction < UploadToTestflightAction
19
5
  #####################################################
20
6
  # @!group Documentation
21
7
  #####################################################
22
8
 
23
9
  def self.description
24
- "Upload a new binary to iTunes Connect for TestFlight beta testing"
25
- end
26
-
27
- def self.details
28
- [
29
- "More details can be found on https://github.com/fastlane/fastlane/tree/master/pilot",
30
- "This integration will only do the TestFlight upload"
31
- ].join("\n")
32
- end
33
-
34
- def self.available_options
35
- require "pilot"
36
- require "pilot/options"
37
- FastlaneCore::CommanderGenerator.new.generate(Pilot::Options.available_options)
38
- end
39
-
40
- def self.example_code
41
- [
42
- 'testflight',
43
- 'pilot # alias for "testflight"',
44
- 'testflight(skip_submission: true) # to only upload the build',
45
- 'testflight(
46
- username: "felix@krausefx.com",
47
- app_identifier: "com.krausefx.app",
48
- itc_provider: "abcde12345" # pass a specific value to the iTMSTransporter -itc_provider option
49
- )'
50
- ]
51
- end
52
-
53
- def self.category
54
- :beta
55
- end
56
-
57
- def self.authors
58
- ["KrauseFx"]
59
- end
60
-
61
- def self.is_supported?(platform)
62
- [:ios].include?(platform)
10
+ "Alias for the `upload_to_testflight` action"
63
11
  end
64
12
  end
65
13
  end