fastlane 2.93.0.beta.20180423050019 → 2.93.0

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: '078fe46f8a677ad5f4dfabb92e7198fed7e51c0c'
4
- data.tar.gz: 7bf5c4a6376296deb38f0929b5efd80097e0d346
3
+ metadata.gz: e37fd90a866d790297bd97c66fb748ccecdc3816
4
+ data.tar.gz: 555107f3948c0880efc76cd39a749bdf7798d887
5
5
  SHA512:
6
- metadata.gz: 59f3b851e1a29f9abb8fd8f3ba6bbd2a1d2ad807e66cd1f4ae0c8c18d3373cc7089e108c6c4c312f3c6061d2b96978d7bd56202475ec09962e8277dc7b76d8d8
7
- data.tar.gz: e71224464dacda8b5b481aee9901f8ff9a45c2a604878345344ac419303de2a54d95edf63d20a104d22665e0b5a22e3961730735aacf790c2d5c40d2f1559f55
6
+ metadata.gz: 6604f75cd501ef22374eac3b39bba1a0d80acecd8bfff12af5b936dc354dee15e1a66636e364721a77c2d98e148a62164b1ed274f12559d9b6791e57b6f25645
7
+ data.tar.gz: 5e1d6d46d7b5a0bb146ab0b1956e9145ae6ae4b370ecdf8c2115ea1b7edab994d4d5a6ffd2010c100280ab5fd1ae9740606c85b668c36298fdd9bb7cf42df68e
data/README.md CHANGED
@@ -32,93 +32,61 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
32
32
 
33
33
  <table id='team'>
34
34
  <tr>
35
- <td id='andrew-mcburney'>
36
- <a href='https://github.com/AndrewMcBurney'>
37
- <img src='https://github.com/AndrewMcBurney.png?size=140'>
38
- </a>
39
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
40
- </td>
41
35
  <td id='stefan-natchev'>
42
36
  <a href='https://github.com/snatchev'>
43
37
  <img src='https://github.com/snatchev.png?size=140'>
44
38
  </a>
45
39
  <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
46
40
  </td>
47
- <td id='josh-holtz'>
48
- <a href='https://github.com/joshdholtz'>
49
- <img src='https://github.com/joshdholtz.png?size=140'>
50
- </a>
51
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
52
- </td>
53
41
  <td id='jorge-revuelta-h'>
54
42
  <a href='https://github.com/minuscorp'>
55
43
  <img src='https://github.com/minuscorp.png?size=140'>
56
44
  </a>
57
45
  <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
58
46
  </td>
59
- <td id='matthew-ellis'>
60
- <a href='https://github.com/matthewellis'>
61
- <img src='https://github.com/matthewellis.png?size=140'>
62
- </a>
63
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
64
- </td>
65
- </tr>
66
- <tr>
67
- <td id='fumiya-nakamura'>
68
- <a href='https://github.com/nafu'>
69
- <img src='https://github.com/nafu.png?size=140'>
70
- </a>
71
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
72
- </td>
73
- <td id='maksym-grebenets'>
74
- <a href='https://github.com/mgrebenets'>
75
- <img src='https://github.com/mgrebenets.png?size=140'>
47
+ <td id='manu-wallner'>
48
+ <a href='https://github.com/milch'>
49
+ <img src='https://github.com/milch.png?size=140'>
76
50
  </a>
77
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
51
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
78
52
  </td>
79
- <td id='felix-krause'>
80
- <a href='https://github.com/KrauseFx'>
81
- <img src='https://github.com/KrauseFx.png?size=140'>
53
+ <td id='luka-mirosevic'>
54
+ <a href='https://github.com/lmirosevic'>
55
+ <img src='https://github.com/lmirosevic.png?size=140'>
82
56
  </a>
83
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
57
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
84
58
  </td>
85
- <td id='jimmy-dee'>
86
- <a href='https://github.com/jdee'>
87
- <img src='https://github.com/jdee.png?size=140'>
59
+ <td id='olivier-halligon'>
60
+ <a href='https://github.com/AliSoftware'>
61
+ <img src='https://github.com/AliSoftware.png?size=140'>
88
62
  </a>
