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 +4 -4
- data/fastlane/lib/fastlane/actions/appledoc.rb +7 -3
- data/fastlane/lib/fastlane/setup/setup_android.rb +1 -1
- data/fastlane/lib/fastlane/swift_lane_manager.rb +1 -4
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/frameit/lib/frameit/editor.rb +16 -11
- data/frameit/lib/frameit/options.rb +13 -1
- data/frameit/lib/frameit/screenshot.rb +30 -1
- data/match/lib/match/runner.rb +4 -0
- data/spaceship/lib/spaceship/test_flight/client.rb +14 -0
- data/spaceship/lib/spaceship/test_flight/group.rb +7 -0
- data/spaceship/lib/spaceship/tunes/iap_detail.rb +2 -2
- data/spaceship/lib/spaceship/tunes/iap_list.rb +17 -3
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +9 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1c6d92f2236f504ee27a5a54f33df3be0e6ae94
|
4
|
+
data.tar.gz: 093138c8ae98b1a657f933d1f34e17d556e6ff20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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:
|
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:
|
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://
|
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.
|
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
|
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
|
-
|
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
|
-
|
54
|
-
|
55
|
-
|
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
|
-
#
|
64
|
-
|
65
|
-
|
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 (
|
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
|
data/match/lib/match/runner.rb
CHANGED
@@ -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(["
|
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["
|
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
|
-
|
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
|
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
|
1047
|
-
def
|
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.
|
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-
|
18
|
+
date: 2017-12-23 00:00:00.000000000 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: slack-notifier
|