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

Sign up to get free protection for your applications and to get access to all the features.
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