pem 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4da99d132b8de3fb1c883fd7fd2f9807bfc4eeb8
4
- data.tar.gz: 063b9dd7013b162ef0eb4a4b6bc100e7f3287a56
3
+ metadata.gz: 7edf95975cba2399652b2744959bfed9685c4294
4
+ data.tar.gz: e389b47259d1fbfd6aaa36287a5187b697c99784
5
5
  SHA512:
6
- metadata.gz: 5a0d450445fdf674665a4ac47a8bcde6bac5ac2be0f04f555fc8376f90b74e7802119e5bb743d33ea2583ebf5081d72a888eb0c90e41ed02bc172cad65e9038a
7
- data.tar.gz: 15af5723d1880b3cdc72acd9a6fab3e927caa92aae4d868d72c81a9cd45d13f63eddcd2f403b8cf1036c2ce77fb802df9b049f6435a8d4fd7bba2155dff8ae5a
6
+ metadata.gz: 0bc479d395be07e1d7614b55b6a4c2ea5a81da9fb87f911c46debb687432c2e0cf41ba03a084750689f7f40b31a5e68aeb1c6fc321529a253262462cf943548d
7
+ data.tar.gz: eb66fe2cc46d49e55571abb17d6803d9e0b558132ddc91ca845d123f4ee5f147e871e29b641be52ad1e498ddd4996c39dfab87470f2fe4d783d6a9d1f1589a40
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  <p align="center">
2
- <a href="https://github.com/KrauseFx/deliver">Deliver</a> &bull;
3
- <a href="https://github.com/KrauseFx/snapshot">Snapshot</a> &bull;
4
- <a href="https://github.com/KrauseFx/frameit">FrameIt</a> &bull;
5
- <b>PEM</b>
2
+ <a href="https://github.com/KrauseFx/deliver">Deliver</a> &bull;
3
+ <a href="https://github.com/KrauseFx/snapshot">Snapshot</a> &bull;
4
+ <a href="https://github.com/KrauseFx/frameit">FrameIt</a> &bull;
5
+ <b>PEM</b> &bull;
6
+ <a href="https://github.com/KrauseFx/sigh">Sigh</a>
6
7
  </p>
7
8
  -------
8
9
 
@@ -10,7 +11,7 @@
10
11
  <img src="assets/pem.png">
11
12
  </p>
12
13
 
13
- Pem
14
+ Pem - Maintain your push certificates
14
15
  ============
15
16
 
