fastlane 2.55.0.beta.20170831010002 → 2.55.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/fastlane/lib/.DS_Store +0 -0
- data/fastlane/lib/assets/ActionDetails.md.erb +57 -0
- data/fastlane/lib/assets/Actions.md.erb +5 -45
- data/fastlane/lib/fastlane/.DS_Store +0 -0
- data/fastlane/lib/fastlane/actions/.DS_Store +0 -0
- data/fastlane/lib/fastlane/actions/docs/.DS_Store +0 -0
- data/fastlane/lib/fastlane/actions/docs/assets/.DS_Store +0 -0
- data/fastlane/lib/fastlane/actions/docs/assets/cert.gif +0 -0
- data/fastlane/lib/fastlane/actions/docs/assets/cert.png +0 -0
- data/fastlane/lib/fastlane/actions/docs/assets/deliver.png +0 -0
- data/fastlane/lib/fastlane/actions/docs/assets/deliver_metadata.png +0 -0
- data/fastlane/lib/fastlane/actions/docs/assets/deliver_screenshots.png +0 -0
- data/fastlane/lib/fastlane/actions/docs/assets/gym.gif +0 -0
- data/fastlane/lib/fastlane/actions/docs/assets/gym.png +0 -0
- data/fastlane/lib/fastlane/actions/docs/assets/gymScreenshot.png +0 -0
- data/fastlane/lib/fastlane/actions/docs/cert.md +84 -0
- data/fastlane/lib/fastlane/actions/docs/deliver.md +674 -0
- data/fastlane/lib/fastlane/actions/docs/gym.md +240 -0
- data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +45 -5
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +1 -1
- metadata +35 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ee0726c4a05f996359a22ede4695e4b03e740b6
|
4
|
+
data.tar.gz: c9a9eb305d25a3f8f836d5501b8be6e15cffaf0a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79b675f9fdac9463fa618f392a37cc984f7a0a909a7929dd01bb0951125f0c9f212e229d858de595bbe44066e60b4ae4bfaeecaa8a2e1c7e6ebefe0e9b1e1864
|
7
|
+
data.tar.gz: 2ad17630e781b8540b9145c985b7ef1fc561f109dab660948d2ad4c90f9a061a1a159c6e8b9aea5830154afc31b62cca794da576947572cdb6754a091d2f3d10
|
Binary file
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# <%= @action.action_name %>
|
2
|
+
|
3
|
+
<% action = @action %>
|
4
|
+
<%= action.description %>
|
5
|
+
|
6
|
+
<%= "> #{action.deprecated_notes.gsub("\n\n", "\n")}" unless action.deprecated_notes.to_s.empty? %>
|
7
|
+
|
8
|
+
<% if @custom_content %>
|
9
|
+
<%= @custom_content %>
|
10
|
+
<hr />
|
11
|
+
<% else %>
|
12
|
+
<%= "> #{action.details.gsub("\n\n", "\n")}" unless action.details.to_s.empty? %>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<%= action.action_name %> |
|
16
|
+
-----|----
|
17
|
+
Supported platforms | <%= [:ios, :android, :mac].find_all { |a| action.is_supported?(a) }.join(", ") %>
|
18
|
+
Author | @<%= Array(action.author || action.authors).join(", @") %>
|
19
|
+
<%- unless action.return_value.to_s.empty? -%>
|
20
|
+
Returns | <%= action.return_value %>
|
21
|
+
<%- end -%>
|
22
|
+
|
23
|
+
<% if (action.example_code || []).count > 0 %>
|
24
|
+
|
25
|
+
**<%= action.example_code.count %> Example<%= (action.example_code.count > 1) ? "s" : "" %>**
|
26
|
+
<% action.example_code.each do |current_sample| %>
|
27
|
+
```ruby
|
28
|
+
<%= current_sample.gsub(" ", "") %>
|
29
|
+
```
|
30
|
+
<% end %><%# End of action.example_code... %>
|
31
|
+
<% end %><%# End of if %>
|
32
|
+
|
33
|
+
<% if action.available_options && action.available_options.first.kind_of?(FastlaneCore::ConfigItem) %>
|
34
|
+
|
35
|
+
**Parameters**
|
36
|
+
|
37
|
+
Key | Description
|
38
|
+
----|------------
|
39
|
+
<%- (action.available_options || []).each do |config_item| -%>
|
40
|
+
<%- next unless config_item.kind_of?(FastlaneCore::ConfigItem) -%>
|
41
|
+
<%- next if config_item.description.to_s.length == 0 -%>
|
42
|
+
`<%= config_item.key %>` | <%= config_item.description %>
|
43
|
+
<%- end %>
|
44
|
+
|
45
|
+
<% end %><%# End of action.available_options... %>
|
46
|
+
|
47
|
+
<hr />
|
48
|
+
To show the documentation in your terminal, run
|
49
|
+
```no-highlight
|
50
|
+
fastlane action <%= action.action_name %>
|
51
|
+
```
|
52
|
+
|
53
|
+
<a href="https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/<%= action.action_name %>.rb" target="_blank">View source code</a>
|
54
|
+
|
55
|
+
<hr />
|
56
|
+
|
57
|
+
<a href="/actions"><b>Back to actions</b></a>
|
@@ -25,51 +25,11 @@ For _fastlane_ plugins, check out the [available plugins](https://docs.fastlane.
|
|
25
25
|
<%- @categories.each do |category, actions| %>
|
26
26
|
# <%= category %>
|
27
27
|
|
28
|
+
Action | Description
|
29
|
+
---|---
|
28
30
|
<%- actions.sort.to_h.each do |_number_of_launches, action| -%>
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
<%= action.description %>
|
33
|
-
|
34
|
-
<%= "> #{action.deprecated_notes.gsub("\n\n", "\n")}" unless action.deprecated_notes.to_s.empty? %>
|
35
|
-
|
36
|
-
<%= "> #{action.details.gsub("\n\n", "\n")}" unless action.details.to_s.empty? %>
|
37
|
-
|
38
|
-
<%= action.action_name %> |
|
39
|
-
-----|----
|
40
|
-
Supported platforms | <%= [:ios, :android, :mac].find_all { |a| action.is_supported?(a) }.join(", ") %>
|
41
|
-
Author | @<%= Array(action.author || action.authors).join(", @") %>
|
42
|
-
<%- unless action.return_value.to_s.empty? -%>
|
43
|
-
Returns | <%= action.return_value %>
|
44
|
-
<%- end -%>
|
45
|
-
|
46
|
-
<% if (action.example_code || []).count > 0 %>
|
47
|
-
|
48
|
-
<details>
|
49
|
-
<summary><%= action.example_code.count %> Example<%= (action.example_code.count > 1) ? "s" : "" %></summary>
|
50
|
-
<% action.example_code.each do |current_sample| %>
|
51
|
-
```ruby
|
52
|
-
<%= current_sample.gsub(" ", "") %>
|
53
|
-
```
|
54
|
-
<% end %><%# End of action.example_code... %>
|
55
|
-
<% end %><%# End of if %>
|
56
|
-
</details>
|
57
|
-
|
58
|
-
<% if action.available_options && action.available_options.first.kind_of?(FastlaneCore::ConfigItem) %>
|
59
|
-
<details>
|
60
|
-
<summary>Parameters</summary>
|
61
|
-
|
62
|
-
Key | Description
|
63
|
-
----|------------
|
64
|
-
<%- (action.available_options || []).each do |config_item| -%>
|
65
|
-
<%- next unless config_item.kind_of?(FastlaneCore::ConfigItem) -%>
|
66
|
-
<%- next if config_item.description.to_s.length == 0 -%>
|
67
|
-
`<%= config_item.key %>` | <%= config_item.description %>
|
68
|
-
<%- end %>
|
69
|
-
</details>
|
70
|
-
|
71
|
-
<% end %><%# End of action.available_options... %>
|
72
|
-
|
73
|
-
<%- end %><%# End of actions.sort... %>
|
31
|
+
<%- link = "/actions/#{action.action_name}" -%>
|
32
|
+
<a href="<%= link %>"><%= action.action_name %></a> | <%= action.description %>
|
33
|
+
<%- end %><%# End of actions.sort... %>
|
74
34
|
|
75
35
|
<%- end %><%# End of categories.each %>
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,84 @@
|
|
1
|
+
<p align="center">
|
2
|
+
<img src="/img/actions/cert.png" width="250">
|
3
|
+
</p>
|
4
|
+
|
5
|
+
-------
|
6
|
+
<p align="center">
|
7
|
+
<a href="#why">Why?</a> •
|
8
|
+
<a href="#usage">Usage</a> •
|
9
|
+
<a href="#how-does-it-work">How does it work?</a> •
|
10
|
+
<a href="#tips">Tips</a>
|
11
|
+
</p>
|
12
|
+
|
13
|
+
-------
|
14
|
+
|
15
|
+
<h5 align="center"><code>cert</code> is part of <a href="https://fastlane.tools">fastlane</a>: The easiest way to automate beta deployments and releases for your iOS and Android apps.</h5>
|
16
|
+
|
17
|
+
![/img/actions/cert.gif](/img/actions/cert.gif)
|
18
|
+
|
19
|
+
In the gif we used `cert && sigh`, which will first create an iOS code signing certificate and then a provisioning profile for your app if _cert_ succeeded.
|
20
|
+
|
21
|
+
##### [Do you like fastlane? Be the first to know about updates and new fastlane tools](https://tinyletter.com/fastlane-tools)
|
22
|
+
|
23
|
+
# Usage
|
24
|
+
|
25
|
+
**Note**: It is recommended to use [match](/actions/match) according to the [codesigning.guide](https://codesigning.guide) for generating and maintaining your certificates. Use _cert_ directly only if you want full control over what's going on and know more about codesigning.
|
26
|
+
|
27
|
+
```
|
28
|
+
fastlane cert
|
29
|
+
```
|
30
|
+
|
31
|
+
This will check if any of the available signing certificates is installed on your local machine.
|
32
|
+
|
33
|
+
Only if a new certificate needs to be created, _cert_ will
|
34
|
+
|
35
|
+
- Create a new private key
|
36
|
+
- Create a new signing request
|
37
|
+
- Generate, downloads and installs the certificate
|
38
|
+
- Import all the generated files into your Keychain
|
39
|
+
|
40
|
+
_cert_ will never revoke your existing certificates. If you can't create any more certificates, _cert_ will raise an exception, which means, you have to revoke one of the existing certificates to make room for a new one.
|
41
|
+
|
42
|
+
|
43
|
+
You can pass your Apple ID:
|
44
|
+
|
45
|
+
```no-highlight
|
46
|
+
fastlane cert -u cert@krausefx.com
|
47
|
+
```
|
48
|
+
|
49
|
+
For a list of available commands run
|
50
|
+
|
51
|
+
```no-highlight
|
52
|
+
fastlane cert --help
|
53
|
+
```
|
54
|
+
|
55
|
+
Keep in mind, there is no way for _cert_ to download existing certificates + private keys from the Apple Developer Portal, as the private key never leaves your computer.
|
56
|
+
|
57
|
+
## Environment Variables
|
58
|
+
|
59
|
+
Run `fastlane action cert` to get a list of all available environment variables.
|
60
|
+
|
61
|
+
## Use with [_sigh_](https://github.com/fastlane/fastlane/tree/master/sigh)
|
62
|
+
|
63
|
+
_cert_ becomes really interesting when used in [_fastlane_](https://github.com/fastlane/fastlane/tree/master/fastlane) in combination with [_sigh_](https://github.com/fastlane/fastlane/tree/master/sigh).
|
64
|
+
|
65
|
+
Update your `Fastfile` to contain the following code:
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
lane :beta do
|
69
|
+
cert
|
70
|
+
sigh(force: true)
|
71
|
+
end
|
72
|
+
```
|
73
|
+
|
74
|
+
`force: true` will make sure to re-generate the provisioning profile on each run.
|
75
|
+
This will result in _sigh_ always using the correct signing certificate, which is installed on the local machine.
|
76
|
+
|
77
|
+
|
78
|
+
## How is my password stored?
|
79
|
+
_cert_ uses the [password manager](https://github.com/fastlane/fastlane/tree/master/credentials_manager) from _fastlane_. Take a look the [CredentialsManager README](https://github.com/fastlane/fastlane/blob/master/credentials_manager/README.md) for more information.
|
80
|
+
|
81
|
+
# Tips
|
82
|
+
|
83
|
+
## Use the 'Provisioning Quicklook plugin'
|
84
|
+
Download and install the [Provisioning Plugin](https://github.com/chockenberry/Provisioning) to easily preview provisioning profile files and certificates.
|
@@ -0,0 +1,674 @@
|
|
1
|
+
<p align="center">
|
2
|
+
<img src="/img/actions/deliver.png" width="250">
|
3
|
+
</p>
|
4
|
+
|
5
|
+
_deliver_ uploads screenshots, metadata and binaries to iTunes Connect. Use _deliver_ to submit your app for App Store review.
|
6
|
+
|
7
|
+
-------
|
8
|
+
|
9
|
+
<p align="center">
|
10
|
+
<a href="#features">Features</a> •
|
11
|
+
<a href="#quick-start">Quick Start</a> •
|
12
|
+
<a href="#usage">Usage</a> •
|
13
|
+
<a href="#tips">Tips</a>
|
14
|
+
</p>
|
15
|
+
|
16
|
+
-------
|
17
|
+
|
18
|
+
<h5 align="center"><code>deliver</code> is part of <a href="https://fastlane.tools">fastlane</a>: The easiest way to automate beta deployments and releases for your iOS and Android apps.</h5>
|
19
|
+
|
20
|
+
# Features
|
21
|
+
- Upload hundreds of localised screenshots completely automatically
|
22
|
+
- Upload a new ipa/pkg file to iTunes Connect without Xcode from any Mac
|
23
|
+
- Maintain your app metadata locally and push changes back to iTunes Connect
|
24
|
+
- Easily implement a real Continuous Deployment process using [fastlane](https://fastlane.tools)
|
25
|
+
- Store the configuration in git to easily deploy from **any** Mac, including your Continuous Integration server
|
26
|
+
- Get a HTML preview of the fetched metadata before uploading the app metadata and screenshots to iTC
|
27
|
+
- Automatically uses [precheck](/actions/precheck) to ensure your app has the highest chances of passing app review the first time
|
28
|
+
|
29
|
+
To upload builds to TestFlight check out [pilot](/actions/pilot).
|
30
|
+
|
31
|
+
##### [Do you like fastlane? Be the first to know about updates and new fastlane tools](https://tinyletter.com/fastlane-tools)
|
32
|
+
|
33
|
+
# Quick Start
|
34
|
+
|
35
|
+
The guide will create all the necessary files for you, using the existing app metadata from iTunes Connect.
|
36
|
+
|
37
|
+
- ```cd [your_project_folder]```
|
38
|
+
- ```fastlane deliver init```
|
39
|
+
- Enter your iTunes Connect credentials
|
40
|
+
- Enter your app identifier
|
41
|
+
- Enjoy a good drink, while the computer does all the work for you
|
42
|
+
|
43
|
+
From now on, you can run `fastlane deliver` to deploy a new update, or just upload new app metadata and screenshots.
|
44
|
+
|
45
|
+
# Usage
|
46
|
+
|
47
|
+
Check out your local `./fastlane/metadata` and `./fastlane/screenshots` folders (if you don't use [fastlane](https://fastlane.tools) it's `./metadata` instead)
|
48
|
+
|
49
|
+
![/img/actions/deliver_metadata.png](/img/actions/deliver_metadata.png)
|
50
|
+
|
51
|
+
You'll see your metadata from iTunes Connect. Feel free to store the metadata in git (not the screenshots). You can now modify it locally and push the changes back to iTunes Connect.
|
52
|
+
|
53
|
+
Run `fastlane deliver` to upload the app metadata from your local machine
|
54
|
+
|
55
|
+
```no-highlight
|
56
|
+
fastlane deliver
|
57
|
+
```
|
58
|
+
|
59
|
+
Provide the path to an `ipa` file to upload and submit your app for review:
|
60
|
+
|
61
|
+
```no-highlight
|
62
|
+
fastlane deliver --ipa "App.ipa" --submit_for_review
|
63
|
+
```
|
64
|
+
|
65
|
+
or you can specify path to `pkg` file for macOS apps:
|
66
|
+
|
67
|
+
```no-highlight
|
68
|
+
fastlane deliver --pkg "MacApp.pkg"
|
69
|
+
```
|
70
|
+
|
71
|
+
If you use [fastlane](https://fastlane.tools) you don't have to manually specify the path to your `ipa`/`pkg` file.
|
72
|
+
|
73
|
+
This is just a small sub-set of what you can do with _deliver_, check out the full documentation in [#more-options](#more-options)
|
74
|
+
|
75
|
+
Download existing screenshots from iTunes Connect
|
76
|
+
|
77
|
+
```no-highlight
|
78
|
+
fastlane deliver download_screenshots
|
79
|
+
```
|
80
|
+
|
81
|
+
Download existing metadata from iTunes Connect
|
82
|
+
|
83
|
+
```no-highlight
|
84
|
+
fastlane deliver download_metadata
|
85
|
+
```
|
86
|
+
|
87
|
+
To get a list of available options run
|
88
|
+
|
89
|
+
```no-highlight
|
90
|
+
fastlane action deliver
|
91
|
+
```
|
92
|
+
|
93
|
+
Select a previously uploaded build and submit it for review.
|
94
|
+
|
95
|
+
```no-highlight
|
96
|
+
fastlane deliver submit_build --build_number 830
|
97
|
+
```
|
98
|
+
|
99
|
+
### Use in a `Fastfile`
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
deliver
|
103
|
+
```
|
104
|
+
|
105
|
+
```ruby
|
106
|
+
deliver(
|
107
|
+
submit_for_review: true,
|
108
|
+
force: true,
|
109
|
+
metadata_path: "./metadata"
|
110
|
+
)
|
111
|
+
```
|
112
|
+
|
113
|
+
## More options
|
114
|
+
|
115
|
+
<details>
|
116
|
+
<summary>View all available options and its valid values</summary>
|
117
|
+
|
118
|
+
## Available options
|
119
|
+
|
120
|
+
All the options below can easily be added to your `Deliverfile`. The great thing: if you use _fastlane_ you can use all these options from your `Fastfile` too, for example:
|
121
|
+
|
122
|
+
```ruby
|
123
|
+
deliver(
|
124
|
+
submit_for_review: true,
|
125
|
+
metadata_path: "../folder"
|
126
|
+
)
|
127
|
+
```
|
128
|
+
|
129
|
+
##### app_identifier
|
130
|
+
The bundle identifier (e.g. "com.krausefx.app")
|
131
|
+
|
132
|
+
##### username
|
133
|
+
Your Apple ID email address
|
134
|
+
|
135
|
+
##### ipa
|
136
|
+
A path to a signed ipa file, which will be uploaded. If you don't provide this value, only app metadata will be uploaded. If you want to submit the app for review make sure to either use `fastlane deliver --submit_for_review` or add `submit_for_review true` to your `Deliverfile`
|
137
|
+
|
138
|
+
```ruby-skip-tests
|
139
|
+
ipa "App.ipa"
|
140
|
+
```
|
141
|
+
|
142
|
+
if you use [fastlane](https://fastlane.tools) the ipa file will automatically be detected.
|
143
|
+
|
144
|
+
##### pkg
|
145
|
+
A path to a signed pkg file, which will be uploaded. Submission logic of ipa applies to pkg files.
|
146
|
+
```ruby-skip-tests
|
147
|
+
pkg "MacApp.pkg"
|
148
|
+
```
|
149
|
+
|
150
|
+
##### app_version
|
151
|
+
|
152
|
+
Optional, as it is usually automatically detected. Specify the version that should be created / edited on iTunes Connect:
|
153
|
+
|
154
|
+
```ruby-skip-tests
|
155
|
+
app_version "2.0"
|
156
|
+
```
|
157
|
+
|
158
|
+
##### skip_app_version_update
|
159
|
+
|
160
|
+
In the case if _deliver_ uploads your application to iTunes Connect it will automatically update "Prepare for submission" app version (which could be found on iTunes Connect->My Apps->App Store page)
|
161
|
+
|
162
|
+
The option allows uploading your app without updating "Prepare for submission" version.
|
163
|
+
|
164
|
+
This could be useful in the case if you are generating a lot of uploads while not submitting the latest build for Apple review.
|
165
|
+
|
166
|
+
The default value is false.
|
167
|
+
|
168
|
+
```ruby-skip-tests
|
169
|
+
skip_app_version_update true
|
170
|
+
```
|
171
|
+
|
172
|
+
##### submit_for_review
|
173
|
+
|
174
|
+
Add this to your `Deliverfile` to automatically submit the app for review after uploading metadata/binary. This will select the latest build.
|
175
|
+
|
176
|
+
```ruby-skip-tests
|
177
|
+
submit_for_review true
|
178
|
+
```
|
179
|
+
|
180
|
+
##### screenshots_path
|
181
|
+
A path to a folder containing subfolders for each language. This will automatically detect the device type based on the image resolution. Also includes Watch Support.
|
182
|
+
|
183
|
+
![/img/actions/deliver_screenshots.png](/img/actions/deliver_screenshots.png)
|
184
|
+
|
185
|
+
##### metadata_path
|
186
|
+
Path to the metadata you want to use. The folder has to be structured like this
|
187
|
+
|
188
|
+
![/img/actions/deliver_metadata.png](/img/actions/deliver_metadata.png)
|
189
|
+
|
190
|
+
If you run `deliver init` this will automatically be created for you.
|
191
|
+
|
192
|
+
##### force
|
193
|
+
|
194
|
+
```ruby-skip-tests
|
195
|
+
force true
|
196
|
+
```
|
197
|
+
If set to `true`, no HTML report will be generated before the actual upload. You can also pass `--force` when calling _deliver_.
|
198
|
+
|
199
|
+
|
200
|
+
##### price_tier
|
201
|
+
Pass the price tier as number. This will be active from the current day.
|
202
|
+
```ruby-skip-tests
|
203
|
+
price_tier 0
|
204
|
+
```
|
205
|
+
##### trade_representative_contact_information
|
206
|
+
Trade Representative Contact information for Korean App Store. Available options: `first_name`, `last_name`, `address_line1`, `address_line2`, `address_line3`, `city_name`, `state`, `country`, `postal_code`, `phone_number`, `email_address`, `is_displayed_on_app_store`.
|
207
|
+
|
208
|
+
|
209
|
+
```ruby-skip-tests
|
210
|
+
trade_representative_contact_information(
|
211
|
+
first_name: "Felix",
|
212
|
+
last_name: "Krause",
|
213
|
+
address_line1: "1 Infinite Loop",
|
214
|
+
address_line2: "",
|
215
|
+
address_line3: null,
|
216
|
+
city_name: "Cupertino",
|
217
|
+
state: "California",
|
218
|
+
country: "United States",
|
219
|
+
postal_code: "95014",
|
220
|
+
phone_number: "+43 123123123",
|
221
|
+
email_address: "github@krausefx.com",
|
222
|
+
)
|
223
|
+
```
|
224
|
+
|
225
|
+
You can also provide these values by creating files in a `metadata/trade_representative_contact_information/` directory. The file names must match the pattern `<key>.txt` (e.g. `first_name.txt`, `address_line1.txt` etc.). The contents of each file will be used as the value for the matching key. Values provided in the `Deliverfile` or `Fastfile` will be take priority over values from these files.
|
226
|
+
|
227
|
+
`is_displayed_on_app_store` is the option on iTunes Connect described as: `Display Trade Representative Contact Information on the Korean App Store`
|
228
|
+
|
229
|
+
##### app_review_information
|
230
|
+
Contact information for the app review team. Available options: `first_name`, `last_name`, `phone_number`, `email_address`, `demo_user`, `demo_password`, `notes`.
|
231
|
+
|
232
|
+
|
233
|
+
```ruby-skip-tests
|
234
|
+
app_review_information(
|
235
|
+
first_name: "Felix",
|
236
|
+
last_name: "Krause",
|
237
|
+
phone_number: "+43 123123123",
|
238
|
+
email_address: "github@krausefx.com",
|
239
|
+
demo_user: "demoUser",
|
240
|
+
demo_password: "demoPass",
|
241
|
+
notes: "such notes, very text"
|
242
|
+
)
|
243
|
+
```
|
244
|
+
|
245
|
+
You can also provide these values by creating files in a `metadata/review_information/` directory. The file names must match the pattern `<key>.txt` (e.g. `first_name.txt`, `notes.txt` etc.). The contents of each file will be used as the value for the matching key. Values provided in the `Deliverfile` or `Fastfile` will be take priority over values from these files.
|
246
|
+
|
247
|
+
##### submission_information
|
248
|
+
Must be a hash. This is used as the last step for the deployment process, where you define if you use third party content or use encryption. [A list of available options](https://github.com/fastlane/fastlane/blob/master/spaceship/lib/spaceship/tunes/app_submission.rb#L18-L69).
|
249
|
+
|
250
|
+
```ruby-skip-tests
|
251
|
+
submission_information({
|
252
|
+
add_id_info_serves_ads: true,
|
253
|
+
...
|
254
|
+
})
|
255
|
+
```
|
256
|
+
|
257
|
+
##### automatic_release
|
258
|
+
Should the app be released to all users once Apple approves it? If set to `false`, you'll have to manually release the update once it got approved.
|
259
|
+
|
260
|
+
```ruby-skip-tests
|
261
|
+
automatic_release true
|
262
|
+
# or
|
263
|
+
automatic_release false
|
264
|
+
```
|
265
|
+
|
266
|
+
##### phased_release
|
267
|
+
|
268
|
+
Enable or disable the phased releases feature of iTunes Connect. If set to `true`, the update will be released over a 7 day period. Default behavior is to leave whatever you defined on iTunes Connect.
|
269
|
+
|
270
|
+
```ruby-skip-tests
|
271
|
+
phased_release true
|
272
|
+
# or
|
273
|
+
phased_release false
|
274
|
+
```
|
275
|
+
|
276
|
+
##### app_rating_config_path
|
277
|
+
You can set the app age ratings using _deliver_. You'll have to create and store a `JSON` configuration file. Copy the [template](https://github.com/fastlane/fastlane/blob/master/deliver/assets/example_rating_config.json) to your project folder and pass the path to the `JSON` file using the `app_rating_config_path` option.
|
278
|
+
|
279
|
+
The keys/values on the top allow values from 0-2, and the items on the bottom allow only 0 or 1. More information in [#reference](#reference).
|
280
|
+
|
281
|
+
|
282
|
+
## Metadata
|
283
|
+
|
284
|
+
All options below are useful if you want to specify certain app metadata in your `Deliverfile` or `Fastfile`
|
285
|
+
|
286
|
+
### Localised
|
287
|
+
|
288
|
+
Localised values should be set like this
|
289
|
+
|
290
|
+
```ruby-skip-tests
|
291
|
+
description({
|
292
|
+
'en-US' => "English Description here",
|
293
|
+
'de-DE' => "Deutsche Beschreibung hier"
|
294
|
+
})
|
295
|
+
```
|
296
|
+
|
297
|
+
##### name
|
298
|
+
The title/name of the app
|
299
|
+
|
300
|
+
##### subtitle
|
301
|
+
|
302
|
+
Localised subtitle of the app
|
303
|
+
|
304
|
+
```ruby-skip-tests
|
305
|
+
subtitle(
|
306
|
+
"en-US" => "Awesome English subtitle here",
|
307
|
+
"de-DE" => "Jetzt mit deutschen Untertiteln!"
|
308
|
+
)
|
309
|
+
```
|
310
|
+
|
311
|
+
##### description
|
312
|
+
The description of the app
|
313
|
+
|
314
|
+
##### release_notes
|
315
|
+
The release_notes (What's new / Changelog) of the latest version
|
316
|
+
|
317
|
+
##### support_url, marketing_url, privacy_url
|
318
|
+
These URLs are shown in the AppStore
|
319
|
+
|
320
|
+
##### keywords
|
321
|
+
|
322
|
+
Keywords separated using a comma.
|
323
|
+
|
324
|
+
```ruby-skip-tests
|
325
|
+
keywords(
|
326
|
+
"en-US" => "Keyword1, Keyword2"
|
327
|
+
)
|
328
|
+
```
|
329
|
+
|
330
|
+
##### promotional_text
|
331
|
+
|
332
|
+
Localised promotional text
|
333
|
+
|
334
|
+
```ruby-skip-tests
|
335
|
+
promotional_text(
|
336
|
+
"en-US" => "Hey, you should totally buy our app, it's the best",
|
337
|
+
"de-DE" => "App kaufen bitte"
|
338
|
+
)
|
339
|
+
```
|
340
|
+
|
341
|
+
##### app_icon
|
342
|
+
A path to a new app icon, which must be exactly 1024x1024px
|
343
|
+
```ruby-skip-tests
|
344
|
+
app_icon './AppIcon.png'
|
345
|
+
```
|
346
|
+
|
347
|
+
##### apple_watch_app_icon
|
348
|
+
A path to a new app icon for the Watch, which must be exactly 1024x1024px
|
349
|
+
```ruby-skip-tests
|
350
|
+
apple_watch_app_icon './AppleWatchAppIcon.png'
|
351
|
+
```
|
352
|
+
|
353
|
+
##### platform
|
354
|
+
|
355
|
+
The platform of your application (a.e. ios, osx).
|
356
|
+
|
357
|
+
This option is optional. The default value is "ios" and deliver should be able to figure out the platform from your binary.
|
358
|
+
|
359
|
+
However, in the case if multiple binaries present, you can specify a platform which you want to deliver explicitly.
|
360
|
+
|
361
|
+
The available options:
|
362
|
+
|
363
|
+
- 'ios'
|
364
|
+
- 'appletvos'
|
365
|
+
- 'osx'
|
366
|
+
|
367
|
+
|
368
|
+
### Non-Localised
|
369
|
+
|
370
|
+
##### copyright
|
371
|
+
The up to date copyright information.
|
372
|
+
```ruby-skip-tests
|
373
|
+
copyright "#{Time.now.year} Felix Krause"
|
374
|
+
```
|
375
|
+
|
376
|
+
##### primary_category
|
377
|
+
The english name of the category you want to set (e.g. `Business`, `Books`)
|
378
|
+
|
379
|
+
See [#reference](#reference) for a list of available categories
|
380
|
+
|
381
|
+
##### secondary_category
|
382
|
+
The english name of the secondary category you want to set
|
383
|
+
|
384
|
+
##### primary_first_sub_category
|
385
|
+
The english name of the primary first sub category you want to set
|
386
|
+
|
387
|
+
##### primary_second_sub_category
|
388
|
+
The english name of the primary second sub category you want to set
|
389
|
+
|
390
|
+
##### secondary_first_sub_category
|
391
|
+
The english name of the secondary first sub category you want to set
|
392
|
+
|
393
|
+
##### secondary_second_sub_category
|
394
|
+
The english name of the secondary second sub category you want to set
|
395
|
+
</details>
|
396
|
+
|
397
|
+
# Credentials
|
398
|
+
|
399
|
+
A detailed description about how your credentials are handled is available in a [credentials_manager](https://github.com/fastlane/fastlane/tree/master/credentials_manager).
|
400
|
+
|
401
|
+
### How does this thing even work? Is magic involved? 🎩
|
402
|
+
|
403
|
+
Your password will be stored in the macOS keychain, but can also be passed using environment variables. (More information available on [CredentialsManager](https://github.com/fastlane/fastlane/tree/master/credentials_manager))
|
404
|
+
|
405
|
+
Before actually uploading anything to iTunes, _deliver_ will generate a HTML summary of the collected data.
|
406
|
+
|
407
|
+
_deliver_ uses the following techniques under the hood:
|
408
|
+
|
409
|
+
- The iTMSTransporter tool is used to upload the binary to iTunes Connect. iTMSTransporter is a command line tool provided by Apple.
|
410
|
+
- For all metadata related actions _deliver_ uses [spaceship](https://github.com/fastlane/fastlane/tree/master/spaceship)
|
411
|
+
|
412
|
+
# Tips
|
413
|
+
|
414
|
+
## Available language codes
|
415
|
+
```
|
416
|
+
no, en-US, en-CA, fi, ru, zh-Hans, nl-NL, zh-Hant, en-AU, id, de-DE, sv, ko, ms, pt-BR, el, es-ES, it, fr-CA, es-MX, pt-PT, vi, th, ja, fr-FR, da, tr, en-GB
|
417
|
+
```
|
418
|
+
|
419
|
+
## Reference
|
420
|
+
|
421
|
+
<details>
|
422
|
+
<summary>View all available categories, languages, etc.</summary>
|
423
|
+
|
424
|
+
### Available Categories
|
425
|
+
|
426
|
+
You can always prefix the category using `MZGenre.` (e.g. `MZGenre.Book`). _deliver_ supports both notations.
|
427
|
+
|
428
|
+
- `Book`
|
429
|
+
- `Business`
|
430
|
+
- `Apps.Catalogs`
|
431
|
+
- `Education`
|
432
|
+
- `Entertainment`
|
433
|
+
- `Finance`
|
434
|
+
- `Apps.Food_Drink`
|
435
|
+
- `Games`
|
436
|
+
- `Healthcare_Fitness`
|
437
|
+
- `Lifestyle`
|
438
|
+
- `Medical`
|
439
|
+
- `Music`
|
440
|
+
- `Navigation`
|
441
|
+
- `News`
|
442
|
+
- `Apps.Newsstand`
|
443
|
+
- `Photography`
|
444
|
+
- `Productivity`
|
445
|
+
- `Reference`
|
446
|
+
- `Apps.Shopping`
|
447
|
+
- `SocialNetworking`
|
448
|
+
- `Sports`
|
449
|
+
- `Stickers`
|
450
|
+
- `Travel`
|
451
|
+
- `Utilities`
|
452
|
+
- `Weather`
|
453
|
+
|
454
|
+
### Available Game Subcategories
|
455
|
+
|
456
|
+
- `MZGenre.Action`
|
457
|
+
- `MZGenre.Adventure`
|
458
|
+
- `MZGenre.Arcade`
|
459
|
+
- `MZGenre.Board`
|
460
|
+
- `MZGenre.Card`
|
461
|
+
- `MZGenre.Casino`
|
462
|
+
- `MZGenre.Dice`
|
463
|
+
- `MZGenre.Educational`
|
464
|
+
- `MZGenre.Family`
|
465
|
+
- `MZGenre.Music`
|
466
|
+
- `MZGenre.Puzzle`
|
467
|
+
- `MZGenre.Racing`
|
468
|
+
- `MZGenre.RolePlaying`
|
469
|
+
- `MZGenre.Simulation`
|
470
|
+
- `MZGenre.Sports`
|
471
|
+
- `MZGenre.Strategy`
|
472
|
+
- `MZGenre.Trivia`
|
473
|
+
- `MZGenre.Word`
|
474
|
+
|
475
|
+
### Available Magazines & Newspapers Subcategories
|
476
|
+
|
477
|
+
- `MZGenre.Apps.Arts_Photography`
|
478
|
+
- `MZGenre.Apps.Automotive`
|
479
|
+
- `MZGenre.Apps.Brides_Weddings`
|
480
|
+
- `MZGenre.Apps.Business_Investing`
|
481
|
+
- `MZGenre.Apps.Childrens_Magazines`
|
482
|
+
- `MZGenre.Apps.Computers_Internet`
|
483
|
+
- `MZGenre.Apps.Cooking_Food_Drink`
|
484
|
+
- `MZGenre.Apps.Crafts_Hobbies`
|
485
|
+
- `MZGenre.Apps.Electronics_Audio`
|
486
|
+
- `MZGenre.Apps.Entertainment`
|
487
|
+
- `MZGenre.Apps.Fashion_Style`
|
488
|
+
- `MZGenre.Apps.Health_Mind_Body`
|
489
|
+
- `MZGenre.Apps.History`
|
490
|
+
- `MZGenre.Apps.Home_Garden`
|
491
|
+
- `MZGenre.Apps.Literary_Magazines_Journals`
|
492
|
+
- `MZGenre.Apps.Mens_Interest`
|
493
|
+
- `MZGenre.Apps.Movies_Music`
|
494
|
+
- `MZGenre.Apps.News_Politics`
|
495
|
+
- `MZGenre.Apps.Outdoors_Nature`
|
496
|
+
- `MZGenre.Apps.Parenting_Family`
|
497
|
+
- `MZGenre.Apps.Pets`
|
498
|
+
- `MZGenre.Apps.Professional_Trade`
|
499
|
+
- `MZGenre.Apps.Regional_News`
|
500
|
+
- `MZGenre.Apps.Science`
|
501
|
+
- `MZGenre.Apps.Sports_Leisure`
|
502
|
+
- `MZGenre.Apps.Teens`
|
503
|
+
- `MZGenre.Apps.Travel_Regional`
|
504
|
+
- `MZGenre.Apps.Womens_Interest`
|
505
|
+
|
506
|
+
### Available Stickers Subcategories
|
507
|
+
|
508
|
+
- `MZGenre.Apps.Stickers.Animals`
|
509
|
+
- `MZGenre.Apps.Stickers.Art`
|
510
|
+
- `MZGenre.Apps.Stickers.BirthdaysAndCelebrations`
|
511
|
+
- `MZGenre.Apps.Stickers.Celebrities`
|
512
|
+
- `MZGenre.Apps.Stickers.Characters`
|
513
|
+
- `MZGenre.Apps.Stickers.FoodAndDrink`
|
514
|
+
- `MZGenre.Apps.Stickers.Emotions`
|
515
|
+
- `MZGenre.Apps.Stickers.Fashion`
|
516
|
+
- `MZGenre.Apps.Stickers.Games`
|
517
|
+
- `MZGenre.Apps.Stickers.KidsAndFamily`
|
518
|
+
- `MZGenre.Apps.Stickers.MoviesAndTV`
|
519
|
+
- `MZGenre.Apps.Stickers.Music`
|
520
|
+
- `MZGenre.Apps.Stickers.People`
|
521
|
+
- `MZGenre.Apps.Stickers.Places`
|
522
|
+
- `MZGenre.Apps.Stickers.Sports`
|
523
|
+
|
524
|
+
### Available Languages
|
525
|
+
|
526
|
+
- `da`
|
527
|
+
- `de-DE`
|
528
|
+
- `el`
|
529
|
+
- `en-AU`
|
530
|
+
- `en-CA`
|
531
|
+
- `en-GB`
|
532
|
+
- `en-US`
|
533
|
+
- `es-ES`
|
534
|
+
- `es-MX`
|
535
|
+
- `fi`
|
536
|
+
- `fr-CA`
|
537
|
+
- `fr-FR`
|
538
|
+
- `id`
|
539
|
+
- `it`
|
540
|
+
- `ja`
|
541
|
+
- `ko`
|
542
|
+
- `ms`
|
543
|
+
- `nl-NL`
|
544
|
+
- `no`
|
545
|
+
- `pt-BR`
|
546
|
+
- `pt-PT`
|
547
|
+
- `ru`
|
548
|
+
- `sv`
|
549
|
+
- `th`
|
550
|
+
- `tr`
|
551
|
+
- `vi`
|
552
|
+
- `zh-Hans`
|
553
|
+
- `zh-Hant`
|
554
|
+
|
555
|
+
### Available age rating groups
|
556
|
+
|
557
|
+
#### Non Boolean
|
558
|
+
|
559
|
+
**Values**
|
560
|
+
|
561
|
+
- 0: None
|
562
|
+
- 1: Infrequent/Mild
|
563
|
+
- 2: Frequent/Intense
|
564
|
+
|
565
|
+
**Keys**
|
566
|
+
|
567
|
+
- `CARTOON_FANTASY_VIOLENCE`
|
568
|
+
- `REALISTIC_VIOLENCE`
|
569
|
+
- `PROLONGED_GRAPHIC_SADISTIC_REALISTIC_VIOLENCE`
|
570
|
+
- `PROFANITY_CRUDE_HUMOR`
|
571
|
+
- `MATURE_SUGGESTIVE`
|
572
|
+
- `HORROR`
|
573
|
+
- `MEDICAL_TREATMENT_INFO`
|
574
|
+
- `ALCOHOL_TOBACCO_DRUGS`
|
575
|
+
- `GAMBLING`
|
576
|
+
- `SEXUAL_CONTENT_NUDITY`
|
577
|
+
- `GRAPHIC_SEXUAL_CONTENT_NUDITY`
|
578
|
+
|
579
|
+
#### Boolean
|
580
|
+
|
581
|
+
**Keys**
|
582
|
+
|
583
|
+
- `UNRESTRICTED_WEB_ACCESS`
|
584
|
+
- `GAMBLING_CONTESTS`
|
585
|
+
</details>
|
586
|
+
|
587
|
+
<br />
|
588
|
+
|
589
|
+
## Default values
|
590
|
+
|
591
|
+
Deliver has a special `default` language code which allows you to provide values that are not localised, and which will be used as defaults when you don’t provide a specific localised value.
|
592
|
+
|
593
|
+
In order to use `default`, you will need to tell _deliver_ which languages your app uses. You can do this in either of two ways:
|
594
|
+
1. Create the folders named with the language in the metadata folder (i.e. fastlane/metadata/en-US or fastlane/metadata/de-DE)
|
595
|
+
2. Add the following to your `Deliverfile` `languages(['en-US','de-DE'])`
|
596
|
+
|
597
|
+
You can use this either in json within your `Deliverfile` and/or as folders in your metadata folder. _deliver_ will take the union of both language sets from the `Deliverfile` and from the metadata folder and create on single set of languages which will be enabled.
|
598
|
+
|
599
|
+
Imagine that you have localised data for the following language codes: ```en-US, de-DE, el, it```
|
600
|
+
|
601
|
+
You can set the following in your `Deliverfile`
|
602
|
+
|
603
|
+
```ruby-skip-tests
|
604
|
+
release_notes({
|
605
|
+
'default' => "Shiny and new",
|
606
|
+
'de-DE' => "glaenzend und neu"
|
607
|
+
})
|
608
|
+
```
|
609
|
+
|
610
|
+
Deliver will use "Shiny and new" for en-US, el and it.
|
611
|
+
|
612
|
+
It will use "glaenzend und neu" for de-DE.
|
613
|
+
|
614
|
+
You can do the same with folders
|
615
|
+
|
616
|
+
```
|
617
|
+
default
|
618
|
+
keywords.txt
|
619
|
+
marketing_url.txt
|
620
|
+
name.txt
|
621
|
+
privacy_url.txt
|
622
|
+
support_url.txt
|
623
|
+
release_notes.txt
|
624
|
+
en-US
|
625
|
+
description.txt
|
626
|
+
de-DE
|
627
|
+
description.txt
|
628
|
+
el
|
629
|
+
description.txt
|
630
|
+
it
|
631
|
+
description.txt
|
632
|
+
```
|
633
|
+
|
634
|
+
In this case, default values for keywords, urls, name and release notes are used in all localisations, but each language has a fully localised description
|
635
|
+
|
636
|
+
|
637
|
+
|
638
|
+
## Automatically create screenshots
|
639
|
+
|
640
|
+
If you want to integrate _deliver_ with [snapshot](https://github.com/fastlane/fastlane/tree/master/snapshot), check out [fastlane](https://fastlane.tools)!
|
641
|
+
|
642
|
+
## Jenkins integration
|
643
|
+
Detailed instructions about how to set up _deliver_ and _fastlane_ in `Jenkins` can be found in the [fastlane README](https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Jenkins.md).
|
644
|
+
|
645
|
+
## Firewall Issues
|
646
|
+
|
647
|
+
_deliver_ uses the iTunes Transporter to upload metadata and binaries. In case you are behind a firewall, you can specify a different transporter protocol using
|
648
|
+
|
649
|
+
```
|
650
|
+
DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS="-t DAV" fastlane deliver
|
651
|
+
```
|
652
|
+
|
653
|
+
## HTTP Proxy
|
654
|
+
iTunes Transporter is a Java application bundled with Xcode. In addition to utilizing the `DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS="-t DAV"`, you need to configure the transporter application to use the proxy independently from the system proxy or any environment proxy settings. You can find the configuration file within Xcode:
|
655
|
+
|
656
|
+
```bash
|
657
|
+
TOOLS_PATH=$( xcode-select -p )
|
658
|
+
REL_PATH='../Applications/Application Loader.app/Contents/itms/java/lib/net.properties'
|
659
|
+
echo "$TOOLS_PATH/$REL_PATH"
|
660
|
+
```
|
661
|
+
|
662
|
+
Add necessary proxy configuration values to the net.properties according to [Java Proxy Configuration](http://docs.oracle.com/javase/8/docs/technotes/guides/net/proxies.html).
|
663
|
+
|
664
|
+
As an alternative to editing the properties files, proxy configuration can be specified on the command line directly:
|
665
|
+
|
666
|
+
```bash
|
667
|
+
DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS="-t DAV -Dhttp.proxyHost=myproxy.com -Dhttp.proxyPort=8080"
|
668
|
+
```
|
669
|
+
|
670
|
+
## Limit
|
671
|
+
iTunes Connect has a limit of 150 binary uploads per day.
|
672
|
+
|
673
|
+
## Editing the `Deliverfile`
|
674
|
+
Change syntax highlighting to *Ruby*.
|
@@ -0,0 +1,240 @@
|
|
1
|
+
<p align="center">
|
2
|
+
<img src="/img/actions/gym.png" width="250">
|
3
|
+
</p>
|
4
|
+
|
5
|
+
-------
|
6
|
+
|
7
|
+
<p align="center">
|
8
|
+
<a href="#whats-gym">Features</a> •
|
9
|
+
<a href="#usage">Usage</a> •
|
10
|
+
<a href="#tips">Tips</a>
|
11
|
+
</p>
|
12
|
+
|
13
|
+
-------
|
14
|
+
|
15
|
+
<h5 align="center"><code>gym</code> is part of <a href="https://fastlane.tools">fastlane</a>: The easiest way to automate beta deployments and releases for your iOS and Android apps.</h5>
|
16
|
+
|
17
|
+
# What's gym?
|
18
|
+
|
19
|
+
_gym_ builds and packages iOS apps for you. It takes care of all the heavy lifting and makes it super easy to generate a signed `ipa` or `app` file :muscle:
|
20
|
+
|
21
|
+
_gym_ is a replacement for [shenzhen](https://github.com/nomad/shenzhen).
|
22
|
+
|
23
|
+
### Before _gym_
|
24
|
+
|
25
|
+
```
|
26
|
+
xcodebuild clean archive -archivePath build/MyApp \
|
27
|
+
-scheme MyApp
|
28
|
+
xcodebuild -exportArchive \
|
29
|
+
-exportFormat ipa \
|
30
|
+
-archivePath "build/MyApp.xcarchive" \
|
31
|
+
-exportPath "build/MyApp.ipa" \
|
32
|
+
-exportProvisioningProfile "ProvisioningProfileName"
|
33
|
+
```
|
34
|
+
|
35
|
+
### With _gym_
|
36
|
+
|
37
|
+
```
|
38
|
+
fastlane gym
|
39
|
+
```
|
40
|
+
|
41
|
+
### Why _gym_?
|
42
|
+
|
43
|
+
_gym_ uses the latest APIs to build and sign your application which results in much faster build times.
|
44
|
+
|
45
|
+
| | Gym Features |
|
46
|
+
|----------|----------------|
|
47
|
+
:rocket: | _gym_ builds 30% faster than other build tools like [shenzhen](https://github.com/nomad/shenzhen)
|
48
|
+
:checkered_flag: | Beautiful inline build output
|
49
|
+
:book: | Helps you resolve common build errors like code signing issues
|
50
|
+
:mountain_cableway: | Sensible defaults: Automatically detect the project, its schemes and more
|
51
|
+
:link: | Works perfectly with [fastlane](https://fastlane.tools) and other tools
|
52
|
+
:package: | Automatically generates an `ipa` and a compressed `dSYM` file
|
53
|
+
:bullettrain_side: | Don't remember any complicated build commands, just _gym_
|
54
|
+
:wrench: | Easy and dynamic configuration using parameters and environment variables
|
55
|
+
:floppy_disk: | Store common build settings in a `Gymfile`
|
56
|
+
:outbox_tray: | All archives are stored and accessible in the Xcode Organizer
|
57
|
+
:computer: | Supports both iOS and Mac applications
|
58
|
+
|
59
|
+
![/img/actions/gymScreenshot.png](/img/actions/gymScreenshot.png)
|
60
|
+
|
61
|
+
-----
|
62
|
+
|
63
|
+
![/img/actions/gym.gif](/img/actions/gym.gif)
|
64
|
+
|
65
|
+
# Usage
|
66
|
+
|
67
|
+
```no-highlight
|
68
|
+
fastlane gym
|
69
|
+
```
|
70
|
+
|
71
|
+
That's all you need to build your application. If you want more control, here are some available parameters:
|
72
|
+
|
73
|
+
```no-highlight
|
74
|
+
fastlane gym --workspace "Example.xcworkspace" --scheme "AppName" --clean
|
75
|
+
```
|
76
|
+
|
77
|
+
If you need to use a different Xcode installation, use `xcode-select` or define `DEVELOPER_DIR`:
|
78
|
+
|
79
|
+
```no-highlight
|
80
|
+
DEVELOPER_DIR="/Applications/Xcode6.2.app" fastlane gym
|
81
|
+
```
|
82
|
+
|
83
|
+
For a list of all available parameters use
|
84
|
+
|
85
|
+
```
|
86
|
+
fastlane action gym
|
87
|
+
```
|
88
|
+
|
89
|
+
If you run into any issues, use the `verbose` mode to get more information
|
90
|
+
|
91
|
+
```no-highlight
|
92
|
+
fastlane gym --verbose
|
93
|
+
```
|
94
|
+
|
95
|
+
Set the right export method if you're not uploading to App Store or TestFlight:
|
96
|
+
|
97
|
+
```no-highlight
|
98
|
+
fastlane gym --export_method ad-hoc
|
99
|
+
```
|
100
|
+
|
101
|
+
To pass boolean parameters make sure to use _gym_ like this:
|
102
|
+
|
103
|
+
```no-highlight
|
104
|
+
fastlane gym --include_bitcode true --include_symbols false
|
105
|
+
```
|
106
|
+
|
107
|
+
To access the raw `xcodebuild` output open `~/Library/Logs/gym`
|
108
|
+
|
109
|
+
# Gymfile
|
110
|
+
|
111
|
+
Since you might want to manually trigger a new build but don't want to specify all the parameters every time, you can store your defaults in a so called `Gymfile`.
|
112
|
+
|
113
|
+
Run `fastlane gym init` to create a new configuration file. Example:
|
114
|
+
|
115
|
+
```ruby-skip-tests
|
116
|
+
scheme "Example"
|
117
|
+
|
118
|
+
sdk "iphoneos9.0"
|
119
|
+
|
120
|
+
clean true
|
121
|
+
|
122
|
+
output_directory "./build" # store the ipa in this folder
|
123
|
+
output_name "MyApp" # the name of the ipa file
|
124
|
+
```
|
125
|
+
|
126
|
+
## Export options
|
127
|
+
|
128
|
+
Since Xcode 7, _gym_ is using new Xcode API which allows us to specify export options using `plist` file. By default _gym_ creates this file for you and you are able to modify some parameters by using `export_method`, `export_team_id`, `include_symbols` or `include_bitcode`. If you want to have more options, like creating manifest file for app thinning, you can provide your own `plist` file:
|
129
|
+
|
130
|
+
```ruby-skip-tests
|
131
|
+
export_options "./ExportOptions.plist"
|
132
|
+
```
|
133
|
+
|
134
|
+
or you can provide hash of values directly in the `Gymfile`:
|
135
|
+
|
136
|
+
```ruby-skip-tests
|
137
|
+
export_options(
|
138
|
+
method: "ad-hoc",
|
139
|
+
manifest: {
|
140
|
+
appURL: "https://example.com/My App.ipa",
|
141
|
+
},
|
142
|
+
thinning: "<thin-for-all-variants>"
|
143
|
+
)
|
144
|
+
```
|
145
|
+
|
146
|
+
Optional: If _gym_ can't automatically detect the provisioning profiles to use, you can pass a mapping of bundle identifiers to provisioning profiles:
|
147
|
+
|
148
|
+
```ruby-skip-tests
|
149
|
+
export_options(
|
150
|
+
method: "app-store",
|
151
|
+
provisioningProfiles: {
|
152
|
+
"com.example.bundleid" => "Provisioning Profile Name",
|
153
|
+
"com.example.bundleid2" => "Provisioning Profile Name 2"
|
154
|
+
}
|
155
|
+
)
|
156
|
+
```
|
157
|
+
|
158
|
+
**Note**: If you use [fastlane](https://fastlane.tools) with [match](https://fastlane.tools/match) you don't need to provide those values manually.
|
159
|
+
|
160
|
+
For the list of available options run `xcodebuild -help`.
|
161
|
+
|
162
|
+
## Setup code signing
|
163
|
+
|
164
|
+
- [More information on how to get started with codesigning](https://docs.fastlane.tools/codesigning/getting-started/)
|
165
|
+
- [Docs on how to set up your Xcode project](https://docs.fastlane.tools/codesigning/xcode-project/)
|
166
|
+
|
167
|
+
## Automating the whole process
|
168
|
+
|
169
|
+
_gym_ works great together with [fastlane](https://fastlane.tools), which connects all deployment tools into one streamlined workflow.
|
170
|
+
|
171
|
+
Using _fastlane_ you can define a configuration like
|
172
|
+
|
173
|
+
```ruby
|
174
|
+
lane :beta do
|
175
|
+
scan
|
176
|
+
gym(scheme: "MyApp")
|
177
|
+
crashlytics
|
178
|
+
end
|
179
|
+
|
180
|
+
# error block is executed when a error occurs
|
181
|
+
error do |lane, exception|
|
182
|
+
slack(
|
183
|
+
# message with short human friendly message
|
184
|
+
message: exception.to_s,
|
185
|
+
success: false,
|
186
|
+
# Output containing extended log output
|
187
|
+
payload: { "Output" => exception.error_info.to_s }
|
188
|
+
)
|
189
|
+
end
|
190
|
+
```
|
191
|
+
|
192
|
+
When _gym_ raises an error the `error_info` property will contain the process output
|
193
|
+
in case you want to display the error in 3rd party tools such as Slack.
|
194
|
+
|
195
|
+
You can then easily switch between the beta provider (e.g. `testflight`, `hockey`, `s3` and more).
|
196
|
+
|
197
|
+
For more information visit the [fastlane GitHub page](https://github.com/fastlane/fastlane/tree/master/fastlane).
|
198
|
+
|
199
|
+
# How does it work?
|
200
|
+
|
201
|
+
_gym_ uses the latest APIs to build and sign your application. The 2 main components are
|
202
|
+
|
203
|
+
- `xcodebuild`
|
204
|
+
- [xcpretty](https://github.com/supermarin/xcpretty)
|
205
|
+
|
206
|
+
When you run _gym_ without the `--silent` mode it will print out every command it executes.
|
207
|
+
|
208
|
+
To build the archive _gym_ uses the following command:
|
209
|
+
|
210
|
+
```
|
211
|
+
set -o pipefail && \
|
212
|
+
xcodebuild -scheme 'Example' \
|
213
|
+
-project './Example.xcodeproj' \
|
214
|
+
-configuration 'Release' \
|
215
|
+
-destination 'generic/platform=iOS' \
|
216
|
+
-archivePath '/Users/felixkrause/Library/Developer/Xcode/Archives/2015-08-11/ExampleProductName 2015-08-11 18.15.30.xcarchive' \
|
217
|
+
archive | xcpretty
|
218
|
+
```
|
219
|
+
|
220
|
+
After building the archive it is being checked by _gym_. If it's valid, it gets packaged up and signed into an `ipa` file.
|
221
|
+
|
222
|
+
_gym_ automatically chooses a different packaging method depending on the version of Xcode you're using.
|
223
|
+
|
224
|
+
### Xcode 7 and above
|
225
|
+
|
226
|
+
```
|
227
|
+
/usr/bin/xcrun path/to/xcbuild-safe.sh -exportArchive \
|
228
|
+
-exportOptionsPlist '/tmp/gym_config_1442852529.plist' \
|
229
|
+
-archivePath '/Users/fkrause/Library/Developer/Xcode/Archives/2015-09-21/App 2015-09-21 09.21.56.xcarchive' \
|
230
|
+
-exportPath '/tmp/1442852529'
|
231
|
+
```
|
232
|
+
|
233
|
+
_gym_ makes use of the new Xcode 7 API which allows us to specify the export options using a `plist` file. You can find more information about the available options by running `xcodebuild --help`.
|
234
|
+
|
235
|
+
Using this method there are no workarounds for WatchKit or Swift required, as it uses the same technique Xcode uses when exporting your binary.
|
236
|
+
|
237
|
+
Note: the [xcbuild-safe.sh script](https://github.com/fastlane/fastlane/tree/master/gym/lib//img/actions/wrap_xcodebuild/xcbuild-safe.sh) wraps around xcodebuild to workaround some incompatibilities.
|
238
|
+
|
239
|
+
## Use the 'Provisioning Quicklook plugin'
|
240
|
+
Download and install the [Provisioning Plugin](https://github.com/chockenberry/Provisioning).
|
@@ -43,14 +43,54 @@ module Fastlane
|
|
43
43
|
@_launches ||= JSON.parse(File.read(File.join(Fastlane::ROOT, "assets/action_ranking.json"))) # root because we're in a temporary directory here
|
44
44
|
end
|
45
45
|
|
46
|
-
def generate!(target_path:
|
47
|
-
|
46
|
+
def generate!(target_path: nil)
|
47
|
+
require 'yaml'
|
48
|
+
FileUtils.mkdir_p(target_path)
|
49
|
+
docs_dir = File.join(target_path, "docs")
|
50
|
+
custom_action_docs = "lib/fastlane/actions/docs/"
|
48
51
|
|
52
|
+
# Generate actions.md
|
53
|
+
template = File.join(Fastlane::ROOT, "lib/assets/Actions.md.erb")
|
49
54
|
result = ERB.new(File.read(template), 0, '-').result(binding) # http://www.rrn.dk/rubys-erb-templating-system
|
50
|
-
|
55
|
+
File.write(File.join(docs_dir, "actions.md"), result)
|
56
|
+
|
57
|
+
# Generate actions sub pages (e.g. actions/slather.md, actions/scan.md)
|
58
|
+
all_actions_ref_yml = []
|
59
|
+
FileUtils.mkdir_p(File.join(docs_dir, "actions"))
|
60
|
+
ActionsList.all_actions do |action|
|
61
|
+
# check if there is a custom detail view in markdown available in the fastlane code base
|
62
|
+
custom_file_location = File.join(Fastlane::ROOT, custom_action_docs, "#{action.action_name}.md")
|
63
|
+
@custom_content = nil # important, as we're in a loop and using @ variables
|
64
|
+
if File.exist?(custom_file_location)
|
65
|
+
UI.verbose("Using custom md file for action #{action.action_name}")
|
66
|
+
@custom_content = File.read(custom_file_location)
|
67
|
+
end
|
68
|
+
|
69
|
+
template = File.join(Fastlane::ROOT, "lib/assets/ActionDetails.md.erb")
|
70
|
+
@action = action # to provide a reference in the .html.erb template
|
71
|
+
result = ERB.new(File.read(template), 0, '-').result(binding) # http://www.rrn.dk/rubys-erb-templating-system
|
72
|
+
|
73
|
+
file_name = File.join("actions", "#{action.action_name}.md")
|
74
|
+
File.write(File.join(docs_dir, file_name), result)
|
75
|
+
|
76
|
+
all_actions_ref_yml << { action.action_name => file_name }
|
77
|
+
end
|
78
|
+
|
79
|
+
# Modify the mkdocs.yml to list all the actions
|
80
|
+
mkdocs_yml_path = File.join(target_path, "mkdocs.yml")
|
81
|
+
raise "Could not find mkdocs.yml in #{target_path}, make sure to point to the fastlane/docs repo" unless File.exist?(mkdocs_yml_path)
|
82
|
+
mkdocs_yml = YAML.load_file(mkdocs_yml_path)
|
83
|
+
hidden_actions_array = mkdocs_yml["pages"].find { |p| !p["_Actions"].nil? }
|
84
|
+
hidden_actions_array["_Actions"] = all_actions_ref_yml
|
85
|
+
File.write(mkdocs_yml_path, mkdocs_yml.to_yaml)
|
86
|
+
|
87
|
+
# Copy over the assets from the `actions/docs/assets` directory
|
88
|
+
Dir[File.join(custom_action_docs, "assets", "*")].each do |current_asset_path|
|
89
|
+
UI.message("Copying asset #{current_asset_path}")
|
90
|
+
FileUtils.cp(current_asset_path, File.join(docs_dir, "img", "actions", File.basename(current_asset_path)))
|
91
|
+
end
|
51
92
|
|
52
|
-
|
53
|
-
UI.success(target_path)
|
93
|
+
UI.success("Generated new docs on path #{target_path}")
|
54
94
|
end
|
55
95
|
|
56
96
|
private
|
@@ -152,7 +152,7 @@ module Snapshot
|
|
152
152
|
hash[name] = ["No tests were executed"]
|
153
153
|
else
|
154
154
|
tests = Array(summary.data.first[:tests])
|
155
|
-
hash[name] = tests.map { |test| test[:failures].map { |failure| failure[:failure_message] } }.flatten
|
155
|
+
hash[name] = tests.map { |test| Array(test[:failures]).map { |failure| failure[:failure_message] } }.flatten
|
156
156
|
end
|
157
157
|
end
|
158
158
|
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.55.0
|
4
|
+
version: 2.55.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
@@ -828,6 +828,8 @@ files:
|
|
828
828
|
- deliver/lib/deliver/upload_price_tier.rb
|
829
829
|
- deliver/lib/deliver/upload_screenshots.rb
|
830
830
|
- fastlane/README.md
|
831
|
+
- fastlane/lib/.DS_Store
|
832
|
+
- fastlane/lib/assets/ActionDetails.md.erb
|
831
833
|
- fastlane/lib/assets/Actions.md.erb
|
832
834
|
- fastlane/lib/assets/AppfileTemplate
|
833
835
|
- fastlane/lib/assets/AppfileTemplateAndroid
|
@@ -844,8 +846,10 @@ files:
|
|
844
846
|
- fastlane/lib/assets/s3_plist_template.erb
|
845
847
|
- fastlane/lib/assets/s3_version_template.erb
|
846
848
|
- fastlane/lib/fastlane.rb
|
849
|
+
- fastlane/lib/fastlane/.DS_Store
|
847
850
|
- fastlane/lib/fastlane/action.rb
|
848
851
|
- fastlane/lib/fastlane/action_collector.rb
|
852
|
+
- fastlane/lib/fastlane/actions/.DS_Store
|
849
853
|
- fastlane/lib/fastlane/actions/README.md
|
850
854
|
- fastlane/lib/fastlane/actions/actions_helper.rb
|
851
855
|
- fastlane/lib/fastlane/actions/adb.rb
|
@@ -890,6 +894,19 @@ files:
|
|
890
894
|
- fastlane/lib/fastlane/actions/deliver.rb
|
891
895
|
- fastlane/lib/fastlane/actions/deploygate.rb
|
892
896
|
- fastlane/lib/fastlane/actions/device_grid/README.md
|
897
|
+
- fastlane/lib/fastlane/actions/docs/.DS_Store
|
898
|
+
- fastlane/lib/fastlane/actions/docs/assets/.DS_Store
|
899
|
+
- fastlane/lib/fastlane/actions/docs/assets/cert.gif
|
900
|
+
- fastlane/lib/fastlane/actions/docs/assets/cert.png
|
901
|
+
- fastlane/lib/fastlane/actions/docs/assets/deliver.png
|
902
|
+
- fastlane/lib/fastlane/actions/docs/assets/deliver_metadata.png
|
903
|
+
- fastlane/lib/fastlane/actions/docs/assets/deliver_screenshots.png
|
904
|
+
- fastlane/lib/fastlane/actions/docs/assets/gym.gif
|
905
|
+
- fastlane/lib/fastlane/actions/docs/assets/gym.png
|
906
|
+
- fastlane/lib/fastlane/actions/docs/assets/gymScreenshot.png
|
907
|
+
- fastlane/lib/fastlane/actions/docs/cert.md
|
908
|
+
- fastlane/lib/fastlane/actions/docs/deliver.md
|
909
|
+
- fastlane/lib/fastlane/actions/docs/gym.md
|
893
910
|
- fastlane/lib/fastlane/actions/dotgpg_environment.rb
|
894
911
|
- fastlane/lib/fastlane/actions/download.rb
|
895
912
|
- fastlane/lib/fastlane/actions/download_dsyms.rb
|
@@ -1430,24 +1447,24 @@ metadata:
|
|
1430
1447
|
post_install_message:
|
1431
1448
|
rdoc_options: []
|
1432
1449
|
require_paths:
|
1433
|
-
- spaceship/lib
|
1434
|
-
- scan/lib
|
1435
|
-
- sigh/lib
|
1436
|
-
- snapshot/lib
|
1437
|
-
- screengrab/lib
|
1438
|
-
- fastlane/lib
|
1439
1450
|
- cert/lib
|
1440
|
-
-
|
1441
|
-
- gym/lib
|
1442
|
-
- produce/lib
|
1451
|
+
- credentials_manager/lib
|
1443
1452
|
- deliver/lib
|
1444
|
-
-
|
1445
|
-
-
|
1453
|
+
- fastlane/lib
|
1454
|
+
- fastlane_core/lib
|
1446
1455
|
- frameit/lib
|
1447
|
-
-
|
1456
|
+
- gym/lib
|
1457
|
+
- match/lib
|
1458
|
+
- pem/lib
|
1448
1459
|
- pilot/lib
|
1449
1460
|
- precheck/lib
|
1450
|
-
-
|
1461
|
+
- produce/lib
|
1462
|
+
- scan/lib
|
1463
|
+
- screengrab/lib
|
1464
|
+
- sigh/lib
|
1465
|
+
- snapshot/lib
|
1466
|
+
- spaceship/lib
|
1467
|
+
- supply/lib
|
1451
1468
|
required_ruby_version: !ruby/object:Gem::Requirement
|
1452
1469
|
requirements:
|
1453
1470
|
- - ">="
|
@@ -1455,14 +1472,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
1455
1472
|
version: 2.0.0
|
1456
1473
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
1457
1474
|
requirements:
|
1458
|
-
- - "
|
1475
|
+
- - ">="
|
1459
1476
|
- !ruby/object:Gem::Version
|
1460
|
-
version:
|
1477
|
+
version: '0'
|
1461
1478
|
requirements: []
|
1462
1479
|
rubyforge_project:
|
1463
|
-
rubygems_version: 2.
|
1480
|
+
rubygems_version: 2.6.8
|
1464
1481
|
signing_key:
|
1465
1482
|
specification_version: 4
|
1466
1483
|
summary: The easiest way to automate beta deployments and releases for your iOS and
|
1467
1484
|
Android apps
|
1468
1485
|
test_files: []
|
1486
|
+
has_rdoc:
|