fastlane 2.71.0.beta.20171222010003 → 2.71.0.beta.20171223010003

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 15338c1ef569bc2f6ba3a3dc7ec9b68e2727d0e3
4
- data.tar.gz: 028285fa85b323cfd1bb4606c9dd615fa43643e1
3
+ metadata.gz: b1c6d92f2236f504ee27a5a54f33df3be0e6ae94
4
+ data.tar.gz: 093138c8ae98b1a657f933d1f34e17d556e6ff20
5
5
  SHA512:
6
- metadata.gz: a8cf04d30d13f56ef18cdf8c07b7fd4762a1ecf72f62631d86bd9ec2e01dfd4aa81c21d76ba41de8c8a734fbce3ccf232d8769d8a41d6fe6d932cba93e6180c5
7
- data.tar.gz: e44d3e4c8b6c4d241ffe5adf7a28b608e1e578cc5db82b3fa6a9bb5d080dbc43401326ca2d1ca8e9e9eef88090cb49469b9afe2811c11852006b891f1f38878c
6
+ metadata.gz: 2a2e84dbc54e34ef77ade75194afb28fb74e147ab408a67b77ed7c05c06c14212c2e77119ad6a5e7469c069782f002b33b32ae5f2756db0b2108f0f113ef3476
7
+ data.tar.gz: 065908501eaf6e0516f24ca50a0e70eeb947c25a89241747a1f20ebb0aacf241f031db0eb51303775de674e2c51b88c4ed76597ac2e44aca1091d5b77cfcbda9
@@ -71,7 +71,8 @@ module Fastlane
71
71
  appledoc_args = params_hash_to_cli_args(params_hash)
72
72
  UI.success("Generating documentation.")
73
73
  cli_args = appledoc_args.join(' ')
74
- command = "appledoc #{cli_args}".strip + " \"#{params_hash[:input]}\""
74
+ input_cli_arg = Array(params_hash[:input]).map(&:shellescape).join(' ')
75
+ command = "appledoc #{cli_args}".strip + " " + input_cli_arg
75
76
  UI.verbose(command)
76
77
  Actions.sh command
77
78
  end
@@ -124,7 +125,7 @@ module Fastlane
124
125
  def self.available_options
