match 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +80 -49
- data/lib/assets/READMETemplate.md +4 -4
- data/lib/match/change_password.rb +1 -1
- data/lib/match/encrypt.rb +4 -3
- data/lib/match/generator.rb +1 -1
- data/lib/match/git_helper.rb +2 -2
- data/lib/match/nuke.rb +1 -1
- data/lib/match/options.rb +6 -1
- data/lib/match/runner.rb +3 -3
- data/lib/match/setup.rb +1 -1
- data/lib/match/spaceship_ensure.rb +3 -3
- data/lib/match/version.rb +1 -1
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df1e7e16c1bea87686170b8eca6d89374b37b5cd
|
4
|
+
data.tar.gz: bd8c7122679a6d5e00571c2341737326b454d84e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a7c5eb02cd895ef2aa3f76cc6b0c163324b381e0f21d7be45b7bf88fe00c220e8c3adfe9b2159e174705eb8ca972b0dba36f2c4f266da387d35b560dbcb849ab
|
7
|
+
data.tar.gz: 561c98b7d1a23baa493fb92796fd94d9aa92d987549ed6ccbb4c419793f60e4bbc48c894ad78192cb0f2aeb723d361260359d6ccc4027b90b0552b512e262524
|
data/README.md
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
<h3 align="center">
|
2
|
-
<a href="https://github.com/fastlane/fastlane">
|
3
|
-
<img src="assets/fastlane.png" width="150" />
|
2
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/fastlane">
|
3
|
+
<img src="../fastlane/assets/fastlane.png" width="150" />
|
4
4
|
<br />
|
5
5
|
fastlane
|
6
6
|
</a>
|
7
7
|
</h3>
|
8
8
|
<p align="center">
|
9
|
-
<a href="https://github.com/fastlane/deliver">deliver</a> •
|
10
|
-
<a href="https://github.com/fastlane/snapshot">snapshot</a> •
|
11
|
-
<a href="https://github.com/fastlane/frameit">frameit</a> •
|
12
|
-
<a href="https://github.com/fastlane/pem">pem</a> •
|
13
|
-
<a href="https://github.com/fastlane/sigh">sigh</a> •
|
14
|
-
<a href="https://github.com/fastlane/produce">produce</a> •
|
15
|
-
<a href="https://github.com/fastlane/cert">cert</a> •
|
16
|
-
<a href="https://github.com/fastlane/spaceship">spaceship</a> •
|
17
|
-
<a href="https://github.com/fastlane/pilot">pilot</a> •
|
9
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/deliver">deliver</a> •
|
10
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/snapshot">snapshot</a> •
|
11
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/frameit">frameit</a> •
|
12
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/pem">pem</a> •
|
13
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/sigh">sigh</a> •
|
14
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/produce">produce</a> •
|
15
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/cert">cert</a> •
|
16
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/spaceship">spaceship</a> •
|
17
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/pilot">pilot</a> •
|
18
18
|
<a href="https://github.com/fastlane/boarding">boarding</a> •
|
19
|
-
<a href="https://github.com/fastlane/gym">gym</a> •
|
20
|
-
<a href="https://github.com/fastlane/scan">scan</a> •
|
19
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/gym">gym</a> •
|
20
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/scan">scan</a> •
|
21
21
|
<b>match</b>
|
22
22
|
</p>
|
23
23
|
-------
|
@@ -29,8 +29,10 @@
|
|
29
29
|
match
|
30
30
|
============
|
31
31
|
|
32
|
-
[![
|
32
|
+
[![Twitter: @FastlaneTools](https://img.shields.io/badge/contact-@FastlaneTools-blue.svg?style=flat)](https://twitter.com/FastlaneTools)
|
33
|
+
[![License](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/fastlane/fastlane/blob/master/match/LICENSE)
|
33
34
|
[![Gem](https://img.shields.io/gem/v/match.svg?style=flat)](http://rubygems.org/gems/match)
|
35
|
+
[![Build Status](https://img.shields.io/circleci/project/fastlane/fastlane/master.svg?style=flat)](https://circleci.com/gh/fastlane/fastlane)
|
34
36
|
|
35
37
|
###### Easily sync your certificates and profiles across your team using git
|
36
38
|
|
@@ -38,10 +40,10 @@ A new approach to iOS code signing: Share one code signing identity across your
|
|
38
40
|
|
39
41
|
-------
|
40
42
|
<p align="center">
|
41
|
-
<a href="#why-match">Why?</a> •
|
42
|
-
<a href="#installation">Installation</a> •
|
43
|
-
<a href="#usage">Usage</a> •
|
44
|
-
<a href="#is-this-secure">Is this secure?</a> •
|
43
|
+
<a href="#why-match">Why?</a> •
|
44
|
+
<a href="#installation">Installation</a> •
|
45
|
+
<a href="#usage">Usage</a> •
|
46
|
+
<a href="#is-this-secure">Is this secure?</a> •
|
45
47
|
<a href="#need-help">Need help?</a>
|
46
48
|
</p>
|
47
49
|
|
@@ -51,7 +53,7 @@ A new approach to iOS code signing: Share one code signing identity across your
|
|
51
53
|
|
52
54
|
## Why match?
|
53
55
|
|
54
|
-
Before starting to use `match`, make sure to read the [codesigning.guide](https://codesigning.guide)
|
56
|
+
Before starting to use `match`, make sure to read the [codesigning.guide](https://codesigning.guide)
|
55
57
|
|
56
58
|
> When deploying an app to the App Store, beta testing service or even installing it on a device, most development teams have separate code signing identities for every member. This results in dozens of profiles including a lot of duplicates.
|
57
59
|
|
@@ -81,9 +83,9 @@ Before starting to use `match`, make sure to read the [codesigning.guide](https:
|
|
81
83
|
:lock: | You have full control over your files and Git repo, no third party service involved
|
82
84
|
:sparkles: | Provisioning profile will always match the correct certificate
|
83
85
|
:boom: | Easily reset your existing profiles and certificates if your current account has expired or invalid profiles
|
84
|
-
:recycle: | Automatically renew your provisioning profiles to include all your devices using the `--force`
|
86
|
+
:recycle: | Automatically renew your provisioning profiles to include all your devices using the `--force` option
|
85
87
|
:busts_in_silhouette: | Support for multiple Apple accounts and multiple teams
|
86
|
-
:sparkles: | Tightly integrated with [fastlane](https://fastlane.tools) to work seamlessly with [gym](https://github.com/fastlane/gym) and other build tools
|
88
|
+
:sparkles: | Tightly integrated with [fastlane](https://fastlane.tools) to work seamlessly with [gym](https://github.com/fastlane/fastlane/tree/master/gym) and other build tools
|
87
89
|
|
88
90
|
For more information about the concept, visit [codesigning.guide](https://codesigning.guide).
|
89
91
|
|
@@ -115,14 +117,14 @@ match init
|
|
115
117
|
|
116
118
|
You'll be asked to enter the URL to your Git repo. This can be either a `https://` or a `git` URL. `match init` won't read or modify your certificates or profiles.
|
117
119
|
|
118
|
-
This will create a `Matchfile` in your current directory (or in your `./fastlane/` folder).
|
120
|
+
This will create a `Matchfile` in your current directory (or in your `./fastlane/` folder).
|
119
121
|
|
120
122
|
Example content (for more advanced setups check out the [fastlane section](#fastlane)):
|
121
123
|
|
122
124
|
```ruby
|
123
|
-
git_url "https://github.com/fastlane/certificates"
|
125
|
+
git_url "https://github.com/fastlane/fastlane/tree/master/certificates"
|
124
126
|
|
125
|
-
app_identifier "tools.fastlane.app"
|
127
|
+
app_identifier "tools.fastlane.app"
|
126
128
|
username "user@fastlane.tools"
|
127
129
|
```
|
128
130
|
|
@@ -170,9 +172,21 @@ match appstore -a tools.fastlane.app
|
|
170
172
|
match appstore -a tools.fastlane.app.watchkitapp
|
171
173
|
```
|
172
174
|
|
175
|
+
You can make this even easier using [fastlane](https://github.com/fastlane/fastlane/tree/master/fastlane) by creating a match lane like this:
|
176
|
+
|
177
|
+
```
|
178
|
+
lane :match do
|
179
|
+
match(app_identifier: "com.krausefx.app1", readonly: true)
|
180
|
+
match(app_identifier: "com.krausefx.app2", readonly: true)
|
181
|
+
match(app_identifier: "com.krausefx.app3", readonly: true)
|
182
|
+
end
|
183
|
+
```
|
184
|
+
|
185
|
+
Then all your team has to do is `fastlane match` and keys, certs and profiles for all targets will be synced.
|
186
|
+
|
173
187
|
#### Passphrase
|
174
188
|
|
175
|
-
When running `match` for the first time on a new machine, it will ask you for the passphrase for the Git repository. This is an additional layer of security: each of the files will be encrypted using `openssl`.Make sure to remember the password, as you'll need it when you run match on a different machine
|
189
|
+
When running `match` for the first time on a new machine, it will ask you for the passphrase for the Git repository. This is an additional layer of security: each of the files will be encrypted using `openssl`. Make sure to remember the password, as you'll need it when you run match on a different machine.
|
176
190
|
|
177
191
|
To set the passphrase using an environment variable, use `MATCH_PASSWORD`.
|
178
192
|
|
@@ -184,7 +198,7 @@ To set up the certificates and provisioning profiles on a new machine, you just
|
|
184
198
|
match development
|
185
199
|
```
|
186
200
|
|
187
|
-
You can also run `match` in a `readonly` mode to be sure it won't create any new certificates or profiles.
|
201
|
+
You can also run `match` in a `readonly` mode to be sure it won't create any new certificates or profiles.
|
188
202
|
|
189
203
|
```
|
190
204
|
match development --readonly
|
@@ -223,11 +237,11 @@ Add `match` to your `Fastfile` to automatically fetch the latest code signing ce
|
|
223
237
|
```ruby
|
224
238
|
match(type: "appstore")
|
225
239
|
|
226
|
-
match(git_url: "https://github.com/fastlane/certificates",
|
240
|
+
match(git_url: "https://github.com/fastlane/fastlane/tree/master/certificates",
|
227
241
|
type: "development")
|
228
242
|
|
229
|
-
match(git_url: "https://github.com/fastlane/certificates",
|
230
|
-
type: "adhoc",
|
243
|
+
match(git_url: "https://github.com/fastlane/fastlane/tree/master/certificates",
|
244
|
+
type: "adhoc",
|
231
245
|
app_identifier: "tools.fastlane.app")
|
232
246
|
|
233
247
|
# `match` should be called before building the app with `gym`
|
@@ -237,7 +251,7 @@ gym
|
|
237
251
|
|
238
252
|
##### Multiple Targets
|
239
253
|
|
240
|
-
If
|
254
|
+
If your app has multiple targets (e.g. Today Widget or WatchOS Extension)
|
241
255
|
|
242
256
|
```ruby
|
243
257
|
match(app_identifier: "tools.fastlane.app", type: "appstore")
|
@@ -254,7 +268,7 @@ Additionally it is recommended to disable the `Fix Issue` button using the [FixC
|
|
254
268
|
|
255
269
|
#### To build from the command line using [fastlane](https://fastlane.tools)
|
256
270
|
|
257
|
-
`match` automatically pre-fills environment variables with the UUIDs of the correct provisioning profiles, ready to be used in your Xcode project.
|
271
|
+
`match` automatically pre-fills environment variables with the UUIDs of the correct provisioning profiles, ready to be used in your Xcode project.
|
258
272
|
|
259
273
|
<img src="assets/UDIDPrint.png" width="700" />
|
260
274
|
|
@@ -268,13 +282,30 @@ e.g. `$(sigh_tools.fastlane.app_development)`
|
|
268
282
|
|
269
283
|
#### To build from Xcode manually
|
270
284
|
|
271
|
-
This is useful when installing your application on your device using the Development profile.
|
285
|
+
This is useful when installing your application on your device using the Development profile.
|
272
286
|
|
273
287
|
You can statically select the right provisioning profile in your Xcode project (the name will be `match Development tools.fastlane.app`).
|
274
288
|
|
289
|
+
### Continuous Integration
|
290
|
+
|
291
|
+
#### Repo access
|
292
|
+
There is one tricky part of setting up a CI system to work with `match`, which is enabling the CI to access the repo. Usually you'd just add your CI's public ssh key as a deploy key to your `match` repo, but since your CI will already likely be using its public ssh key to access the codebase repo, [you won't be able to do that](https://help.github.com/articles/error-key-already-in-use/).
|
293
|
+
|
294
|
+
Some repo hosts might allow you to use the same deploy key for different repos, but GitHub will not. If your host does, you don't need to worry about this, just add your CI's public ssh key as a deploy key for your `match` repo and scroll down to "_Encryption password_".
|
295
|
+
|
296
|
+
There are a few ways around this:
|
297
|
+
|
298
|
+
1. Create a new account on your repo host with read-only access to your `match` repo. Bitrise have a good description of this [here](http://devcenter.bitrise.io/docs/adding-projects-with-submodules).
|
299
|
+
2. Some CIs allow you to upload your signing credientials manually, but obviously this means that you'll have to re-upload the profiles/keys/certs each time they change.
|
300
|
+
|
301
|
+
Neither solution is pretty. It's one of those _trade-off_ things. Do you care more about **not** having an extra account sitting around, or do you care more about having the :sparkles: of auto-syncing of credentials.
|
302
|
+
|
303
|
+
#### Encryption password
|
304
|
+
Once you've decided which approach to take, all that's left to do is to set your encryption password as secret environment variable named `MATCH_PASSWORD`. Match will pick this up when it's run.
|
305
|
+
|
275
306
|
### Nuke
|
276
307
|
|
277
|
-
If you never really cared about code signing and have a messy Apple Developer account with a lot of invalid, expired or Xcode managed profiles/certificates, you can use the `match nuke` command to revoke your certificates and provisioning profiles. Don't worry, apps that are already available in the App Store will still work. Builds distributed via TestFlight might be disabled after nuking your account, you'll have to re-upload a new build. After clearing your account you'll start from a clean state, and you can run `match` to generate your certificates and profiles again.
|
308
|
+
If you never really cared about code signing and have a messy Apple Developer account with a lot of invalid, expired or Xcode managed profiles/certificates, you can use the `match nuke` command to revoke your certificates and provisioning profiles. Don't worry, apps that are already available in the App Store will still work. Builds distributed via TestFlight might be disabled after nuking your account, so you'll have to re-upload a new build. After clearing your account you'll start from a clean state, and you can run `match` to generate your certificates and profiles again.
|
278
309
|
|
279
310
|
To revoke all certificates and provisioning profiles for a specific environment:
|
280
311
|
|
@@ -310,11 +341,11 @@ openssl aes-256-cbc -k "<password>" -in "<fileYouWantToDecryptPath>" -out "<decr
|
|
310
341
|
|
311
342
|
Both your keys and provisioning profiles are encrypted using OpenSSL using a passphrase.
|
312
343
|
|
313
|
-
Storing your private keys in a Git repo may sound off-putting at first. We did an in-depth analysis of potential security issues and came to the following conclusions:
|
344
|
+
Storing your private keys in a Git repo may sound off-putting at first. We did an in-depth analysis of potential security issues and came to the following conclusions:
|
314
345
|
|
315
346
|
#### What could happen if someone stole a private key?
|
316
347
|
|
317
|
-
If attackers would have your certificate and provisioning profile, they could codesign an application with the same bundle identifier.
|
348
|
+
If attackers would have your certificate and provisioning profile, they could codesign an application with the same bundle identifier.
|
318
349
|
|
319
350
|
What's the worst that could happen for each of the profile types?
|
320
351
|
|
@@ -324,7 +355,7 @@ An App Store profile can't be used for anything as long as it's not re-signed by
|
|
324
355
|
|
325
356
|
##### Development and Ad Hoc Profiles
|
326
357
|
|
327
|
-
In general those profiles are harmless as they can only be used to install a signed application on a small subset of devices. To add new devices, the attacker would also need your Apple Developer Portal credentials (which are not stored in git, but in your local keychain).
|
358
|
+
In general those profiles are harmless as they can only be used to install a signed application on a small subset of devices. To add new devices, the attacker would also need your Apple Developer Portal credentials (which are not stored in git, but in your local keychain).
|
328
359
|
|
329
360
|
##### Enterprise Profiles
|
330
361
|
|
@@ -338,28 +369,28 @@ Because of the potentially dangerous nature of In-House profiles we decided to n
|
|
338
369
|
- Even if your certificates are leaked, they can't be used to cause any harm without your iTunes Connect login credentials
|
339
370
|
- `match` does not currently support In-House Enterprise profiles as they are harder to control
|
340
371
|
- If you use GitHub or Bitbucket we encourage enabling 2 factor authentication for all accounts that have access to the certificates repo
|
341
|
-
- The complete source code of `match` is fully open source on [GitHub](https://github.com/fastlane/match)
|
372
|
+
- The complete source code of `match` is fully open source on [GitHub](https://github.com/fastlane/fastlane/tree/master/match)
|
342
373
|
|
343
374
|
## [`fastlane`](https://fastlane.tools) Toolchain
|
344
375
|
|
345
376
|
- [`fastlane`](https://fastlane.tools): Connect all deployment tools into one streamlined workflow
|
346
|
-
- [`deliver`](https://github.com/fastlane/deliver): Upload screenshots, metadata and your app to the App Store
|
347
|
-
- [`snapshot`](https://github.com/fastlane/snapshot): Automate taking localized screenshots of your iOS app on every device
|
348
|
-
- [`frameit`](https://github.com/fastlane/frameit): Quickly put your screenshots into the right device frames
|
349
|
-
- [`pem`](https://github.com/fastlane/pem): Automatically generate and renew your push notification profiles
|
350
|
-
- [`produce`](https://github.com/fastlane/produce): Create new iOS apps on iTunes Connect and Dev Portal using the command line
|
351
|
-
- [`cert`](https://github.com/fastlane/cert): Automatically create and maintain iOS code signing certificates
|
352
|
-
- [`spaceship`](https://github.com/fastlane/spaceship): Ruby library to access the Apple Dev Center and iTunes Connect
|
353
|
-
- [`pilot`](https://github.com/fastlane/pilot): The best way to manage your TestFlight testers and builds from your terminal
|
354
|
-
- [`boarding`](https://github.com/fastlane/boarding): The easiest way to invite your TestFlight beta testers
|
355
|
-
- [`gym`](https://github.com/fastlane/gym): Building your iOS apps has never been easier
|
356
|
-
- [`scan`](https://github.com/fastlane/scan): The easiest way to run tests of your iOS and Mac app
|
377
|
+
- [`deliver`](https://github.com/fastlane/fastlane/tree/master/deliver): Upload screenshots, metadata and your app to the App Store
|
378
|
+
- [`snapshot`](https://github.com/fastlane/fastlane/tree/master/snapshot): Automate taking localized screenshots of your iOS app on every device
|
379
|
+
- [`frameit`](https://github.com/fastlane/fastlane/tree/master/frameit): Quickly put your screenshots into the right device frames
|
380
|
+
- [`pem`](https://github.com/fastlane/fastlane/tree/master/pem): Automatically generate and renew your push notification profiles
|
381
|
+
- [`produce`](https://github.com/fastlane/fastlane/tree/master/produce): Create new iOS apps on iTunes Connect and Dev Portal using the command line
|
382
|
+
- [`cert`](https://github.com/fastlane/fastlane/tree/master/cert): Automatically create and maintain iOS code signing certificates
|
383
|
+
- [`spaceship`](https://github.com/fastlane/fastlane/tree/master/spaceship): Ruby library to access the Apple Dev Center and iTunes Connect
|
384
|
+
- [`pilot`](https://github.com/fastlane/fastlane/tree/master/pilot): The best way to manage your TestFlight testers and builds from your terminal
|
385
|
+
- [`boarding`](https://github.com/fastlane/boarding): The easiest way to invite your TestFlight beta testers
|
386
|
+
- [`gym`](https://github.com/fastlane/fastlane/tree/master/gym): Building your iOS apps has never been easier
|
387
|
+
- [`scan`](https://github.com/fastlane/fastlane/tree/master/scan): The easiest way to run tests of your iOS and Mac app
|
357
388
|
|
358
389
|
# Need help?
|
359
390
|
Please submit an issue on GitHub and provide information about your setup
|
360
391
|
|
361
392
|
# Code of Conduct
|
362
|
-
Help us keep `match` open and inclusive. Please read and follow our [Code of Conduct](https://github.com/fastlane/
|
393
|
+
Help us keep `match` open and inclusive. Please read and follow our [Code of Conduct](https://github.com/fastlane/fastlane/blob/master/CODE_OF_CONDUCT.md).
|
363
394
|
|
364
395
|
# License
|
365
396
|
This project is licensed under the terms of the MIT license. See the LICENSE file.
|
@@ -1,4 +1,4 @@
|
|
1
|
-
## [fastlane match](https://github.com/fastlane/match)
|
1
|
+
## [fastlane match](https://github.com/fastlane/fastlane/tree/master/match)
|
2
2
|
|
3
3
|
This repository contains all your certificates and provisioning profiles needed to build and sign your applications. They are encrypted using OpenSSL via a passphrase.
|
4
4
|
|
@@ -6,7 +6,7 @@ This repository contains all your certificates and provisioning profiles needed
|
|
6
6
|
|
7
7
|
Do not modify this file, as it gets overwritten every time you run `match`.
|
8
8
|
|
9
|
-
### Install [fastlane match](https://github.com/fastlane/match)
|
9
|
+
### Install [fastlane match](https://github.com/fastlane/fastlane/tree/master/match)
|
10
10
|
|
11
11
|
```
|
12
12
|
sudo gem install match
|
@@ -32,7 +32,7 @@ match adhoc
|
|
32
32
|
match development
|
33
33
|
```
|
34
34
|
|
35
|
-
For more information open [fastlane match git repo](https://github.com/fastlane/match)
|
35
|
+
For more information open [fastlane match git repo](https://github.com/fastlane/fastlane/tree/master/match)
|
36
36
|
|
37
37
|
### Content
|
38
38
|
|
@@ -46,4 +46,4 @@ This directory contains all provisioning profiles
|
|
46
46
|
|
47
47
|
------------------------------------
|
48
48
|
|
49
|
-
For more information open [fastlane match git repo](https://github.com/fastlane/match)
|
49
|
+
For more information open [fastlane match git repo](https://github.com/fastlane/fastlane/tree/master/match)
|
@@ -4,7 +4,7 @@ module Match
|
|
4
4
|
to ||= ChangePassword.ask_password(message: "New passphrase for Git Repo: ", confirm: false)
|
5
5
|
from ||= ChangePassword.ask_password(message: "Old passphrase for Git Repo: ", confirm: true)
|
6
6
|
GitHelper.clear_changes
|
7
|
-
workspace = GitHelper.clone(params[:git_url], params[:shallow_clone], manual_password: from)
|
7
|
+
workspace = GitHelper.clone(params[:git_url], params[:shallow_clone], manual_password: from, skip_docs: params[:skip_docs])
|
8
8
|
Encrypt.new.clear_password(params[:git_url])
|
9
9
|
Encrypt.new.store_password(params[:git_url], to)
|
10
10
|
|
data/lib/match/encrypt.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Match
|
2
2
|
class Encrypt
|
3
3
|
require 'security'
|
4
|
+
require 'shellwords'
|
4
5
|
|
5
6
|
def server_name(git_url)
|
6
7
|
["match", git_url].join("_")
|
@@ -77,9 +78,9 @@ module Match
|
|
77
78
|
|
78
79
|
tmpfile = File.join(Dir.mktmpdir, "temporary")
|
79
80
|
command = ["openssl aes-256-cbc"]
|
80
|
-
command << "-k
|
81
|
-
command << "-in
|
82
|
-
command << "-out
|
81
|
+
command << "-k #{password.shellescape}"
|
82
|
+
command << "-in #{path.shellescape}"
|
83
|
+
command << "-out #{tmpfile.shellescape}"
|
83
84
|
command << "-a"
|
84
85
|
command << "-d" unless encrypt
|
85
86
|
command << "&> /dev/null" unless $verbose # to show show an error message is something goes wrong
|
data/lib/match/generator.rb
CHANGED
@@ -18,7 +18,7 @@ module Match
|
|
18
18
|
cert_path = Cert::Runner.new.launch
|
19
19
|
rescue => ex
|
20
20
|
if ex.to_s.include?("You already have a current")
|
21
|
-
UI.user_error!("Could not create a new certificate as you reached the maximum number of certificates for this account. You can use the `match nuke` command to revoke your existing certificates. More information https://github.com/fastlane/match")
|
21
|
+
UI.user_error!("Could not create a new certificate as you reached the maximum number of certificates for this account. You can use the `match nuke` command to revoke your existing certificates. More information https://github.com/fastlane/fastlane/tree/master/match")
|
22
22
|
else
|
23
23
|
raise ex
|
24
24
|
end
|
data/lib/match/git_helper.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Match
|
2
2
|
class GitHelper
|
3
|
-
def self.clone(git_url, shallow_clone, manual_password: nil)
|
3
|
+
def self.clone(git_url, shallow_clone, manual_password: nil, skip_docs: false)
|
4
4
|
return @dir if @dir
|
5
5
|
|
6
6
|
@dir = Dir.mktmpdir
|
@@ -23,7 +23,7 @@ module Match
|
|
23
23
|
return self.clone(git_url, shallow_clone)
|
24
24
|
end
|
25
25
|
|
26
|
-
copy_readme(@dir)
|
26
|
+
copy_readme(@dir) unless skip_docs
|
27
27
|
Encrypt.new.decrypt_repo(path: @dir, git_url: git_url, manual_password: manual_password)
|
28
28
|
|
29
29
|
return @dir
|
data/lib/match/nuke.rb
CHANGED
@@ -11,7 +11,7 @@ module Match
|
|
11
11
|
self.params = params
|
12
12
|
self.type = type
|
13
13
|
|
14
|
-
params[:workspace] = GitHelper.clone(params[:git_url], params[:shallow_clone])
|
14
|
+
params[:workspace] = GitHelper.clone(params[:git_url], params[:shallow_clone], skip_docs: params[:skip_docs])
|
15
15
|
|
16
16
|
had_app_identifier = self.params[:app_identifier]
|
17
17
|
self.params[:app_identifier] = '' # we don't really need a value here
|
data/lib/match/options.rb
CHANGED
@@ -79,7 +79,7 @@ module Match
|
|
79
79
|
env_name: "MATCH_SHALLOW_CLONE",
|
80
80
|
description: "Make a shallow clone of the repository (truncate the history to 1 revision)",
|
81
81
|
is_string: false,
|
82
|
-
default_value:
|
82
|
+
default_value: false),
|
83
83
|
FastlaneCore::ConfigItem.new(key: :workspace,
|
84
84
|
description: nil,
|
85
85
|
verify_block: proc do |value|
|
@@ -96,6 +96,11 @@ module Match
|
|
96
96
|
env_name: "MATCH_FORCE_FOR_NEW_DEVICES",
|
97
97
|
description: "Renew the provisioning profiles if the device count on the developer portal has changed",
|
98
98
|
is_string: false,
|
99
|
+
default_value: false),
|
100
|
+
FastlaneCore::ConfigItem.new(key: :skip_docs,
|
101
|
+
env_name: "MATCH_SKIP_DOCS",
|
102
|
+
description: "Skip generation of a README.md for the created git repository",
|
103
|
+
is_string: false,
|
99
104
|
default_value: false)
|
100
105
|
]
|
101
106
|
end
|
data/lib/match/runner.rb
CHANGED
@@ -7,7 +7,7 @@ module Match
|
|
7
7
|
hide_keys: [:workspace],
|
8
8
|
title: "Summary for match #{Match::VERSION}")
|
9
9
|
|
10
|
-
params[:workspace] = GitHelper.clone(params[:git_url], params[:shallow_clone])
|
10
|
+
params[:workspace] = GitHelper.clone(params[:git_url], params[:shallow_clone], skip_docs: params[:skip_docs])
|
11
11
|
spaceship = SpaceshipEnsure.new(params[:username]) unless params[:readonly]
|
12
12
|
|
13
13
|
# Verify the App ID (as we don't want 'match' to fail at a later point)
|
@@ -75,12 +75,12 @@ module Match
|
|
75
75
|
# Install the provisioning profiles
|
76
76
|
profile = profiles.last
|
77
77
|
|
78
|
-
if params[:force_for_new_devices]
|
78
|
+
if params[:force_for_new_devices] && !params[:readonly]
|
79
79
|
params[:force] = device_count_different?(profile: profile) unless params[:force]
|
80
80
|
end
|
81
81
|
|
82
82
|
if profile.nil? or params[:force]
|
83
|
-
UI.
|
83
|
+
UI.user_error!("No matching provisioning profiles found and can not create a new one because you enabled `readonly`") if params[:readonly]
|
84
84
|
profile = Generator.generate_provisioning_profile(params: params,
|
85
85
|
prov_type: prov_type,
|
86
86
|
certificate_id: certificate_id)
|
data/lib/match/setup.rb
CHANGED
@@ -14,7 +14,7 @@ module Match
|
|
14
14
|
UI.important "You can now run `match development`, `match adhoc` and `match appstore`"
|
15
15
|
UI.message "On the first run for each environment it will create the provisioning profiles and"
|
16
16
|
UI.message "certificates for you. From then on, it will automatically import the existing profiles."
|
17
|
-
UI.message "For more information visit https://github.com/fastlane/match"
|
17
|
+
UI.message "For more information visit https://github.com/fastlane/fastlane/tree/master/match"
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -12,7 +12,7 @@ module Match
|
|
12
12
|
UI.important("You can also run `match` in readonly mode to not require any access to the")
|
13
13
|
UI.important("Developer Portal. This way you only share the keys and credentials")
|
14
14
|
UI.command("match --readonly")
|
15
|
-
UI.important("More information https://github.com/fastlane/match#access-control")
|
15
|
+
UI.important("More information https://github.com/fastlane/fastlane/tree/master/match#access-control")
|
16
16
|
end
|
17
17
|
|
18
18
|
UI.message("Verifying that the certificate and profile are still valid on the Dev Portal...")
|
@@ -45,7 +45,7 @@ module Match
|
|
45
45
|
UI.error("for the user #{params[:username]}")
|
46
46
|
UI.error("Make sure to use the same user and team every time you run 'match' for this")
|
47
47
|
UI.error("Git repository. This might be caused by revoking the certificate on the Dev Portal")
|
48
|
-
UI.user_error!("To reset the certificates of your Apple account, you can use the `match nuke` feature, more information on https://github.com/fastlane/match")
|
48
|
+
UI.user_error!("To reset the certificates of your Apple account, you can use the `match nuke` feature, more information on https://github.com/fastlane/fastlane/tree/master/match")
|
49
49
|
end
|
50
50
|
|
51
51
|
def profile_exists(params, uuid)
|
@@ -58,7 +58,7 @@ module Match
|
|
58
58
|
UI.error("for the user #{params[:username]}")
|
59
59
|
UI.error("Make sure to use the same user and team every time you run 'match' for this")
|
60
60
|
UI.error("Git repository. This might be caused by deleting the provisioning profile on the Dev Portal")
|
61
|
-
UI.user_error!("To reset the provisioning profiles of your Apple account, you can use the `match nuke` feature, more information on https://github.com/fastlane/match")
|
61
|
+
UI.user_error!("To reset the provisioning profiles of your Apple account, you can use the `match nuke` feature, more information on https://github.com/fastlane/fastlane/tree/master/match")
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
data/lib/match/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: match
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: security
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.39.0
|
34
34
|
- - "<"
|
35
35
|
- !ruby/object:Gem::Version
|
36
36
|
version: 1.0.0
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 0.
|
43
|
+
version: 0.39.0
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 1.0.0
|
@@ -70,7 +70,7 @@ dependencies:
|
|
70
70
|
requirements:
|
71
71
|
- - ">="
|
72
72
|
- !ruby/object:Gem::Version
|
73
|
-
version: 0.
|
73
|
+
version: 0.24.0
|
74
74
|
- - "<"
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: 1.0.0
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
requirements:
|
81
81
|
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: 0.
|
83
|
+
version: 0.24.0
|
84
84
|
- - "<"
|
85
85
|
- !ruby/object:Gem::Version
|
86
86
|
version: 1.0.0
|
@@ -242,14 +242,14 @@ dependencies:
|
|
242
242
|
requirements:
|
243
243
|
- - "~>"
|
244
244
|
- !ruby/object:Gem::Version
|
245
|
-
version: 0.
|
245
|
+
version: 0.38.0
|
246
246
|
type: :development
|
247
247
|
prerelease: false
|
248
248
|
version_requirements: !ruby/object:Gem::Requirement
|
249
249
|
requirements:
|
250
250
|
- - "~>"
|
251
251
|
- !ruby/object:Gem::Version
|
252
|
-
version: 0.
|
252
|
+
version: 0.38.0
|
253
253
|
description: Easily sync your certificates and profiles across your team using git
|
254
254
|
email:
|
255
255
|
- match@krausefx.com
|
@@ -296,7 +296,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
296
296
|
version: '0'
|
297
297
|
requirements: []
|
298
298
|
rubyforge_project:
|
299
|
-
rubygems_version: 2.4.
|
299
|
+
rubygems_version: 2.4.5.1
|
300
300
|
signing_key:
|
301
301
|
specification_version: 4
|
302
302
|
summary: Easily sync your certificates and profiles across your team using git
|