89
- <h4 align='center'>Jimmy Dee</h4>
63
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
90
64
  </td>
65
+ </tr>
66
+ <tr>
91
67
  <td id='iulian-onofrei'>
92
68
  <a href='https://github.com/revolter'>
93
69
  <img src='https://github.com/revolter.png?size=140'>
94
70
  </a>
95
71
  <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
96
72
  </td>
97
- </tr>
98
- <tr>
99
73
  <td id='kohki-miki'>
100
74
  <a href='https://github.com/giginet'>
101
75
  <img src='https://github.com/giginet.png?size=140'>
102
76
  </a>
103
77
  <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
104
78
  </td>
105
- <td id='helmut-januschka'>
106
- <a href='https://github.com/hjanuschka'>
107
- <img src='https://github.com/hjanuschka.png?size=140'>
108
- </a>
109
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
110
- </td>
111
- <td id='danielle-tomlinson'>
112
- <a href='https://github.com/DanToml'>
113
- <img src='https://github.com/DanToml.png?size=140'>
79
+ <td id='matthew-ellis'>
80
+ <a href='https://github.com/matthewellis'>
81
+ <img src='https://github.com/matthewellis.png?size=140'>
114
82
  </a>
115
- <h4 align='center'><a href='https://twitter.com/DanToml'>Danielle Tomlinson</a></h4>
83
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
116
84
  </td>
117
- <td id='joshua-liebowitz'>
118
- <a href='https://github.com/taquitos'>
119
- <img src='https://github.com/taquitos.png?size=140'>
85
+ <td id='maksym-grebenets'>
86
+ <a href='https://github.com/mgrebenets'>
87
+ <img src='https://github.com/mgrebenets.png?size=140'>
120
88
  </a>
121
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
89
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
122
90
  </td>
123
91
  <td id='aaron-brager'>
124
92
  <a href='https://github.com/getaaron'>
@@ -128,35 +96,67 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
128
96
  </td>
129
97
  </tr>
130
98
  <tr>
131
- <td id='luka-mirosevic'>
132
- <a href='https://github.com/lmirosevic'>
133
- <img src='https://github.com/lmirosevic.png?size=140'>
99
+ <td id='danielle-tomlinson'>
100
+ <a href='https://github.com/DanToml'>
101
+ <img src='https://github.com/DanToml.png?size=140'>
134
102
  </a>
135
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
103
+ <h4 align='center'><a href='https://twitter.com/DanToml'>Danielle Tomlinson</a></h4>
104
+ </td>
105
+ <td id='josh-holtz'>
106
+ <a href='https://github.com/joshdholtz'>
107
+ <img src='https://github.com/joshdholtz.png?size=140'>
108
+ </a>
109
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
110
+ </td>
111
+ <td id='fumiya-nakamura'>
112
+ <a href='https://github.com/nafu'>
113
+ <img src='https://github.com/nafu.png?size=140'>
114
+ </a>
115
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
116
+ </td>
117
+ <td id='andrew-mcburney'>
118
+ <a href='https://github.com/AndrewMcBurney'>
119
+ <img src='https://github.com/AndrewMcBurney.png?size=140'>
120
+ </a>
121
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
136
122
  </td>
123
+ <td id='helmut-januschka'>
124
+ <a href='https://github.com/hjanuschka'>
125
+ <img src='https://github.com/hjanuschka.png?size=140'>
126
+ </a>
127
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
128
+ </td>
129
+ </tr>
130
+ <tr>
137
131
  <td id='jan-piotrowski'>
138
132
  <a href='https://github.com/janpio'>
139
133
  <img src='https://github.com/janpio.png?size=140'>
140
134
  </a>
141
135
  <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
142
136
  </td>
143
- <td id='manu-wallner'>
144
- <a href='https://github.com/milch'>
145
- <img src='https://github.com/milch.png?size=140'>
146
- </a>
147
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
148
- </td>
149
137
  <td id='jérôme-lacoste'>
150
138
  <a href='https://github.com/lacostej'>
151
139
  <img src='https://github.com/lacostej.png?size=140'>
152
140
  </a>
153
141
  <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
154
142
  </td>