16
17
  [![Twitter: @KauseFx](https://img.shields.io/badge/contact-@KrauseFx-blue.svg?style=flat)](https://twitter.com/KrauseFx)
@@ -52,6 +53,12 @@ Make sure, you have the latest version of the Xcode command line tools installed
52
53
 
53
54
  xcode-select --install
54
55
 
56
+ Install phantomjs (this is needed to control the Apple Developer Portal)
57
+
58
+ brew update && brew install phantomjs
59
+
60
+ If you don't already have homebrew installed, [install it here](http://brew.sh/).
61
+
55
62
  # Usage
56
63
 
57
64
  pem
@@ -68,6 +75,10 @@ You can pass parameters like this:
68
75
 
69
76
  pem -a at.felixkrause.app -u username
70
77
 
78
+ If you want to generate a development certificate instead:
79
+
80
+ pem --development
81
+
71
82
  ## Environment Variables
72
83
  In case you prefer environment variables:
73
84
 
@@ -88,7 +99,14 @@ There are 2 actions involved:
88
99
  ```PEM``` uses the password manager from [```Deliver```](https://github.com/KrauseFx/deliver#can-i-trust-deliver). Take a look the [Deliver README](https://github.com/KrauseFx/deliver#can-i-trust-deliver) for more information.
89
100
 
90
101
  # Tips
91
- ## Use the ```Provisioning Quicklook plugin```
102
+ ## Other helpful tools
103
+ Check out other tools in this collection to speed up your deployment process:
104
+ - [```deliver```](https://github.com/KrauseFx/deliver): Deploy screenshots, app metadata and app updates to the App Store using just one command
105
+ - [```snapshot```](https://github.com/KrauseFx/snapshot): Create hundreds of screenshots of your iPhone app... while doing something else
106
+ - [```FrameIt```](https://github.com/KrauseFx/frameit): Want a device frame around your screenshot? Do it in an instant!
107
+ - [```sigh```](https://github.com/KrauseFx/sigh): Because you would rather spend your time building stuff than fighting provisioning.
108
+
109
+ ## Use the 'Provisioning Quicklook plugin'
92
110
  Download and install the [Provisioning Plugin](https://github.com/chockenberry/Provisioning).
93
111
 
94
112
  It will show you the ```pem``` files like this:
data/bin/pem CHANGED
@@ -20,8 +20,6 @@ program :help_formatter, :compact
20
20
 
21
21
  global_option('--verbose') { $verbose = true }
22
22
 
23
- default_command :run
24
-
25
23
 
26
24
  command :renew do |c|
27
25
  c.syntax = 'pem renew'
@@ -29,6 +27,7 @@ command :renew do |c|
29
27
 
30
28
  c.option '-a', '--identifier STRING', String, 'The bundle identifier of your app'
31
29
  c.option '-u', '--username STRING', String, 'Your Apple ID username'
30
+ c.option '--development', 'Renew the development push certificate instead of the production one'
32
31
 
33
32
  c.action do |args, options|
34
33
  app = app_identifier(options)
@@ -36,12 +35,13 @@ command :renew do |c|
36
35
 
37
36
  PEM::UpdateChecker.verify_latest_version
38
37
 
39
- path = PEM::CertManager.new.run(app)
38
+ path = PEM::CertManager.new.run(app, !options.development)
40
39
 
41
40
  if path
42
- output = "./production_#{app}.pem"
41
+ file_name = File.basename(path)
42
+ output = "./#{file_name}"
43
43
  FileUtils.mv(path, output)
44
- puts output
44
+ puts output.green
45
45
  end
46
46
  end
47
47
  end
@@ -60,4 +60,4 @@ def app_identifier(options)
60
60
  return options.identifier if options.identifier
61
61
  return ENV["PEM_APP_IDENTIFIER"] if ENV["PEM_APP_IDENTIFIER"]
62
62
  return ask("App Identifier (Bundle ID, e.g. at.felixkrause.app): ")
63
- end
63
+ end
@@ -1,7 +1,7 @@
1
1
  module PEM
2
2
  class CertManager
3
3
  # Download the cert, do all kinds of Keychain related things
4
- def run(app_identifier)
4
+ def run(app_identifier, production)
5
5
  # Keychain (security) documentation: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/security.1.html
6
6
  # Old project, which might be helpful: https://github.com/jprichardson/keychain_manager
7
7
 
@@ -11,7 +11,7 @@ module PEM
11
11
 
12
12
  keychain = "PEM.keychain"
13
13
 
14
- cert_file = dev.fetch_cer_file(app_identifier)
14
+ cert_file = dev.fetch_cer_file(app_identifier, production)
15
15
  rsa_file = [TMP_FOLDER, 'myrsa'].join('/')
16
16
 
17
17
  previous_keychain = command("security default-keychain")
@@ -30,7 +30,8 @@ module PEM
30
30
 
31
31
  command("security export -k '#{keychain}' -t all -f pkcs12 -P '' -o #{p12_file}") # export code signing identity
32
32
 
33
- pem_file = [TMP_FOLDER, "production_#{app_identifier}.pem"].join('')
33
+ certificate_type = (production ? 'production' : 'development')
34
+ pem_file = [TMP_FOLDER, "#{certificate_type}_#{app_identifier}.pem"].join('')
34
35
  command("openssl pkcs12 -passin pass: -nodes -in #{p12_file} -out #{pem_file}")
35
36
 
36
37
  command("security delete-keychain #{keychain}")
@@ -23,6 +23,7 @@ module PEM
23
23
 
24
24
  # Strings
25
25
  PRODUCTION_SSL_CERTIFICATE_TITLE = "Production SSL Certificate"
26
+ DEVELOPMENT_SSL_CERTIFICATE_TITLE = "Development SSL Certificate"
26
27
 
27
28
  def initialize
28
29
  FileUtils.mkdir_p TMP_FOLDER
@@ -46,6 +47,8 @@ module PEM
46
47
  })
47
48
  end
48
49
 
50
+ page.driver.headers = { "Accept-Language" => "en" }
51
+
49
52
  self.login
50
53
  end
51
54
 
@@ -99,14 +102,10 @@ module PEM
99
102
  end
100
103
  end
101
104
 
102
- def app_status(app_identifier)
103
- # TODO
104
- end
105
-
106
105
  # This method will enable push for the given app
107
106
  # and download the cer file in any case, no matter if it existed before or not
108
107
  # @return the path to the push file
109
- def fetch_cer_file(app_identifier)
108
+ def fetch_cer_file(app_identifier, production)
110
109
  begin
111
110
  open_app_page(app_identifier)
112
111
 
@@ -151,35 +150,38 @@ module PEM
151
150
  # </div>
152
151
  # </div>
153
152
 
154
- def find_download_button
153
+ def find_download_button(section_title)
155
154
  wait_for_elements(".formContent")
156
155
 
157
156
  certificates_block = first('.appCertificates')
158
157
  download_button = nil
159
158
 
160
- production_section = false
159
+ found_section = false
161
160
  certificates_block.all(:xpath, "./div").each do |div|
162
- if production_section
161
+ if found_section
163
162
  # We're now in the second part, we only care about production certificates
164
163
  if (download_button = div.first(".download-button"))
165
164
  return download_button
166
165
  end
167
166
  end
168
167
 
169
- production_section = true if div.text == PRODUCTION_SSL_CERTIFICATE_TITLE
168
+ found_section = false if div["class"] == 'title' # next section, might be from dev to production
169
+ found_section = true if div.text == section_title
170
170
  end
171
171
  nil
172
172
  end
173
173
 
174
+ section_title = (production ? PRODUCTION_SSL_CERTIFICATE_TITLE : DEVELOPMENT_SSL_CERTIFICATE_TITLE)
175
+ certificate_type = (production ? 'production' : 'development')
174
176
 
175
- download_button = find_download_button
177
+ download_button = find_download_button(section_title)
176
178
 
177
179
  if not download_button
178
- Helper.log.warn "Push for app '#{app_identifier}' is enabled, but there is no production certificate yet."
179
- create_push_for_app(app_identifier)
180
+ Helper.log.warn "Push for app '#{app_identifier}' is enabled, but there is no #{certificate_type} certificate yet."
181
+ create_push_for_app(app_identifier, production)
180
182
 
181
- download_button = find_download_button
182
- raise "Could not find download button for Production SSL Certificate. Check out: '#{current_url}'" unless download_button
183
+ download_button = find_download_button(section_title)
184
+ raise "Could not find download button for #{section_title}. Check out: '#{current_url}'" unless download_button
183
185
  end
184
186
 
185
187
 
@@ -198,7 +200,7 @@ module PEM
198
200
 
199
201
  raise "Something went wrong when downloading the certificate" unless data
200
202
 
201
- path = "#{TMP_FOLDER}/aps_production_#{app_identifier}.cer"
203
+ path = "#{TMP_FOLDER}/aps_#{certificate_type}_#{app_identifier}.cer"
202
204
  File.write(path, data)
203
205
 
204
206
  Helper.log.info "Successfully downloaded latest .cer file."
@@ -229,8 +231,9 @@ module PEM
229
231
  end
230
232
  end
231
233
 
232
- def create_push_for_app(app_identifier)
233
- wait_for_elements('.button.small.navLink.distribution.enabled').last.click # Create Certificate button
234
+ def create_push_for_app(app_identifier, production)
235
+ element_name = (production ? '.button.small.navLink.distribution.enabled' : '.button.small.navLink.development.enabled')
236
+ wait_for_elements(element_name).last.click # Create Certificate button
234
237
 
235
238
  sleep 2
236
239
 
data/lib/pem/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module PEM
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-20 00:00:00.000000000 Z
11
+ date: 2014-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -244,7 +244,8 @@ homepage: http://felixkrause.at
244
244
  licenses:
245
245
  - MIT
246
246
  metadata: {}
247
- post_install_message:
247
+ post_install_message: This gem requires phantomjs. Install it using 'brew update &&
248
+ brew install phantomjs'
248
249
  rdoc_options: []
249
250
  require_paths:
250
251
  - lib