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 +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
|