155
- <td id='olivier-halligon'>
156
- <a href='https://github.com/AliSoftware'>
157
- <img src='https://github.com/AliSoftware.png?size=140'>
143
+ <td id='jimmy-dee'>
144
+ <a href='https://github.com/jdee'>
145
+ <img src='https://github.com/jdee.png?size=140'>
158
146
  </a>
159
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
147
+ <h4 align='center'>Jimmy Dee</h4>
148
+ </td>
149
+ <td id='felix-krause'>
150
+ <a href='https://github.com/KrauseFx'>
151
+ <img src='https://github.com/KrauseFx.png?size=140'>
152
+ </a>
153
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
154
+ </td>
155
+ <td id='joshua-liebowitz'>
156
+ <a href='https://github.com/taquitos'>
157
+ <img src='https://github.com/taquitos.png?size=140'>
158
+ </a>
159
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
160
160
  </td>
161
161
  </tr>
162
162
  </table>
@@ -23,6 +23,7 @@ module Fastlane
23
23
  :string,
24
24
  :array_of_strings,
25
25
  :hash_of_strings,
26
+ :hash,
26
27
  :bool,
27
28
  :int
28
29
  ]
@@ -29,7 +29,7 @@ module Fastlane
29
29
  end
30
30
 
31
31
  def self.return_type
32
- :hash_of_strings
32
+ :hash
33
33
  end
34
34
 
35
35
  def self.authors
@@ -5,8 +5,6 @@ module Fastlane
5
5
 
6
6
  class UpdateInfoPlistAction < Action
7
7
  def self.run(params)
8
- require 'xcodeproj'
9
-
10
8
  # Check if parameters are set
11
9
  if params[:app_identifier] || params[:display_name] || params[:block]
12
10
  if (params[:app_identifier] || params[:display_name]) && params[:block]
@@ -34,18 +32,15 @@ module Fastlane
34
32
  # Read existing plist file
35
33
  info_plist_path = File.join(folder, "..", params[:plist_path])
36
34
  UI.user_error!("Couldn't find info plist file at path '#{info_plist_path}'") unless File.exist?(info_plist_path)
37
- plist = Xcodeproj::Plist.read_from_path(info_plist_path)
38
-
39
- # Update plist values
40
- plist['CFBundleIdentifier'] = params[:app_identifier] if params[:app_identifier]
41
- plist['CFBundleDisplayName'] = params[:display_name] if params[:display_name]
42
- params[:block].call(plist) if params[:block]
43
-
44
- # Write changes to file
45
- Xcodeproj::Plist.write_to_path(plist, info_plist_path)
46
35
 
47
- UI.success("Updated #{params[:plist_path]} 💾.")
48
- File.read(info_plist_path)
36
+ UpdatePlistAction.run(
37
+ plist_path: info_plist_path,
38
+ block: proc do |plist|
39
+ plist['CFBundleIdentifier'] = params[:app_identifier] if params[:app_identifier]
40
+ plist['CFBundleDisplayName'] = params[:display_name] if params[:display_name]
41
+ params[:block].call(plist) if params[:block]
42
+ end
43
+ )
49
44
  else
50
45
  UI.important("You haven't specified any parameters to update your plist.")
51
46
  false
@@ -131,10 +126,10 @@ module Fastlane
131
126
  'update_info_plist( # Advanced processing: find URL scheme for particular key and replace value
132
127
  xcodeproj: "path/to/Example.proj",
133
128
  plist_path: "path/to/Info.plist",
134
- block: lambda { |plist|
129
+ block: proc do |plist|
135
130
  urlScheme = plist["CFBundleURLTypes"].find{|scheme| scheme["CFBundleURLName"] == "com.acme.default-url-handler"}
136
131
  urlScheme[:CFBundleURLSchemes] = ["acme-production"]
137
- }
132
+ end
138
133
  )'
139
134
  ]
140
135
  end
