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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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