125
126
  [
126
127
  # PATHS
127
- FastlaneCore::ConfigItem.new(key: :input, env_name: "FL_APPLEDOC_INPUT", description: "Path to source files", is_string: true),
128
+ FastlaneCore::ConfigItem.new(key: :input, env_name: "FL_APPLEDOC_INPUT", description: "Path(s) to source file directories or individual source files. Accepts a single path or an array of paths", is_string: false),
128
129
  FastlaneCore::ConfigItem.new(key: :output, env_name: "FL_APPLEDOC_OUTPUT", description: "Output path", is_string: true, optional: true),
129
130
  FastlaneCore::ConfigItem.new(key: :templates, env_name: "FL_APPLEDOC_TEMPLATES", description: "Template files path", is_string: true, optional: true),
130
131
  FastlaneCore::ConfigItem.new(key: :docset_install_path, env_name: "FL_APPLEDOC_DOCSET_INSTALL_PATH", description: "DocSet installation path", is_string: true, optional: true),
@@ -207,7 +208,10 @@ module Fastlane
207
208
  'appledoc(
208
209
  project_name: "MyProjectName",
209
210
  project_company: "Company Name",
210
- input: "MyProjectSources",
211
+ input: [
212
+ "MyProjectSources",
213
+ "MyProjectSourceFile.h"
214
+ ],
211
215
  ignore: [
212
216
  "ignore/path/1",
213
217
  "ingore/path/2"
@@ -23,7 +23,7 @@ module Fastlane
23
23
  puts ""
24
24
  puts "To automatically upload builds and metadata to Google Play, fastlane needs a service action json secret file".yellow
25
25
  puts "Feel free to just click Enter to skip not provide certain things"
26
- puts "Follow the Setup Guide on how to get the Json file: https://github.com/fastlane/fastlane/tree/master/supply#setup".yellow
26
+ puts "Follow the Setup Guide on how to get the Json file: https://docs.fastlane.tools/actions/supply/".yellow
27
27
  json_key_file = UI.input("Path to the json secret file: ")
28
28
 
29
29
  template = File.read("#{Fastlane::ROOT}/lib/assets/AppfileTemplateAndroid")
@@ -236,10 +236,7 @@ module Fastlane
236
236
  FastlaneCore::CommandExecutor.execute(
237
237
  command: build_command,
238
238
  print_all: false,
239
- print_command: !Gym.config[:silent],
240
- error: proc do |output|
241
- ErrorHandler.handle_build_error(output)
242
- end
239
+ print_command: !Gym.config[:silent]
243
240
  )
244
241
  end
245
242
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.71.0.beta.20171222010003'.freeze
2
+ VERSION = '2.71.0.beta.20171223010003'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  RUBOCOP_REQUIREMENT = '0.49.1'.freeze
@@ -1,5 +1,6 @@
1
1
  module Frameit
2
- class Editor
2
+ # Currently the class is 2 lines too long. Reevaluate refactoring when it's length changes significantly
3
+ class Editor # rubocop:disable Metrics/ClassLength
3
4
  attr_accessor :screenshot # reference to the screenshot object to fetch the path, title, etc.
4
5
  attr_accessor :frame # the frame of the device
5
6
  attr_accessor :image # the current image used for editing
@@ -11,7 +12,8 @@ module Frameit
11
12
 
12
13
  if load_frame # Mac doesn't need a frame
13
14
  self.frame = MiniMagick::Image.open(load_frame)
14
- self.frame.rotate(90) unless self.screenshot.portrait? # we use portrait device frames for landscape screenshots
15
+ # Rotate the frame according to the device orientation
16
+ self.frame.rotate(self.rotation_for_device_orientation)
15
17
  elsif self.class == Editor
16
18
  # Couldn't find device frame (probably an iPhone 4, for which there are no images available any more)
17
19
  # Message is already shown elsewhere
@@ -36,6 +38,12 @@ module Frameit
36
38
  @image = MiniMagick::Image.open(screenshot.path)
37
39
  end
38
40
 
41
+ def rotation_for_device_orientation
42
+ return 90 if self.screenshot.landscape_right?
43
+ return -90 if self.screenshot.landscape_left?
44
+ return 0
45
+ end
46
+
39
47
  private
40
48
 
41
49
  def store_result
@@ -50,21 +58,18 @@ module Frameit
50
58
  # We have to rotate the screenshot, since the offset information is for portrait
51
59
  # only. Instead of doing the calculations ourselves, it's much easier to let
52
60
  # imagemagick do the hard lifting for landscape screenshots
53
- unless self.screenshot.portrait?
54
- frame.rotate(-90)
55
- @image.rotate(-90)
56
- end
61
+ rotation = self.rotation_for_device_orientation
62
+ frame.rotate(-rotation)
63
+ @image.rotate(-rotation)
57
64
 
58
65
  @image = frame.composite(image, "png") do |c|
59
66
  c.compose "DstOver"
60
67
  c.geometry offset['offset']
61
68
  end
62
69
 
63
- # We have to revert the state to be landscape screenshots
64
- unless self.screenshot.portrait?
65
- frame.rotate(90)
66
- @image.rotate(90)
67
- end
70
+ # Revert the rotation from above
71
+ frame.rotate(rotation)
72
+ @image.rotate(rotation)
68
73
  end
69
74
 
70
75
  def offset
@@ -39,7 +39,19 @@ module Frameit
39
39
  env_name: "FRAMEIT_USE_LEGACY_IPHONE_6_S",
40
40
  is_string: false,
41
41
  description: "Use iPhone 6s frames instead of iPhone 7 frames",
42
- default_value: false)
42
+ default_value: false),
43
+ FastlaneCore::ConfigItem.new(key: :force_orientation_block,
44
+ type: Proc,
45
+ description: "[Advanced] A block to customize your screnshots' device orientation",
46
+ display_in_shell: false,
47
+ default_value: proc do |filename|
48
+ f = filename.downcase
49
+ if f.end_with?("force_landscapeleft")
50
+ :landscape_left
51
+ elsif f.end_with?("force_landscaperight")
52
+ :landscape_right
53
+ end
54
+ end)
43
55
  ]
44
56
  end
45
57
  end
@@ -71,8 +71,37 @@ module Frameit
71
71
  return Orientation::LANDSCAPE
72
72
  end
73
73
 
74
+ def frame_orientation
75
+ filename = File.basename(self.path, ".*")
76
+ block = Frameit.config[:force_orientation_block]
77
+
78
+ unless block.nil?
79
+ orientation = block.call(filename)
80
+ valid = [:landscape_left, :landscape_right, :portrait, nil]
81
+ UI.user_error("orientation_block must return #{valid[0..-2].join(', ')} or nil") unless valid.include?(orientation)
82
+
83
+ puts "Forced orientation: #{orientation}"
84
+ end
85
+
86
+ return orientation unless orientation.nil?
87
+ return :portrait if self.orientation_name == Orientation::PORTRAIT
88
+ return :landscape_right # Default landscape orientation
89
+ end
90
+
74
91
  def portrait?
75
- return (orientation_name == Orientation::PORTRAIT)
92
+ return (frame_orientation == :portrait)
93
+ end
94
+
95
+ def landscape_left?
96
+ return (frame_orientation == :landscape_left)
97
+ end
98
+
99
+ def landscape_right?
100
+ return (frame_orientation == :landscape_right)
101
+ end
102
+
103
+ def landscape?
104
+ return self.landscape_left? || self.landscape_right
76
105
  end
77
106
 
78
107
  def to_s
@@ -31,6 +31,10 @@ module Match
31
31
  app_identifiers = params[:app_identifier].to_s.split(/\s*,\s*/).uniq
32
32
  end
33
33
 