@@ -0,0 +1,80 @@
1
+ module Fastlane
2
+ module Actions
3
+ module SharedValues
4
+ end
5
+
6
+ class UpdatePlistAction < Action
7
+ def self.run(params)
8
+ require 'xcodeproj'
9
+
10
+ if params[:plist_path].nil?
11
+ UI.user_error!("You must specify a plist path")
12
+ end
13
+
14
+ # Read existing plist file
15
+ plist_path = params[:plist_path]
16
+
17
+ UI.user_error!("Couldn't find plist file at path '#{plist_path}'") unless File.exist?(plist_path)
18
+ plist = Xcodeproj::Plist.read_from_path(plist_path)
19
+
20
+ params[:block].call(plist) if params[:block]
21
+
22
+ # Write changes to file
23
+ Xcodeproj::Plist.write_to_path(plist, plist_path)
24
+
25
+ UI.success("Updated #{params[:plist_path]} 💾.")
26
+ File.read(plist_path)
27
+ end
28
+
29
+ #####################################################
30
+ # @!group Documentation
31
+ #####################################################
32
+
33
+ def self.is_supported?(platform)
34
+ [:ios].include?(platform)
35
+ end
36
+
37
+ def self.description
38
+ 'Update a plist file'
39
+ end
40
+
41
+ def self.details
42
+ "This action allows you to modify any `plist` file."
43
+ end
44
+
45
+ def self.available_options
46
+ [
47
+
48
+ FastlaneCore::ConfigItem.new(key: :plist_path,
49
+ env_name: "FL_UPDATE_PLIST_PATH",
50
+ description: "Path to plist file",
51
+ optional: true),
52
+ FastlaneCore::ConfigItem.new(key: :block,
53
+ is_string: false,
54
+ description: 'A block to process plist with custom logic')
55
+
56
+ ]
57
+ end
58
+
59
+ def self.author
60
+ 'rishabhtayal'
61
+ end
62
+
63
+ def self.example_code
64
+ [
65
+ 'update_plist( # Advanced processing: find URL scheme for particular key and replace value
66
+ plist_path: "path/to/Info.plist",
67
+ block: proc do |plist|
68
+ urlScheme = plist["CFBundleURLTypes"].find{|scheme| scheme["CFBundleURLName"] == "com.acme.default-url-handler"}
69
+ urlScheme[:CFBundleURLSchemes] = ["acme-production"]
70
+ end
71
+ )'
72
+ ]
73
+ end
74
+
75
+ def self.category
76
+ :project
77
+ end
78
+ end
79
+ end
80
+ end
@@ -17,6 +17,8 @@ module Fastlane
17
17
  return process_value_as_array_of_strings(return_value: return_value)
18
18
  when :hash_of_strings
19
19
  return process_value_as_hash_of_strings(return_value: return_value)
20
+ when :hash
21
+ return process_value_as_hash_of_strings(return_value: return_value)
20
22
  else
21
23
  UI.verbose("Unknown return type defined: #{return_value_type} for value: #{return_value}")
22
24
  return process_value_as_string(return_value: return_value)
@@ -169,6 +169,14 @@ module Fastlane
169
169
  }
170
170
 
