cert 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +15 -12
- data/bin/cert +6 -2
- data/lib/cert/cert_runner.rb +2 -2
- data/lib/cert/developer_center.rb +35 -21
- data/lib/cert/signing_request.rb +2 -0
- data/lib/cert/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e27598992c352ec26e99815898586e1ba85c6d1e
|
4
|
+
data.tar.gz: a4415ab01ec9879ee2be155717c1f75f1d02d5bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87ad0f5a9e10c8e150b974ec3c5442ec480a4ea26790dc6f510e193b3bdfe6f5caef09fcd648afe995f7e498870857822120ecfe03fa3e385cd1894f7ddfc5b6
|
7
|
+
data.tar.gz: e469f9b484544a7b49a96223cb82fb94bce02c0b17f145a5d3fdf31e6d3ac53f20ee81d8ca55a8c170b4831ba19a2ecbd7d81aa8a70990220d6ea35d4be301af
|
data/README.md
CHANGED
@@ -12,7 +12,8 @@
|
|
12
12
|
<a href="https://github.com/KrauseFx/pem">PEM</a> •
|
13
13
|
<a href="https://github.com/KrauseFx/sigh">sigh</a> •
|
14
14
|
<a href="https://github.com/KrauseFx/produce">produce</a> •
|
15
|
-
<b>cert</b>
|
15
|
+
<b>cert</b> •
|
16
|
+
<a href="https://github.com/KrauseFx/codes">codes</a>
|
16
17
|
</p>
|
17
18
|
-------
|
18
19
|
|
@@ -20,7 +21,7 @@
|
|
20
21
|
<img src="assets/cert.png">
|
21
22
|
</p>
|
22
23
|
|
23
|
-
cert
|
24
|
+
cert
|
24
25
|
============
|
25
26
|
|
26
27
|
[](https://twitter.com/KrauseFx)
|
@@ -45,7 +46,7 @@ Get in contact with the developer on Twitter: [@KrauseFx](https://twitter.com/Kr
|
|
45
46
|
|
46
47
|
-------
|
47
48
|
|
48
|
-
<h5 align="center"><code>cert</code> is part of <a href="
|
49
|
+
<h5 align="center"><code>cert</code> is part of <a href="https://fastlane.tools">fastlane</a>: connect all deployment tools into one streamlined workflow.</h5>
|
49
50
|
|
50
51
|
|
51
52
|
|
@@ -58,19 +59,21 @@ Make sure, you have the latest version of the Xcode command line tools installed
|
|
58
59
|
|
59
60
|
# Why?
|
60
61
|
|
61
|
-
Please check out [this guide](https://github.com/KrauseFx/cert/blob/master/ManualSteps.md) to
|
62
|
+
Please check out [this guide](https://github.com/KrauseFx/cert/blob/master/ManualSteps.md) which shows how to manually create an iOS code signing profile and a provisioning profile using the Apple Developer Portal.
|
62
63
|
|
63
|
-
**After** checking out the [guide](https://github.com/KrauseFx/cert/blob/master/ManualSteps.md), take a look
|
64
|
+
**After** checking out the [guide](https://github.com/KrauseFx/cert/blob/master/ManualSteps.md), take a look how `cert` and [`sigh`](https://github.com/KrauseFx/sigh) do all that for you.
|
64
65
|
|
65
66
|

|
66
67
|
|
67
68
|
In the gif I used `cert && sigh`, which will first create an iOS code signing certificate and then a provisioning profile for your app if `cert` succeeded.
|
68
69
|
|
70
|
+
##### [Like this tool? Be the first to know about updates and new fastlane tools](https://tinyletter.com/krausefx)
|
71
|
+
|
69
72
|
# Usage
|
70
73
|
|
71
74
|
cert
|
72
75
|
|
73
|
-
This will check if any of the available signing certificates is installed.
|
76
|
+
This will check if any of the available signing certificates is installed on your local machine.
|
74
77
|
|
75
78
|
Only if a new certificate needs to be created, `cert` will
|
76
79
|
|
@@ -123,21 +126,21 @@ This will result in `sigh` always using the correct signing certificate, which i
|
|
123
126
|
|
124
127
|
# Tips
|
125
128
|
|
126
|
-
## [`fastlane`](
|
129
|
+
## [`fastlane`](https://fastlane.tools) Toolchain
|
127
130
|
|
128
|
-
- [`fastlane`](
|
131
|
+
- [`fastlane`](https://fastlane.tools): Connect all deployment tools into one streamlined workflow
|
129
132
|
- [`deliver`](https://github.com/KrauseFx/deliver): Upload screenshots, metadata and your app to the App Store using a single command
|
130
133
|
- [`snapshot`](https://github.com/KrauseFx/snapshot): Automate taking localized screenshots of your iOS app on every device
|
131
134
|
- [`frameit`](https://github.com/KrauseFx/frameit): Quickly put your screenshots into the right device frames
|
132
135
|
- [`PEM`](https://github.com/KrauseFx/pem): Automatically generate and renew your push notification profiles
|
133
136
|
- [`sigh`](https://github.com/KrauseFx/sigh): Because you would rather spend your time building stuff than fighting provisioning
|
134
137
|
- [`produce`](https://github.com/KrauseFx/produce): Create new iOS apps on iTunes Connect and Dev Portal using the command line
|
138
|
+
- [`codes`](https://github.com/KrauseFx/codes): Create promo codes for iOS Apps using the command line
|
135
139
|
|
136
|
-
|
137
|
-
Download and install the [Provisioning Plugin](https://github.com/chockenberry/Provisioning).
|
138
|
-
|
139
|
-

|
140
|
+
##### [Like this tool? Be the first to know about updates and new fastlane tools](https://tinyletter.com/krausefx)
|
140
141
|
|
142
|
+
## Use the 'Provisioning Quicklook plugin'
|
143
|
+
Download and install the [Provisioning Plugin](https://github.com/chockenberry/Provisioning) to easily preview provisioning profile files and certificates.
|
141
144
|
|
142
145
|
# Need help?
|
143
146
|
- If there is a technical problem with ```cert```, submit an issue.
|
data/bin/cert
CHANGED
@@ -16,13 +16,14 @@ class CertApplication
|
|
16
16
|
program :version, Cert::VERSION
|
17
17
|
program :description, 'CLI for \'cert\' - Create new iOS code signing certificates'
|
18
18
|
program :help, 'Author', 'Felix Krause <cert@krausefx.com>'
|
19
|
-
program :help, 'Website', '
|
19
|
+
program :help, 'Website', 'https://fastlane.tools'
|
20
20
|
program :help, 'GitHub', 'https://github.com/krausefx/cert'
|
21
21
|
program :help_formatter, :compact
|
22
22
|
|
23
23
|
always_trace!
|
24
24
|
|
25
25
|
global_option '-u', '--username STRING', 'Your Apple ID username'
|
26
|
+
global_option '--development', 'Create a development certificate instead of a distribution one.'
|
26
27
|
|
27
28
|
command :create do |c|
|
28
29
|
c.syntax = 'cert create'
|
@@ -31,7 +32,10 @@ class CertApplication
|
|
31
32
|
c.action do |args, options|
|
32
33
|
username(options)
|
33
34
|
|
34
|
-
Cert::
|
35
|
+
type = Cert::DeveloperCenter::DISTRIBUTION
|
36
|
+
type = Cert::DeveloperCenter::DEVELOPMENT if options.development
|
37
|
+
|
38
|
+
Cert::CertRunner.run(type)
|
35
39
|
|
36
40
|
installed = Cert::CertChecker.is_installed?ENV["CER_FILE_PATH"]
|
37
41
|
raise "Could not find the newly generated certificate installed" unless installed
|
data/lib/cert/cert_runner.rb
CHANGED
@@ -1,29 +1,37 @@
|
|
1
1
|
require 'fastlane_core/developer_center/developer_center'
|
2
2
|
|
3
|
-
module
|
4
|
-
class DeveloperCenter
|
5
|
-
|
3
|
+
module Cert
|
4
|
+
class DeveloperCenter < FastlaneCore::DeveloperCenter
|
5
|
+
DISTRIBUTION = "Distribution"
|
6
|
+
DEVELOPMENT = "Development"
|
7
|
+
|
8
|
+
CERTS_URL = "https://developer.apple.com/account/ios/certificate/certificateList.action?type=distribution"
|
9
|
+
CERTS_URL_DEV = "https://developer.apple.com/account/ios/certificate/certificateList.action?type=development"
|
6
10
|
CREATE_CERT_URL = "https://developer.apple.com/account/ios/certificate/certificateCreate.action"
|
7
11
|
|
8
12
|
# This will check if there is at least one of the certificates already installed on the local machine
|
9
13
|
# This will store the resulting file name in ENV 'CER_FILE_PATH' and the Cert ID in 'CER_CERTIFICATE_ID'
|
10
|
-
def run
|
11
|
-
file = find_existing_cert
|
14
|
+
def run(type)
|
15
|
+
file = find_existing_cert(type)
|
12
16
|
if file
|
13
17
|
# We don't need to do anything :)
|
14
18
|
ENV["CER_FILE_PATH"] = file
|
15
19
|
else
|
16
|
-
create_certificate
|
20
|
+
create_certificate(type)
|
17
21
|
end
|
18
22
|
rescue => ex
|
19
23
|
error_occured(ex)
|
20
24
|
end
|
21
25
|
|
22
|
-
def find_existing_cert
|
23
|
-
|
26
|
+
def find_existing_cert(type)
|
27
|
+
if type == DEVELOPMENT
|
28
|
+
visit CERTS_URL_DEV
|
29
|
+
else
|
30
|
+
visit CERTS_URL
|
31
|
+
end
|
24
32
|
|
25
33
|
# Download all available certs to check if they are installed using the SHA1 hash
|
26
|
-
certs = code_signing_certificate
|
34
|
+
certs = code_signing_certificate(type)
|
27
35
|
certs.each do |current|
|
28
36
|
display_id = current['certificateId']
|
29
37
|
type_id = current['certificateTypeDisplayId']
|
@@ -46,14 +54,16 @@ module FastlaneCore
|
|
46
54
|
end
|
47
55
|
|
48
56
|
# This will actually create a new certificate
|
49
|
-
def create_certificate
|
57
|
+
def create_certificate(type)
|
50
58
|
visit CREATE_CERT_URL
|
51
59
|
wait_for_elements("form[name='certificateSave']")
|
52
60
|
|
53
61
|
Helper.log.info "Creating a new code signing certificate"
|
54
62
|
|
55
63
|
# select certificate type
|
56
|
-
|
64
|
+
toggle_value = 'type-iosNoOCSP'
|
65
|
+
toggle_value = 'type-development' if type == DEVELOPMENT
|
66
|
+
app_store_toggle = first("input##{toggle_value}")
|
57
67
|
if !!app_store_toggle['disabled']
|
58
68
|
# Limit of certificates already reached
|
59
69
|
raise "Could not create another certificate, reached the maximum number of available certificates.".red
|
@@ -67,7 +77,6 @@ module FastlaneCore
|
|
67
77
|
|
68
78
|
cert_signing_request = Cert::SigningRequest.get_path
|
69
79
|
Helper.log.info "Uploading the cert signing request '#{cert_signing_request}'"
|
70
|
-
|
71
80
|
|
72
81
|
wait_for_elements("input[name='upload']").first.set cert_signing_request # upload the cert signing request
|
73
82
|
sleep 1
|
@@ -86,12 +95,12 @@ module FastlaneCore
|
|
86
95
|
# Now download the certificate
|
87
96
|
download_button = wait_for_elements(".button.small.blue").first
|
88
97
|
url = download_button['href']
|
89
|
-
|
98
|
+
|
90
99
|
path = File.join(TMP_FOLDER, "certificate.cer")
|
91
100
|
download_url(url, path)
|
92
|
-
|
101
|
+
|
93
102
|
certificate_id = url.match(/.*displayId=(.*)&type.*/)[1]
|
94
|
-
|
103
|
+
|
95
104
|
ENV["CER_FILE_PATH"] = path
|
96
105
|
ENV["CER_CERTIFICATE_ID"] = certificate_id
|
97
106
|
Helper.log.info "Successfully downloaded latest .cer file to '#{path}' (#{certificate_id})".green
|
@@ -117,7 +126,7 @@ module FastlaneCore
|
|
117
126
|
raise "Something went wrong when downloading the certificate" unless data
|
118
127
|
|
119
128
|
dataWritten = File.write(output_path, data)
|
120
|
-
|
129
|
+
|
121
130
|
if dataWritten == 0
|
122
131
|
raise "Can't write to #{output_path}"
|
123
132
|
end
|
@@ -141,9 +150,12 @@ module FastlaneCore
|
|
141
150
|
# "certificateTypeDisplayId"=>"...",
|
142
151
|
# "serialNum"=>"....",
|
143
152
|
# "typeString"=>"iOS Distribution"},
|
144
|
-
def code_signing_certificate
|
145
|
-
|
146
|
-
|
153
|
+
def code_signing_certificate(type)
|
154
|
+
if type == DEVELOPMENT
|
155
|
+
visit CERTS_URL_DEV
|
156
|
+
else
|
157
|
+
visit CERTS_URL
|
158
|
+
end
|
147
159
|
|
148
160
|
certificateDataURL = wait_for_variable('certificateDataURL')
|
149
161
|
certificateRequestTypes = wait_for_variable('certificateRequestTypes')
|
@@ -155,16 +167,18 @@ module FastlaneCore
|
|
155
167
|
|
156
168
|
available = []
|
157
169
|
|
170
|
+
certTypeName = 'iOS Distribution'
|
171
|
+
certTypeName = 'iOS Development' if type == DEVELOPMENT
|
158
172
|
certs = post_ajax(url)['certRequests']
|
159
173
|
certs.each do |current_cert|
|
160
|
-
if current_cert['typeString'] ==
|
174
|
+
if current_cert['typeString'] == certTypeName
|
161
175
|
# The other profiles are push profiles
|
162
176
|
# We only care about the distribution profile
|
163
177
|
available << current_cert # mostly we only care about the 'certificateId'
|
164
178
|
end
|
165
179
|
end
|
166
180
|
|
167
|
-
return available
|
181
|
+
return available
|
168
182
|
end
|
169
183
|
|
170
184
|
def click_next
|
data/lib/cert/signing_request.rb
CHANGED
data/lib/cert/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cert
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fastlane_core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 0.2.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 0.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -141,7 +141,7 @@ files:
|
|
141
141
|
- lib/cert/keychain_importer.rb
|
142
142
|
- lib/cert/signing_request.rb
|
143
143
|
- lib/cert/version.rb
|
144
|
-
homepage:
|
144
|
+
homepage: https://fastlane.tools
|
145
145
|
licenses:
|
146
146
|
- MIT
|
147
147
|
metadata: {}
|