34
+ # sometimes we get an array with arrays, this is a bug. To unblock people using match, I suggest we flatten!
35
+ # then in the future address the root cause of https://github.com/fastlane/fastlane/issues/11324
36
+ app_identifiers.flatten!
37
+
34
38
  # Verify the App ID (as we don't want 'match' to fail at a later point)
35
39
  if spaceship
36
40
  app_identifiers.each do |app_identifier|
@@ -111,6 +111,20 @@ module Spaceship::TestFlight
111
111
  handle_response(response)
112
112
  end
113
113
 
114
+ def create_group_for_app(app_id: nil, group_name: nil)
115
+ assert_required_params(__method__, binding)
116
+ body = {
117
+ 'name' => group_name
118
+ }
119
+
120
+ response = request(:post) do |req|
121
+ req.url "providers/#{team_id}/apps/#{app_id}/groups"
122
+ req.body = body.to_json
123
+ req.headers['Content-Type'] = 'application/json'
124
+ end
125
+ handle_response(response)
126
+ end
127
+
114
128
  #####################################################
115
129
  # @!group Testers
116
130
  #####################################################
@@ -21,6 +21,13 @@ module Spaceship::TestFlight
21
21
  'created' => :created
22
22
  })
23
23
 
24
+ def self.create!(app_id: nil, group_name: nil)
25
+ group = self.find(app_id: app_id, group_name: group_name)
26
+ return group unless group.nil?
27
+ data = client.create_group_for_app(app_id: app_id, group_name: group_name)
28
+ self.new(data)
29
+ end
30
+
24
31
  def self.all(app_id: nil)
25
32
  groups = client.get_groups(app_id: app_id)
26
33
  groups.map { |g| self.new(g) }
@@ -98,7 +98,7 @@ module Spaceship
98
98
  }
99
99
  }
100
100
  end
101
- raw_data.set(["pricingIntervals"], new_intervals)
101
+ raw_data.set(["subscriptions"], new_intervals)
102
102
  end
103
103
 
104
104
  # @return (Array) pricing intervals
@@ -112,7 +112,7 @@ module Spaceship
112
112
  # }
113
113
  # ]
114
114
  def pricing_intervals
115
- @pricing_intervals ||= raw_data["pricingIntervals"].map do |interval|
115
+ @pricing_intervals ||= raw_data["subscriptions"].map do |interval|
116
116
  {
117
117
  tier: interval["value"]["tierStem"].to_i,
118
118
  begin_date: interval["value"]["priceTierEffectiveDate"],
@@ -53,14 +53,28 @@ module Spaceship
53
53
  end
54
54
 
55
55
  def edit
56
- attrs = client.load_iap(app_id: application.apple_id, purchase_id: self.purchase_id)
57
- attrs[:application] = application
58
- Tunes::IAPDetail.new(attrs)
56
+ Tunes::IAPDetail.new(build_iap)
59
57
  end
60
58
 
61
59
  def delete!
62
60
  client.delete_iap!(app_id: application.apple_id, purchase_id: self.purchase_id)
63
61
  end
62
+
63
+ private
64
+
65
+ def build_iap
66
+ attrs = [*iap_prices, *iap_details].to_h
67
+ attrs[:application] = application
68
+ attrs
69
+ end
70
+
71
+ def iap_prices
72
+ client.load_iap_prices(app_id: application.apple_id, purchase_id: self.purchase_id)
73
+ end
74
+
75
+ def iap_details
76
+ client.load_iap_details(app_id: application.apple_id, purchase_id: self.purchase_id)
77
+ end
64
78
  end
65
79
  end
66
80
  end
@@ -534,7 +534,7 @@ module Spaceship
534
534
  end
535
535
 
536
536
  def price_tier(app_id)
537
- r = request(:get, "ra/apps/#{app_id}/pricing/intervals")
537
+ r = request(:get, "ra/apps/#{app_id}/pricing")
538
538
  data = parse_response(r, 'data')
539
539
 
540
540
  begin
@@ -1043,8 +1043,14 @@ module Spaceship
1043
1043
  handle_itc_response(r)
1044
1044
  end
1045
1045
 
1046
- # Loads the full In-App-Purchases
1047
- def load_iap(app_id: nil, purchase_id: nil)
1046
+ # Loads the iap prices for specific product
1047
+ def load_iap_prices(app_id: nil, purchase_id: nil)
1048
+ r = request(:get, "ra/apps/#{app_id}/iaps/#{purchase_id}/pricing")
1049
+ parse_response(r, 'data')
1050
+ end
1051
+
1052
+ # Loads iap full details
1053
+ def load_iap_details(app_id: nil, purchase_id: nil)
1048
1054
  r = request(:get, "ra/apps/#{app_id}/iaps/#{purchase_id}")
1049
1055
  parse_response(r, 'data')
1050
1056
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.71.0.beta.20171222010003
4
+ version: 2.71.0.beta.20171223010003
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
@@ -15,7 +15,7 @@ authors:
15
15
  autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
- date: 2017-12-22 00:00:00.000000000 Z
18
+ date: 2017-12-23 00:00:00.000000000 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: slack-notifier