171
171
  func parseDictionary(fromString: String, function: String = #function) -> [String : String] {
172
+ return parseDictionaryHelper(fromString: fromString, function: function) as! [String: String]
173
+ }
174
+
175
+ func parseDictionary(fromString: String, function: String = #function) -> [String : Any] {
176
+ return parseDictionaryHelper(fromString: fromString, function: function)
177
+ }
178
+
179
+ func parseDictionaryHelper(fromString: String, function: String = #function) -> [String : Any] {
172
180
  verbose(message: "parsing an Array from data: \(fromString), from function: \(function)")
173
181
  let potentialDictionary: String
174
182
  if fromString.count < 2 {
@@ -177,7 +185,7 @@ func parseDictionary(fromString: String, function: String = #function) -> [Strin
177
185
  } else {
178
186
  potentialDictionary = fromString
179
187
  }
180
- let dictionary: [String : String] = try! JSONSerialization.jsonObject(with: potentialDictionary.data(using: .utf8)!, options: []) as! [String : String]
188
+ let dictionary: [String : Any] = try! JSONSerialization.jsonObject(with: potentialDictionary.data(using: .utf8)!, options: []) as! [String : Any]
181
189
  return dictionary
182
190
  }
183
191
 
@@ -53,6 +53,8 @@ module Fastlane
53
53
  return "[String]"
54
54
  when :hash_of_strings
55
55
  return "[String : String]"
56
+ when :hash
57
+ return "[String : Any]"
56
58
  when :bool
57
59
  return "Bool"
58
60
  when :int
@@ -197,6 +199,8 @@ module Fastlane
197
199
  returned_object = "parseArray(fromString: #{returned_object})"
198
200
  when :hash_of_strings
199
201
  returned_object = "parseDictionary(fromString: #{returned_object})"
202
+ when :hash
203
+ returned_object = "parseDictionary(fromString: #{returned_object})"
200
204
  when :bool
201
205
  returned_object = "parseBool(fromString: #{returned_object})"
202
206
  when :int
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.93.0.beta.20180423050019'.freeze
2
+ VERSION = '2.93.0'.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
@@ -18,4 +18,4 @@ class Deliverfile: DeliverfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.92.1
21
+ // Generated with fastlane 2.93.0
@@ -481,7 +481,7 @@ func buildApp(workspace: String? = nil,
481
481
  buildPath: String? = nil,
482
482
  archivePath: String? = nil,
483
483
  derivedDataPath: String? = nil,
484
- resultBundle: String? = nil,
484
+ resultBundle: Bool = false,
485
485
  buildlogPath: String = "~/Library/Logs/gym",
486
486
  sdk: String? = nil,
487
487
  toolchain: String? = nil,
@@ -559,7 +559,7 @@ func buildIosApp(workspace: String? = nil,
559
559
  buildPath: String? = nil,
560
560
  archivePath: String? = nil,
561
561
  derivedDataPath: String? = nil,
562
- resultBundle: String? = nil,
562
+ resultBundle: Bool = false,
563
563
  buildlogPath: String = "~/Library/Logs/gym",
564
564
  sdk: String? = nil,
565
565
  toolchain: String? = nil,
@@ -1695,7 +1695,7 @@ func gym(workspace: String? = gymfile.workspace,
1695
1695
  buildPath: String? = gymfile.buildPath,
1696
1696
  archivePath: String? = gymfile.archivePath,
1697
1697
  derivedDataPath: String? = gymfile.derivedDataPath,
1698
- resultBundle: String? = gymfile.resultBundle,
1698
+ resultBundle: Bool = gymfile.resultBundle,
1699
1699
  buildlogPath: String = gymfile.buildlogPath,
1700
1700
  sdk: String? = gymfile.sdk,
1701
1701
  toolchain: String? = gymfile.toolchain,
@@ -1975,7 +1975,7 @@ func jira(url: String,
1975
1975
  RubyCommand.Argument(name: "comment_text", value: commentText)])
1976
1976
  _ = runner.executeCommand(command)
1977
1977
  }
1978
- @discardableResult func laneContext() -> [String : String] {
1978
+ @discardableResult func laneContext() -> [String : Any] {
1979
1979
  let command = RubyCommand(commandID: "", methodName: "lane_context", className: nil, args: [])
1980
1980
  return parseDictionary(fromString: runner.executeCommand(command))
1981
1981
  }
@@ -2595,7 +2595,7 @@ func runTests(workspace: String? = nil,
2595
2595
  buildForTesting: Bool? = nil,
2596
2596
  xctestrun: String? = nil,
2597
2597
  derivedDataPath: String? = nil,
2598
- resultBundle: String? = nil,
2598
+ resultBundle: Bool = false,
2599
2599
  sdk: String? = nil,
2600
2600
  openReport: Bool = false,
2601
2601
  configuration: String? = nil,
@@ -2713,7 +2713,7 @@ func scan(workspace: String? = scanfile.workspace,
2713
2713
  buildForTesting: Bool? = scanfile.buildForTesting,
2714
2714
  xctestrun: String? = scanfile.xctestrun,
2715
2715
  derivedDataPath: String? = scanfile.derivedDataPath,
2716
- resultBundle: String? = scanfile.resultBundle,
2716
+ resultBundle: Bool = scanfile.resultBundle,
2717
2717
  sdk: String? = scanfile.sdk,
2718
2718
  openReport: Bool = scanfile.openReport,
2719
2719
  configuration: String? = scanfile.configuration,
@@ -3483,6 +3483,12 @@ func updateInfoPlist(xcodeproj: String? = nil,
3483
3483
  RubyCommand.Argument(name: "block", value: block)])
3484
3484
  _ = runner.executeCommand(command)
3485
3485
  }
3486
+ func updatePlist(plistPath: String? = nil,
3487
+ block: String) {
3488
+ let command = RubyCommand(commandID: "", methodName: "update_plist", className: nil, args: [RubyCommand.Argument(name: "plist_path", value: plistPath),
3489
+ RubyCommand.Argument(name: "block", value: block)])
3490
+ _ = runner.executeCommand(command)
3491
+ }
3486
3492
  func updateProjectCodeSigning(path: String,
3487
3493
  udid: String,
3488
3494
  uuid: String) {
@@ -3902,6 +3908,14 @@ func parseArray(fromString: String, function: String = #function) -> [String] {
3902
3908
  }
3903
3909
 
3904
3910
  func parseDictionary(fromString: String, function: String = #function) -> [String : String] {
3911
+ return parseDictionaryHelper(fromString: fromString, function: function) as! [String: String]
3912
+ }
3913
+
3914
+ func parseDictionary(fromString: String, function: String = #function) -> [String : Any] {
3915
+ return parseDictionaryHelper(fromString: fromString, function: function)
3916
+ }
3917
+
3918
+ func parseDictionaryHelper(fromString: String, function: String = #function) -> [String : Any] {
3905
3919
  verbose(message: "parsing an Array from data: \(fromString), from function: \(function)")
3906
3920
  let potentialDictionary: String
3907
3921
  if fromString.count < 2 {
@@ -3910,7 +3924,7 @@ func parseDictionary(fromString: String, function: String = #function) -> [Strin
3910
3924
  } else {
3911
3925
  potentialDictionary = fromString
3912
3926
  }
3913
- let dictionary: [String : String] = try! JSONSerialization.jsonObject(with: potentialDictionary.data(using: .utf8)!, options: []) as! [String : String]
3927
+ let dictionary: [String : Any] = try! JSONSerialization.jsonObject(with: potentialDictionary.data(using: .utf8)!, options: []) as! [String : Any]
3914
3928
  return dictionary
3915
3929
  }
3916
3930
 
@@ -3933,4 +3947,4 @@ let screengrabfile: Screengrabfile = Screengrabfile()
3933
3947
  let snapshotfile: Snapshotfile = Snapshotfile()
3934
3948
  // Please don't remove the lines below
3935
3949
  // They are used to detect outdated files
3936
- // FastlaneRunnerAPIVersion [0.9.14]
3950
+ // FastlaneRunnerAPIVersion [0.9.15]
@@ -18,4 +18,4 @@ class Gymfile: GymfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.92.1
21
+ // Generated with fastlane 2.93.0
@@ -19,7 +19,7 @@ protocol GymfileProtocol: class {
19
19
  var buildPath: String? { get }
20
20
  var archivePath: String? { get }
21
21
  var derivedDataPath: String? { get }
22
- var resultBundle: String? { get }
22
+ var resultBundle: Bool { get }
23
23
  var buildlogPath: String { get }
24
24
  var sdk: String? { get }
25
25
  var toolchain: String? { get }
@@ -60,7 +60,7 @@ extension GymfileProtocol {
60
60
  var buildPath: String? { return nil }
61
61
  var archivePath: String? { return nil }
62
62
  var derivedDataPath: String? { return nil }
63
- var resultBundle: String? { return nil }
63
+ var resultBundle: Bool { return false }
64
64
  var buildlogPath: String { return "~/Library/Logs/gym" }
65
65
  var sdk: String? { return nil }
66
66
  var toolchain: String? { return nil }
@@ -82,4 +82,4 @@ extension GymfileProtocol {
82
82
 
83
83
  // Please don't remove the lines below
84
84
  // They are used to detect outdated files
85
- // FastlaneRunnerAPIVersion [0.9.1]
85
+ // FastlaneRunnerAPIVersion [0.9.2]
@@ -18,4 +18,4 @@ class Matchfile: MatchfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.92.1
21
+ // Generated with fastlane 2.93.0
@@ -18,4 +18,4 @@ class Precheckfile: PrecheckfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.92.1
21
+ // Generated with fastlane 2.93.0
@@ -18,4 +18,4 @@ class Scanfile: ScanfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.92.1
21
+ // Generated with fastlane 2.93.0
@@ -21,7 +21,7 @@ protocol ScanfileProtocol: class {
21
21
  var buildForTesting: Bool? { get }
22
22
  var xctestrun: String? { get }
23
23
  var derivedDataPath: String? { get }
24
- var resultBundle: String? { get }
24
+ var resultBundle: Bool { get }
25
25
  var sdk: String? { get }
26
26
  var openReport: Bool { get }
27
27
  var configuration: String? { get }
@@ -63,7 +63,7 @@ extension ScanfileProtocol {
63
63
  var buildForTesting: Bool? { return nil }
64
64
  var xctestrun: String? { return nil }
65
65
  var derivedDataPath: String? { return nil }
66
- var resultBundle: String? { return nil }
66
+ var resultBundle: Bool { return false }
67
67
  var sdk: String? { return nil }
68
68
  var openReport: Bool { return false }
69
69
  var configuration: String? { return nil }
@@ -82,7 +82,6 @@ extension ScanfileProtocol {
82
82
  var failBuild: Bool { return true }
83
83
  }
84
84
 
85
-
86
85
  // Please don't remove the lines below
87
86
  // They are used to detect outdated files
88
- // FastlaneRunnerAPIVersion [0.9.1]
87
+ // FastlaneRunnerAPIVersion [0.9.2]
@@ -18,4 +18,4 @@ class Screengrabfile: ScreengrabfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.92.1
21
+ // Generated with fastlane 2.93.0
@@ -18,4 +18,4 @@ class Snapshotfile: SnapshotfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.92.1
21
+ // Generated with fastlane 2.93.0
@@ -125,7 +125,11 @@ module Gym
125
125
 
126
126
  def result_bundle_path
127
127
  unless Gym.cache[:result_bundle_path]
128
- Gym.cache[:result_bundle_path] = File.join(Gym.config[:output_directory], Gym.config[:output_name]) + ".result"
128
+ path = File.join(Gym.config[:output_directory], Gym.config[:output_name]) + ".result"
129
+ if File.directory?(path)
130
+ FileUtils.remove_dir(path)
131
+ end
132
+ Gym.cache[:result_bundle_path] = path
129
133
  end
130
134
  return Gym.cache[:result_bundle_path]
131
135
  end
@@ -158,7 +158,8 @@ module Gym
158
158
  short_option: "-u",
159
159
  env_name: "GYM_RESULT_BUNDLE",
160
160
  is_string: false,
161
- description: "Location of the Xcode result bundle",
161
+ description: "Should an Xcode result bundle be generated in the output directory",
162
+ default_value: false,
162
163
  optional: true),
163
164
  FastlaneCore::ConfigItem.new(key: :buildlog_path,
164
165
  short_option: "-l",
@@ -179,7 +179,8 @@ module Scan
179
179
  short_option: "-z",
180
180
  env_name: "SCAN_RESULT_BUNDLE",
181
181
  is_string: false,
182
- description: "Location of the Xcode result bundle",
182
+ description: "Should an Xcode result bundle be generated in the output directory",
183
+ default_value: false,
183
184
  optional: true),
184
185
  FastlaneCore::ConfigItem.new(key: :sdk,
185
186
  short_option: "-k",
@@ -140,7 +140,11 @@ module Scan
140
140
 
141
141
  def result_bundle_path
142
142
  unless Scan.cache[:result_bundle_path]
143
- Scan.cache[:result_bundle_path] = File.join(Scan.config[:output_directory], Scan.config[:scheme]) + ".test_result"
143
+ path = File.join(Scan.config[:output_directory], Scan.config[:scheme]) + ".test_result"
144
+ if File.directory?(path)
145
+ FileUtils.remove_dir(path)
146
+ end
147
+ Scan.cache[:result_bundle_path] = path
144
148
  end
145
149
  return Scan.cache[:result_bundle_path]
146
150
  end
metadata CHANGED
@@ -1,33 +1,33 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.93.0.beta.20180423050019
4
+ version: 2.93.0
5
5
  platform: ruby
6
6
  authors:
7
- - Jorge Revuelta H
8
- - Luka Mirosevic
7
+ - Stefan Natchev
8
+ - Jimmy Dee
9
+ - Felix Krause
10
+ - Matthew Ellis
9
11
  - Kohki Miki
10
12
  - Maksym Grebenets
11
- - Josh Holtz
12
13
  - Aaron Brager
13
- - Joshua Liebowitz
14
- - Helmut Januschka
15
- - Felix Krause
16
- - Andrew McBurney
17
- - Danielle Tomlinson
18
- - Fumiya Nakamura
19
- - Matthew Ellis
20
- - Manu Wallner
21
- - Iulian Onofrei
22
- - Jimmy Dee
23
14
  - Jérôme Lacoste
24
- - Stefan Natchev
15
+ - Danielle Tomlinson
16
+ - Jorge Revuelta H
17
+ - Luka Mirosevic
25
18
  - Jan Piotrowski
19
+ - Iulian Onofrei
20
+ - Helmut Januschka
21
+ - Josh Holtz
22
+ - Manu Wallner
23
+ - Andrew McBurney
26
24
  - Olivier Halligon
25
+ - Joshua Liebowitz
26
+ - Fumiya Nakamura
27
27
  autorequire:
28
28
  bindir: bin
29
29
  cert_chain: []
30
- date: 2018-04-23 00:00:00.000000000 Z
30
+ date: 2018-04-24 00:00:00.000000000 Z
31
31
  dependencies:
32
32
  - !ruby/object:Gem::Dependency
33
33
  name: slack-notifier
@@ -1133,6 +1133,7 @@ files:
1133
1133
  - fastlane/lib/fastlane/actions/update_fastlane.rb
1134
1134
  - fastlane/lib/fastlane/actions/update_icloud_container_identifiers.rb
1135
1135
  - fastlane/lib/fastlane/actions/update_info_plist.rb
1136
+ - fastlane/lib/fastlane/actions/update_plist.rb
1136
1137
  - fastlane/lib/fastlane/actions/update_project_code_signing.rb
1137
1138
  - fastlane/lib/fastlane/actions/update_project_provisioning.rb
1138
1139
  - fastlane/lib/fastlane/actions/update_project_team.rb
@@ -1636,24 +1637,24 @@ metadata:
1636
1637
  post_install_message:
1637
1638
  rdoc_options: []
1638
1639
  require_paths:
1639
- - match/lib
1640
- - spaceship/lib
1641
- - scan/lib
1642
- - fastlane/lib
1643
- - screengrab/lib
1640
+ - credentials_manager/lib
1644
1641
  - pem/lib
1642
+ - snapshot/lib
1645
1643
  - frameit/lib
1644
+ - match/lib
1646
1645
  - fastlane_core/lib
1647
- - supply/lib
1648
1646
  - deliver/lib
1649
- - sigh/lib
1650
- - precheck/lib
1647
+ - scan/lib
1648
+ - supply/lib
1649
+ - cert/lib
1650
+ - fastlane/lib
1651
+ - spaceship/lib
1651
1652
  - pilot/lib
1652
1653
  - gym/lib
1654
+ - precheck/lib
1655
+ - screengrab/lib
1656
+ - sigh/lib
1653
1657
  - produce/lib
1654
- - credentials_manager/lib
1655
- - cert/lib
1656
- - snapshot/lib
1657
1658
  required_ruby_version: !ruby/object:Gem::Requirement
1658
1659
  requirements:
1659
1660
  - - ">="
@@ -1661,12 +1662,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
1661
1662
  version: 2.0.0
1662
1663
  required_rubygems_version: !ruby/object:Gem::Requirement
1663
1664
  requirements:
1664
- - - ">"
1665
+ - - ">="
1665
1666
  - !ruby/object:Gem::Version
1666
- version: 1.3.1
1667
+ version: '0'
1667
1668
  requirements: []
1668
1669
  rubyforge_project:
1669
- rubygems_version: 2.5.2.1
1670
+ rubygems_version: 2.5.2.3
1670
1671
  signing_key:
1671
1672
  specification_version: 4
1672
1673
  summary: The easiest way to automate beta deployments and releases for your iOS and