omudid 1.0.6 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.8.7"
4
+ - "1.9.2"
5
+ - "1.9.3"
data/Gemfile CHANGED
@@ -1,8 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'cupertino'
4
- gem 'spinning_cursor'
5
- gem 'rainbow'
6
-
7
3
  # Specify your gem's dependencies in omudid.gemspec
8
4
  gemspec
data/README.md CHANGED
@@ -5,6 +5,8 @@ Conveniently add a UDID to the iOS Developer Portal, refresh a provisioning prof
5
5
 
6
6
  Uploading a new provisioning profile to TestFlight is also supported.
7
7
 
8
+ [![Build Status](https://travis-ci.org/Papercloud/OneMoreUDID.png)](https://travis-ci.org/Papercloud/OneMoreUDID)
9
+
8
10
  Installation
9
11
  -
10
12
  ```
@@ -107,4 +109,5 @@ Note: you can repeat this process by running:
107
109
 
108
110
  Loading page... done
109
111
  Submitted ~/Library/MobileDevice/Provisioning Profiles/demo1.mobileprovision
112
+ Share link: http://testflightapp.com/install/XYZ/
110
113
  ```
data/Rakefile CHANGED
@@ -1 +1,9 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << 'test'
6
+ end
7
+
8
+ desc "Run tests"
9
+ task :default => :test
data/bin/omudid CHANGED
@@ -13,7 +13,7 @@ require 'cupertino_compatibility'
13
13
  require 'shellwords'
14
14
 
15
15
  program :name, 'OneMoreUDID'
16
- program :version, OneMoreUDID::VERSION
16
+ program :version, "1.0.7"
17
17
  program :description, '''Uses the developer portal to add one device to a provisioning profile,
18
18
  then downloads and installs the new profile.
19
19
  Also uploads provisioning profiles to TestFlight.'''
@@ -28,19 +28,19 @@ command :'list-teams' do |c|
28
28
  c.description = ''
29
29
 
30
30
  c.action do |args, options|
31
- username = (args[0] or ask 'Apple Username:')
32
- password = (args[1] or pw 'Apple Password:')
31
+ agent = OneMoreUDID::PortalAgent.new
32
+
33
+ username, password = (args[0] rescue nil), (args[1] rescue nil)
34
+ username, password = agent.login(username, password)
33
35
 
34
36
  if !args[1]
35
37
  puts
36
- say_warning 'Note: you can repeat this process by running:'
38
+ say_warning 'Note: you can automate this process by running:'
37
39
  say_warning ' omudid list-teams ' + Shellwords.escape(username) + ' [password]'
38
40
  puts
39
41
  end
40
42
 
41
- agent = OneMoreUDID::PortalAgent.new
42
-
43
- teams = agent.get_teams(username, password)
43
+ teams = agent.get_teams()
44
44
 
45
45
  table = Terminal::Table.new do |t|
46
46
  t << ['Team ID', 'Team Name']
@@ -62,23 +62,23 @@ command :'list-profiles' do |c|
62
62
  c.description = ''
63
63
 
64
64
  c.action do |args, options|
65
+ agent = OneMoreUDID::PortalAgent.new
66
+
67
+ username, password = (args[0] rescue nil), (args[1] rescue nil)
68
+ username, password = agent.login(username, password)
65
69
 
66
- username = (args[0] or ask 'Apple Username:')
67
- password = (args[1] or pw 'Apple Password:')
68
70
  team_name = args[2] rescue ''
69
71
 
70
72
  if !args[1]
71
73
  puts
72
74
  end
73
75
 
74
- agent = OneMoreUDID::PortalAgent.new
75
-
76
- agent.setup_cupertino(username, password, team_name)
76
+ agent.setup_cupertino(team_name)
77
77
  profiles = agent.list_profiles()
78
78
 
79
79
  if !args[1]
80
80
  puts
81
- say_warning 'Note: you can repeat this process by running:'
81
+ say_warning 'Note: you can automate this process by running:'
82
82
 
83
83
  if agent.agent.instance_variable_get('@team')
84
84
  say_warning ' omudid list-profiles ' + Shellwords.escape(username) + ' [password] ' + agent.agent.instance_variable_get('@team')
@@ -109,14 +109,19 @@ command :add do |c|
109
109
 
110
110
  c.action do |args, options|
111
111
 
112
- username = (args[0] or ask 'Apple Username:')
113
- password = (args[1] or pw 'Apple Password:')
112
+ agent = OneMoreUDID::PortalAgent.new
113
+ username, password = (args[0] rescue nil), (args[1] rescue nil)
114
+ username, password = agent.login(username, password)
114
115
 
115
- profile_name = (args[2] or ask 'Profile name (leave blank to select from available profiles):')
116
+ profile_name = (args[2] or (puts; ask 'Profile name (leave blank to select from available profiles):'))
116
117
  device_name = (args[3] or ask 'Device name:')
117
118
  udid = (args[4] or ask 'UDID:')
118
119
  team_name = args[5] rescue ''
119
120
 
121
+ if udid.match(/^[A-f0-9]{40}$/).nil?
122
+ say_error 'Invalid UDID entered, won\'t be inserted.'
123
+ end
124
+
120
125
  show_hint = false
121
126
 
122
127
  if !args[4]
@@ -124,8 +129,7 @@ command :add do |c|
124
129
  puts
125
130
  end
126
131
 
127
- agent = OneMoreUDID::PortalAgent.new
128
- agent.setup_cupertino(username, password, team_name)
132
+ agent.setup_cupertino(team_name)
129
133
 
130
134
  agent.add_device(device_name, udid)
131
135
 
@@ -136,7 +140,7 @@ command :add do |c|
136
140
  end
137
141
 
138
142
  if show_hint
139
- say_warning 'Note: you can repeat this process by running:'
143
+ say_warning 'Note: you can automate this process by running:'
140
144
 
141
145
  if agent.agent.instance_variable_get('@team')
142
146
  say_warning ' omudid add ' + Shellwords.escape(username) + ' [password] ' + Shellwords.escape(profile_name) + ' ' + Shellwords.escape(device_name) + ' ' + Shellwords.escape(udid) + ' ' + agent.agent.instance_variable_get('@team')
@@ -163,17 +167,17 @@ command :'testflight list-apps' do |c|
163
167
 
164
168
  c.action do |args, options|
165
169
 
166
- username = (args[0] or ask 'TestFlight Username:')
167
- password = (args[1] or pw 'TestFlight Password:')
170
+ agent = OneMoreUDID::TestFlightAgent.new
171
+
172
+ username, password = (args[0] rescue nil), (args[1] rescue nil)
173
+ username, password = agent.login(username, password)
168
174
 
169
175
  if !args[1]
170
- puts
171
- say_warning 'Note: you can repeat this process by running:'
176
+ say_warning 'Note: you can automate this process by running:'
172
177
  say_warning ' omudid testflight list-apps ' + Shellwords.escape(username) + ' [password]'
173
178
  puts
174
179
  end
175
180
 
176
- agent = OneMoreUDID::TestFlightAgent.new(username, password)
177
181
  apps = agent.get_apps()
178
182
 
179
183
  table = Terminal::Table.new do |t|
@@ -197,8 +201,10 @@ command :'testflight list-builds' do |c|
197
201
 
198
202
  c.action do |args, options|
199
203
 
200
- username = (args[0] or ask 'TestFlight Username:')
201
- password = (args[1] or pw 'TestFlight Password:')
204
+ agent = OneMoreUDID::TestFlightAgent.new
205
+ username, password = (args[0] rescue nil), (args[1] rescue nil)
206
+ username, password = agent.login(username, password)
207
+
202
208
  app_id = (args[2] or ask 'App ID (leave blank to select from available IDs):')
203
209
 
204
210
  show_hint = false
@@ -207,17 +213,16 @@ command :'testflight list-builds' do |c|
207
213
  show_hint = true
208
214
  end
209
215
 
210
- agent = OneMoreUDID::TestFlightAgent.new(username, password)
211
-
212
216
  if app_id == ''
217
+ apps = agent.get_apps().collect{ |id, name| id + ' ('+name+')' }
213
218
  puts
214
- choice = choose 'Select an app ID:', *agent.get_apps().collect{ |id, name| id + ' ('+name+')' }
219
+ choice = choose 'Select an app ID:', *apps
215
220
  puts
216
221
  regex = /^[^ ]*/
217
222
  app_id = (choice.match regex)[0]
218
223
  end
219
224
 
220
- say_warning 'Note: you can repeat this process by running:'
225
+ say_warning 'Note: you can automate this process by running:'
221
226
  say_warning ' omudid testflight list-builds ' + Shellwords.escape(username) + ' [password] ' + Shellwords.escape(app_id)
222
227
  puts
223
228
 
@@ -244,8 +249,10 @@ command :'testflight upload' do |c|
244
249
 
245
250
  c.action do |args, options|
246
251
 
247
- username = (args[0] or ask 'TestFlight Username:')
248
- password = (args[1] or pw 'TestFlight Password:')
252
+ agent = OneMoreUDID::TestFlightAgent.new
253
+ username, password = (args[0] rescue nil), (args[1] rescue nil)
254
+ username, password = agent.login(username, password)
255
+
249
256
  build_id = (args[2] or ask 'Build ID (leave blank to select from available IDs):')
250
257
  profile_name = (args[3] or ask 'Profile name (leave blank to select from available local profiles):')
251
258
 
@@ -255,21 +262,21 @@ command :'testflight upload' do |c|
255
262
  show_hint = true
256
263
  end
257
264
 
258
- agent = OneMoreUDID::TestFlightAgent.new(username, password)
259
-
260
265
  if build_id == ''
261
266
  app_id = ask 'Enter an App ID to list builds (or leave blank to list App IDs):'
262
267
 
263
268
  if app_id == ''
269
+ apps = agent.get_apps().collect{ |id, name| id + ' ('+name+')' }
264
270
  puts
265
- choice = choose 'Select an app ID:', *agent.get_apps().collect{ |id, name| id + ' ('+name+')' }
271
+ choice = choose 'Select an app ID:', *apps
266
272
  puts
267
273
  regex = /^[^ ]*/
268
274
  app_id = (choice.match regex)[0]
269
275
  end
270
276
 
277
+ builds = agent.get_builds(app_id).collect{ |id, name| id + ' ('+name+')' }
271
278
  puts
272
- choice = choose 'Select a build ID:', *agent.get_builds(app_id).collect{ |id, name| id + ' ('+name+')' }
279
+ choice = choose 'Select a build ID:', *builds
273
280
  puts
274
281
  regex = /^[^ ]*/
275
282
  build_id = (choice.match regex)[0]
@@ -286,7 +293,7 @@ command :'testflight upload' do |c|
286
293
  end
287
294
 
288
295
  if show_hint
289
- say_warning 'Note: you can repeat this process by running:'
296
+ say_warning 'Note: you can automate this process by running:'
290
297
  say_warning ' omudid testflight list-builds ' + Shellwords.escape(username) + ' [password] ' + Shellwords.escape(build_id) + ' ' + Shellwords.escape(profile_name)
291
298
  puts
292
299
  end
@@ -1,9 +1,54 @@
1
+ require 'keychain'
2
+
1
3
  module OneMoreUDID
2
4
  class PortalAgent
3
5
 
4
6
  attr_accessor :agent
7
+ attr_accessor :username, :password
8
+
9
+ def login(username, password)
10
+ if username != nil and password != nil
11
+ self.username, self.password = username, password
12
+ return
13
+ end
14
+
15
+ accounts = Keychain.generic_password_items.select { |item| item.label == "omudid" }
16
+ username = password = nil
17
+ if accounts and accounts.count > 0
18
+ choice = choose 'Select an account to use:', *accounts.collect{ |account| account.account }.push('New account').push('Delete account')
19
+ case choice
20
+ when "New account"
21
+ puts
22
+ when "Delete account"
23
+ puts
24
+ to_delete = choose 'Select an account to delete:', *accounts.collect{ |account| account.account }.push('ALL')
25
+ case to_delete
26
+ when "ALL"
27
+ accounts.each{ |account| account.delete }
28
+ else
29
+ account = Keychain.generic_password_items.find { |item| item.label == "omudid" and item.account == to_delete }.delete
30
+ end
31
+ abort
32
+ else
33
+ account = Keychain.generic_password_items.find { |item| item.label == "omudid" and item.account == choice }
34
+ username = account.account
35
+ password = account.password
36
+ end
37
+ end
38
+ if username == nil
39
+ username = ask 'Apple Username:'
40
+ password = pw 'Apple Password:'
41
+ puts
42
+ if agree 'Do you want to save these login details? (yes/no)'
43
+ Keychain.add_generic_password('omudid', username, password) rescue say_error 'Credentials not saved, email already stored in keychain.'
44
+ end
45
+ end
46
+
47
+ self.username, self.password = username, password
48
+ return username, password
49
+ end
5
50
 
6
- def get_teams(username, password)
51
+ def get_teams
7
52
  agent = Cupertino::ProvisioningPortal::Agent.new
8
53
 
9
54
  agent.instance_eval do
@@ -33,8 +78,8 @@ module OneMoreUDID
33
78
  end
34
79
  end
35
80
 
36
- agent.username = username
37
- agent.password = password
81
+ agent.username = self.username
82
+ agent.password = self.password
38
83
 
39
84
  agent.get('https://developer.apple.com/account/selectTeam.action')
40
85
 
@@ -50,7 +95,7 @@ module OneMoreUDID
50
95
  formatted_teams
51
96
  end
52
97
 
53
- def setup_cupertino(username, password, team_name = '')
98
+ def setup_cupertino(team_name = '')
54
99
  agent = Cupertino::ProvisioningPortal::Agent.new
55
100
 
56
101
  agent.instance_eval do
@@ -107,8 +152,8 @@ module OneMoreUDID
107
152
  end
108
153
  end
109
154
 
110
- agent.username = username
111
- agent.password = password
155
+ agent.username = self.username
156
+ agent.password = self.password
112
157
  agent.instance_variable_set(:@teamName, team_name)
113
158
 
114
159
  @agent = agent
@@ -1,13 +1,52 @@
1
+ require 'keychain'
2
+
1
3
  module OneMoreUDID
2
4
  class TestFlightAgent < ::Mechanize
3
5
 
4
6
  attr_accessor :username, :password
5
7
 
6
- def initialize(username, password)
7
- super()
8
- @username = username
9
- @password = password
10
- self
8
+ def login(username, password)
9
+ if username != nil and password != nil
10
+ self.username, self.password = username, password
11
+ return
12
+ end
13
+
14
+ accounts = Keychain.generic_password_items.select { |item| item.label == "testflight" }
15
+ username = password = nil
16
+ if accounts and accounts.count > 0
17
+ choice = choose 'Select an account to use:', *accounts.collect{ |account| account.account }.push('New account').push('Delete account')
18
+ case choice
19
+ when "New account"
20
+ puts
21
+ when "Delete account"
22
+ puts
23
+ to_delete = choose 'Select an account to delete:', *accounts.collect{ |account| account.account }.push('ALL')
24
+ case to_delete
25
+ when "ALL"
26
+ accounts.each{ |account| account.delete }
27
+ else
28
+ account = Keychain.generic_password_items.find { |item| item.label == "testflight" and item.account == to_delete }.delete
29
+ end
30
+ abort
31
+ else
32
+ account = Keychain.generic_password_items.find { |item| item.label == "testflight" and item.account == choice }
33
+ username = account.account
34
+ password = account.password
35
+ puts
36
+ end
37
+ end
38
+ if username == nil
39
+ username = ask 'Testflight Username:'
40
+ password = pw 'Testflight Password:'
41
+ puts
42
+ if agree 'Do you want to save these login details? (yes/no)'
43
+ Keychain.add_generic_password('testflight', username, password) rescue say_error 'Credentials not saved, email already stored in keychain.'
44
+ end
45
+ puts
46
+ end
47
+
48
+ self.username, self.password = username, password
49
+ return username, password
11
50
  end
12
51
 
13
52
  def get(uri, parameters = [], referer = nil, headers = {})
data/lib/omudid.rb CHANGED
@@ -3,7 +3,7 @@ require 'spinning_cursor'
3
3
  require 'rainbow'
4
4
 
5
5
  module OneMoreUDID
6
- VERSION = "1.0.6"
6
+
7
7
  end
8
8
 
9
9
  require 'omudid/local_agent'
data/omudid.gemspec CHANGED
@@ -2,11 +2,12 @@
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
- require 'omudid'
5
+ #require 'rubygems'
6
+ #require 'omudid'
6
7
 
7
8
  Gem::Specification.new do |spec|
8
9
  spec.name = "omudid"
9
- spec.version = OneMoreUDID::VERSION
10
+ spec.version = "1.0.7"
10
11
  spec.authors = ["David Lawson"]
11
12
  spec.email = ["tech.lawson@gmail.com"]
12
13
  spec.description = 'Conveniently add a UDID to the iOS Developer Portal, refresh a provisioning profile and download it. Uploading a new provisioning profile to TestFlight is also supported.'
@@ -21,8 +22,12 @@ Gem::Specification.new do |spec|
21
22
 
22
23
  spec.add_development_dependency "bundler", "~> 1.3"
23
24
  spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "vcr"
26
+ spec.add_development_dependency "webmock"
24
27
 
28
+ spec.add_dependency "nokogiri", "1.5.9"
25
29
  spec.add_dependency "cupertino"
30
+ spec.add_dependency "keychain_services"
26
31
 
27
32
  spec.add_dependency "spinning_cursor"
28
33
  spec.add_dependency "rainbow"
data/test/.DS_Store ADDED
Binary file
@@ -0,0 +1,37 @@
1
+ require 'rubygems'
2
+
3
+ require 'omudid'
4
+
5
+ module Commander
6
+ module UI
7
+ attr :password
8
+ end
9
+ end
10
+
11
+ require 'terminal-table'
12
+ require 'term/ansicolor'
13
+
14
+ require 'cupertino_compatibility'
15
+
16
+ require 'test/unit'
17
+ require 'vcr'
18
+ require 'omudid/portal_agent'
19
+
20
+ VCR.configure do |c|
21
+ c.cassette_library_dir = 'test/vcr'
22
+ c.hook_into :webmock # or :fakeweb
23
+ c.default_cassette_options = { :serialize_with => :syck }
24
+ end
25
+
26
+ class OneMoreUDIDTest < Test::Unit::TestCase
27
+ def test_teams
28
+ VCR.use_cassette('teams') do
29
+ agent = OneMoreUDID::PortalAgent.new
30
+ teams = agent.get_teams('test@email.com', 'password')
31
+
32
+ assert teams.count == 2
33
+ assert teams['XYZ1'] == 'Team 1'
34
+ assert teams['XYZ2'] == 'Team 2 - iOS Developer Program'
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,682 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://developer.apple.com/account/selectTeam.action
6
+ body:
7
+ string: ""
8
+ headers:
9
+ Accept:
10
+ - "*/*"
11
+ Accept-Language:
12
+ - en-us,en;q=0.5
13
+ User-Agent:
14
+ - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.22 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22
15
+ Accept-Charset:
16
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
17
+ Host:
18
+ - developer.apple.com
19
+ Accept-Encoding:
20
+ - gzip,deflate,identity
21
+ Keep-Alive:
22
+ - 300
23
+ Connection:
24
+ - keep-alive
25
+ response:
26
+ status:
27
+ code: 302
28
+ message: Moved Temporarily
29
+ headers:
30
+ Location:
31
+ - https://daw.apple.com/cgi-bin/WebObjects/DSAuthWeb.woa/wa/login?appIdKey=d4f7d769c2abecc664d0dadfed6a67f943442b5e9c87524d4587a95773750cea&path=%2F%2Faccount%2FselectTeam.action
32
+ Set-Cookie:
33
+ - NSC_MCWT_efwfmpqfs_443_BqbdifKbwb=ffffffff12f61da945525d5f4f58455e445a4a4232aa;Version=1;path=/;secure;httponly
34
+ Cache-Control:
35
+ - post-check=0, pre-check=0
36
+ Server:
37
+ - Apache
38
+ Content-Type:
39
+ - text/plain
40
+ Last-Modified:
41
+ - Thu, 27 Jun 2013 07:35:22 GMT
42
+ Content-Length:
43
+ - "0"
44
+ Ms-Author-Via:
45
+ - DAV
46
+ Expires:
47
+ - Mon, 26 Jul 1997 05:00:00 GMT
48
+ Pragma:
49
+ - no-cache
50
+ X-Frame-Options:
51
+ - SAMEORIGIN
52
+ - SAMEORIGIN
53
+ Keep-Alive:
54
+ - timeout=15, max=479
55
+ Date:
56
+ - Thu, 27 Jun 2013 07:35:22 GMT
57
+ Connection:
58
+ - Keep-Alive
59
+ body:
60
+ string: ""
61
+ http_version:
62
+ recorded_at: Thu, 27 Jun 2013 07:35:33 GMT
63
+ - request:
64
+ method: get
65
+ uri: https://daw.apple.com/cgi-bin/WebObjects/DSAuthWeb.woa/wa/login?appIdKey=d4f7d769c2abecc664d0dadfed6a67f943442b5e9c87524d4587a95773750cea&path=//account/selectTeam.action
66
+ body:
67
+ string: ""
68
+ headers:
69
+ Accept:
70
+ - "*/*"
71
+ Accept-Language:
72
+ - en-us,en;q=0.5
73
+ User-Agent:
74
+ - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.22 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22
75
+ Accept-Charset:
76
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
77
+ Host:
78
+ - daw.apple.com
79
+ Accept-Encoding:
80
+ - gzip,deflate,identity
81
+ Keep-Alive:
82
+ - 300
83
+ Connection:
84
+ - keep-alive
85
+ response:
86
+ status:
87
+ code: 200
88
+ message: Apple
89
+ headers:
90
+ Cache-Control:
91
+ - max-age=0
92
+ - must-revalidate
93
+ - no-cache
94
+ - no-store
95
+ - private
96
+ Server:
97
+ - Apache
98
+ Content-Type:
99
+ - text/html; charset=iso-8859-1
100
+ Content-Length:
101
+ - "8171"
102
+ Expires:
103
+ - Wed, 05-Jun-2013 18:38:39 GMT
104
+ Pragma:
105
+ - no-cache
106
+ Cneonction:
107
+ - close
108
+ Date:
109
+ - Thu, 27 Jun 2013 07:35:23 GMT
110
+ body:
111
+ string: "<!DOCTYPE html>\n\
112
+ <html lang=\"en-us\">\n\
113
+ <head>\n\
114
+ \t<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n\
115
+ \t<meta name=\"Author\" content=\"Apple Inc.\" />\n\
116
+ \t<meta name=\"viewport\" content=\"width=1024\" />\n\
117
+ \t<link rel=\"shortcut icon\" href=\"https://devimages.apple.com.edgekey.net/favicon.ico\" />\n\
118
+ \t<link rel=\"icon\" href=\"https://devimages.apple.com.edgekey.net/favicon.ico\" />\n\
119
+ \t<link rel=\"stylesheet\" href=\"https://devimages.apple.com.edgekey.net/assets/core/styles/base.css\" type=\"text/css\" />\n\
120
+ \t<link rel=\"stylesheet\" href=\"https://devimages.apple.com.edgekey.net/assets/core/styles/adc.css\" type=\"text/css\" />\n\
121
+ \t<script src=\"https://devimages.apple.com.edgekey.net/assets/core/scripts/lib/prototype.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\
122
+ \t<script src=\"https://devimages.apple.com.edgekey.net/assets/core/scripts/lib/scriptaculous.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\
123
+ \t<script src=\"https://devimages.apple.com.edgekey.net/assets/core/scripts/browserdetect.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\
124
+ \t<script src=\"https://devimages.apple.com.edgekey.net/assets/core/scripts/apple_core.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\
125
+ \t<script src=\"https://devimages.apple.com.edgekey.net/assets/core/scripts/search_decorator.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\
126
+ \t<script src=\"https://devimages.apple.com.edgekey.net/assets/core/scripts/adc_core.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\
127
+ \t<script src=\"https://devimages.apple.com.edgekey.net/assets/scripts/ac_retina.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\
128
+ \t<script type=\"text/javascript\">\n\
129
+ \t\tdocument.write('<link rel=\"stylesheet\" type=\"text/css\" href=\"https://devimages.apple.com.edgekey.net/assets/styles/script.css\" media=\"screen\">');\n\
130
+ \t</script>\t\n\
131
+ \t\n\
132
+ \t<title>Sign in with your Apple ID - Apple Developer</title>\n\
133
+ \t<link rel=\"stylesheet\" href=\"https://devimages.apple.com.edgekey.net/assets/styles/linen.css\" type=\"text/css\" />\n\
134
+ \t<link rel=\"stylesheet\" href=\"https://devimages.apple.com.edgekey.net/login/styles/linen.css\" type=\"text/css\" />\n\
135
+ \t<script>\n\
136
+ \tEvent.onDOMReady(function() {\n\
137
+ \t\t// password expired page\n\
138
+ \t\tif ($$('span.dsheading').length > 0) {\n\
139
+ \t\t\t$$('#ds_container .dslabel label').each(function(el) { el.innerHTML += ':'; });\n\
140
+ \t\t\tif ($$('span.dserror').length > 0) {\n\
141
+ \t\t\t\t$$('span.dserror').each(function(el) {\n\
142
+ \t\t\t\t\tel.innerHTML = el.innerHTML.gsub('AppleID', 'Apple ID');\n\
143
+ \t\t\t\t});\n\
144
+ \t\t\t\t$$('img').each(function(img) {\n\
145
+ \t\t\t\t\timg.hide();\n\
146
+ \t\t\t\t});\n\
147
+ \t\t\t}\n\
148
+ \t\t\t$('content').show();\n\
149
+ \t\t\tif($$('span.dsheading')[0].innerHTML == \"Sign In Successful\") {\n\
150
+ \t\t\t\t// update secret info page\n\
151
+ \t\t\t\t$$('body.login')[0].addClassName('update-info');\n\
152
+ \t\t\t\t$$('input').each(function(el) {\n\
153
+ \t\t\t\t\tel.observe('keyup', function(e) {\n\
154
+ \t\t\t\t\t\tif(e.keyCode == Event.KEY_RETURN) {\n\
155
+ \t\t\t\t\t\t\tdocument.harvestForm.submit();\n\
156
+ \t\t\t\t\t\t\te.stop();\n\
157
+ \t\t\t\t\t\t}\n\
158
+ \t\t\t\t\t});\n\
159
+ \t\t\t\t});\n\
160
+ \t\t\t} else {\n\
161
+ \t\t\t\t// regular password expired pages\n\
162
+ \t\t\t\t$$('body.login')[0].addClassName('password-expired');\n\
163
+ \t\t\t\t$$('input').each(function(el) {\n\
164
+ \t\t\t\t\tel.observe('keyup', function(e) {\n\
165
+ \t\t\t\t\t\tif(e.keyCode == Event.KEY_RETURN) {\n\
166
+ \t\t\t\t\t\t\tdocument.appleConnectExpiredPasswordForm.submit();\n\
167
+ \t\t\t\t\t\t\te.stop();\n\
168
+ \t\t\t\t\t\t}\n\
169
+ \t\t\t\t\t});\n\
170
+ \t\t\t\t});\n\
171
+ \t\t\t}\n\
172
+ \t\t}\n\
173
+ \t\t// wrong password page\n\
174
+ \t\telse if ($$('span.dserror').length > 0) {\n\
175
+ \t\t\t$$('body.login')[0].addClassName('password-wrong');\n\
176
+ \t\t\t$$('#ds_container .dslabel').each(function(el) { el.innerHTML += ':'; });\n\
177
+ \t\t\t$('content').show();\n\
178
+ \t\t\tdocument.appleConnectForm.theAccountPW.focus();\n\
179
+ \t\t}\n\
180
+ \t\t// basic login page\n\
181
+ \t\telse {\n\
182
+ \t\t\t$$('#ds_container .dslabel').each(function(el) { el.innerHTML += ':'; });\n\
183
+ \t\t\t$$('#ds_container tr')[1].hide();\n\
184
+ \t\t\t$('content').show();\n\
185
+ \t\t}\n\
186
+ \t});\n\
187
+ \t</script>\n\
188
+ </head>\n\
189
+ <body class=\"login\" onload=\"dsfocus()\">\n\
190
+ \t<div class=\"content-wrapper\">\n\n\
191
+ \t\t<div id=\"globalheader\" data-hires=\"true\">\n\
192
+ \t\t\t<h1><a href=\"https://developer.apple.com/\">Apple Developer</a></h1>\n\
193
+ \t\t</div>\n\n\
194
+ \t\t<div id=\"content\" class=\"content\" style=\"display:none;\">\n\n\
195
+ \t\t\t<header class=\"hero\">\n\
196
+ \t\t\t\t<hgroup>\n\
197
+ \t\t\t\t\t<h1>Sign in with your Apple ID</h1>\n\
198
+ \t\t\t\t\t<p class=\"intro\">Use the Apple ID you used to register or register now.</p>\n\
199
+ \t\t\t\t</hgroup>\n\
200
+ \t\t\t</header>\n\n\
201
+ \t\t\t\t\n\
202
+ \t\n\
203
+ \t\n\
204
+ \t\t\n\
205
+ \t\t\t<script>\n\
206
+ \tfunction dsfocus(){ document.appleConnectForm.theAccountName.focus(); }\n\
207
+ </script>\n\n\n\
208
+ \t\n\
209
+ \t\t<div id=\"ds_container\">\n\
210
+ \t\n\
211
+ \t\n\n\n\n\n\
212
+ \t\n\
213
+ \t\t\n\
214
+ \t\t\t<form method=\"post\" name=\"appleConnectForm\" action=\"/cgi-bin/WebObjects/DSAuthWeb.woa/733/wo/IQAxF6JbTkvtCLOxMCDmig/0.1.3.1.1.2.1.1.3.1.1\">\n\n\
215
+ \t\t\t\t\n\
216
+ \t\t\t\t\n\
217
+ \t\t\t\t\n\
218
+ \t\t\t\t\n\
219
+ \t\t\t\t\n\
220
+ \t\t\t\t\n\
221
+ \t\t\t\t\n\
222
+ \t\t\t\t\n\
223
+ \t\t\t\t\n\
224
+ \t\t\t\t\n\
225
+ \t\t\t\t\n\
226
+ \t\t\t\t\t<table cellpadding=0 cellspacing=0 border=0 width=273>\n\
227
+ \t\t\t\t\t\t<tr valign=top>\n\
228
+ \t\t\t\t\t\t\t<td align=left><font size=2><font face=\"Geneva, Verdana, Arial, Helvetica, sans-serif\" size=1 class=\"G10\" />\n\
229
+ \t\t\t\t\t\t\t\t<label for=\"accountname\"><span class=\"dslabel\">Apple ID</span></label>\n\
230
+ \t\t\t\t\t\t\t\t<font color=\"#ff1102\"></font></font /><br>\n\
231
+ \t\t\t\t\t\t\t\t<font size='2'><input size=\"30\" autocapitalize=\"off\" autocorrect=\"off\" maxlength=\"128\" id=\"accountname\" type=\"text\" name=\"theAccountName\" /></font></font>\n\
232
+ \t\t\t\t\t\t\t\t\n\
233
+ \t\t\t\t\t\t\t</td>\n\
234
+ \t\t\t\t\t\t</tr>\n\
235
+ \t\t\t\t\t\t\n\
236
+ \t\t\t\t\t\t<tr><td><img alt=\"\" width=\"273\" height=\"5\" src=\"/AppleConnect/US-EN/spacer.gif\" /></td></tr>\n\
237
+ \t\t\t\t\t\t<tr><td><img alt=\"\" width=\"273\" height=\"5\" src=\"/AppleConnect/US-EN/spacer.gif\" /></td></tr>\n\
238
+ \t\t\t\t\t\t<tr>\n\
239
+ \t\t\t\t\t\t\t<td align='left'>\n\
240
+ \t\t\t\t\t\t\t\t<font face=\"Geneva, Verdana, Arial, Helvetica, sans-serif\" size=1 class=\"G10\" />\n\
241
+ \t\t\t\t\t\t\t\t\t<label for=\"accountpassword\"><span class=\"dslabel\">Password</span></label>\n\
242
+ \t\t\t\t\t\t\t\t</font />\n\
243
+ \t\t\t\t\t\t\t\t<br>\n\
244
+ \t\t\t\t\t\t\t\t<input size=\"30\" autocapitalize=\"off\" oncut=\"return false ;\" oncopy=\"return false ;\" autocorrect=\"off\" maxlength=\"32\" id=\"accountpassword\" type=\"password\" name=\"theAccountPW\" /><input border=\"0\" width=\"0\" height=\"0\" type=\"image\" name=\"1.Continue\" src=\"/AppleConnect/US-EN/spacer.gif\" />\n\
245
+ \t\t\t\t\t\t\t</td>\n\
246
+ \t\t\t\t\t\t</tr>\n\
247
+ \t\t\t\t\t\t\n\
248
+ \t\t\t\t\t\t\n\
249
+ \t\t\t\t\t\t\n\
250
+ \t\t\t\t\t\t<tr><td><img alt=\"\" width=\"273\" height=\"5\" src=\"/AppleConnect/US-EN/spacer.gif\" /></td></tr>\n\
251
+ \t\t\t\t\t\t<tr><td><img alt=\"\" width=\"273\" height=\"5\" src=\"/AppleConnect/US-EN/spacer.gif\" /></td></tr>\n\
252
+ \t\t\t\t\t\t\n\
253
+ \t\t\t\t\t\t<tr>\n\
254
+ \t\t\t\t\t\t\t<td>\n\
255
+ \t\t\t\t\t\t\t\t<table cellspacing='0' border='0' width='273' cellpadding='0'>\n\
256
+ \t\t\t\t\t\t\t\t\t<tr align='left'>\n\
257
+ \t\t\t\t\t\t\t\t\t\t\n\
258
+ \t\t\t\t\t\t\t\t\t\t\t<td align='left' width='170'>\n\
259
+ \t\t\t\t\t\t\t\t\t\t\t\t\n\n\
260
+ \t\t\t\t\t\t\t\t\t\t\t\t\n\
261
+ \t\t\t\t\t\t\t\t\t\t\t\t\t<font size='1'>\n\
262
+ \t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"dstext\">\n\
263
+ \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\
264
+ \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\
265
+ \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\
266
+ \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\
267
+ \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<!-- Show Forgot Password Button as button -->\n\
268
+ \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<input border=\"0\" alt=\"Did you forget your password?\" type=\"image\" name=\"1.Forgot\" src=\"/AppleConnect/US-EN/adc09_forgot_password.png\" />\n\
269
+ \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\
270
+ \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\
271
+ \t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\
272
+ \t\t\t\t\t\t\t\t\t\t\t\t\t</font>\n\
273
+ \t\t\t\t\t\t\t\t\t\t\t\t\n\
274
+ \t\t\t\t\t\t\t\t\t\t\t</td>\n\
275
+ \t\t\t\t\t\t\t\t\t\t\t<td width='15'><img alt=\"\" width=\"15\" height=\"5\" src=\"/AppleConnect/US-EN/spacer.gif\" /></td>\n\
276
+ \t\t\t\t\t\t\t\t\t\t\n\
277
+ \t\t\t\t\t\t\t\t\t\t\n\
278
+ \t\t\t\t\t\t\t\t\t\t\n\
279
+ \t\t\t\t\t\t\t\t\t\t\t<td align='left' width='88'><input border=\"0\" alt=\"Sign In\" type=\"image\" name=\"1.Continue\" src=\"/AppleConnect/US-EN/adc09_signin.png\" /></td>\n\
280
+ \t\t\t\t\t\t\t\t\t\t\n\
281
+ \t\t\t\t\t\t\t\t\t\t\n\
282
+ \t\t\t\t\t\t\t\t\t</tr>\n\
283
+ \t\t\t\t\t\t\t\t</table>\n\
284
+ \t\t\t\t\t\t\t</td>\n\
285
+ \t\t\t\t\t\t</tr>\n\
286
+ \t\t\t\t\t</table>\n\
287
+ \t\t\t\t\t<input type=\"hidden\" name=\"theAuxValue\" />\n\
288
+ \t\t\t\t\n\
289
+ \t\t\t<input type=\"hidden\" name=\"wosid\" value=\"IQAxF6JbTkvtCLOxMCDmig\" /></form>\n\
290
+ \t\t\n\n\
291
+ \t\t\n\
292
+ \t\t\n\
293
+ \t\t\n\
294
+ \t\t\n\
295
+ \t\t\t\n\
296
+ </div>\n\n\
297
+ \t\n\
298
+ \t\n\
299
+ \t\n\
300
+ \t\n\
301
+ \t\n\n\n\n\n\
302
+ \t\t\n\
303
+ \t\t\n\
304
+ \t\n\
305
+ \t\t\t\n\n\
306
+ \t\t\t<a class=\"button large blue password-update\" onclick=\"document.appleConnectExpiredPasswordForm.submit(); return false;\"><span>Update</span></a>\n\
307
+ \t\t\t<a class=\"button large register-button\" href=\"https://developer.apple.com/programs/register/\"><span>Register</span></a>\n\
308
+ \t\t\t<a class=\"button large blue signin-button\" onclick=\"document.appleConnectForm.submit(); return false;\"><span>Sign In</span></a>\n\
309
+ \t\t\t<div class=\"divider\"></div>\n\
310
+ \t\t\t<a class=\"forgot-button\" href=\"https://iforgot.apple.com/\">Forgot ID or Password?</a>\n\
311
+ \t\t\t\t\t\n\
312
+ \t\t</div><!-- /content -->\n\n\
313
+ \t\t<div class=\"content-spacer\"></div>\n\n\
314
+ \t\t<div id=\"globalfooter\">\n\
315
+ \t\t\t<div class=\"gf-sosumi\">\n\
316
+ \t\t\t\t<p>Copyright \xA9 2013 Apple Inc. All rights reserved.</p>\n\
317
+ \t\t\t\t<ul class=\"piped\">\n\
318
+ \t\t\t\t\t<li><a href=\"http://www.apple.com/legal/terms/site.html\" class=\"first\">Terms of Use</a></li>\n\
319
+ \t\t\t\t\t<li><a href=\"http://www.apple.com/privacy/\">Privacy Policy</a></li>\n\
320
+ \t\t\t\t</ul>\n\
321
+ \t\t\t</div>\n\
322
+ \t\t</div><!--/globalfooter-->\n\
323
+ \t</div>\n\
324
+ </body>\n\
325
+ </html>"
326
+ http_version:
327
+ recorded_at: Thu, 27 Jun 2013 07:35:34 GMT
328
+ - request:
329
+ method: post
330
+ uri: https://daw.apple.com/cgi-bin/WebObjects/DSAuthWeb.woa/733/wo/IQAxF6JbTkvtCLOxMCDmig/0.1.3.1.1.2.1.1.3.1.1
331
+ body:
332
+ string: theAccountName=test@email.com&theAccountPW=password&theAuxValue=&wosid=IQAxF6JbTkvtCLOxMCDmig
333
+ headers:
334
+ Referer:
335
+ - !ruby/object:URI::HTTPS
336
+ fragment:
337
+ host: daw.apple.com
338
+ opaque:
339
+ password:
340
+ path: /cgi-bin/WebObjects/DSAuthWeb.woa/wa/login
341
+ port: 443
342
+ query: appIdKey=d4f7d769c2abecc664d0dadfed6a67f943442b5e9c87524d4587a95773750cea&path=%2F%2Faccount%2FselectTeam.action
343
+ registry:
344
+ scheme: https
345
+ user:
346
+ Accept:
347
+ - "*/*"
348
+ Accept-Language:
349
+ - en-us,en;q=0.5
350
+ User-Agent:
351
+ - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.22 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22
352
+ Accept-Charset:
353
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
354
+ Content-Type:
355
+ - application/x-www-form-urlencoded
356
+ Host:
357
+ - daw.apple.com
358
+ Content-Length:
359
+ - "108"
360
+ Accept-Encoding:
361
+ - gzip,deflate,identity
362
+ Keep-Alive:
363
+ - 300
364
+ Connection:
365
+ - keep-alive
366
+ response:
367
+ status:
368
+ code: 200
369
+ message: Apple
370
+ headers:
371
+ Set-Cookie:
372
+ - DefaultAppleID=thisCookieIsToBeRemovedAtTheNextResponse; version="1"; max-age=0; expires=Thu, 01-Jan-1970 00:00:00 GMT; path=/; domain=.apple.com
373
+ - ds01=thisCookieIsToBeRemovedAtTheNextResponse; version="1"; max-age=0; expires=Thu, 01-Jan-1970 00:00:00 GMT; path=/; domain=.apple.com
374
+ - ds01_a=056e619bd5b2b91867ba64ff14360013fb6cfdfbf22ba93d292a81c1ac3fcc492e2cfdbf14081b75fca5d3b933f25c84c2c72c775613bae8f6ea0cf10f2fcca1c6026560e1701760d7c4a9200b9d41dfc1ceadab02fb3635412c59648311b586GZVX; version="1"; expires=Fri, 27-Jun-2014 07:35:24 GMT; path=/; domain=.apple.com
375
+ - ds01_p_c_1001=thisCookieIsToBeRemovedAtTheNextResponse; version="1"; max-age=0; expires=Thu, 01-Jan-1970 00:00:00 GMT; path=/; domain=.apple.com
376
+ - myacinfo=DAWTKNV2b35735344c00759cd70102a9f415865b4413adc3d254a65dafc4359bb95ae591e940a6963e1ae23545999f9330411956eafa6f3f949ebd2a709baccf283376f2f1d514b67b8324c98641225c57bd69f7f673308cc5b19020c95ea42a4722bc0d9dc3c6fd53ed5d2542fe3c5803ba24ed6967343f50ff38148c0a12bbbaf19056e0d0a74e143536ddbeaafd3b19bdd36ca801f0c41e40050b6663bb28846e2bf2d6b41636d23cc6ab264925de3f8a4e798c29645b9b799e2fd7cb262f922b599da048d2d4162913d6361a996a650bc1ba3b90ff635bd57238c7bfcd14db5c8e7eacf37794298c9a224dc92734d0dbbdfed5690233abe3761bfc7c24e103bc2d534e5d90ce21d2fbd4785497765d7dd1ce2f8b55d32289689ebb9ade0ce10a135bMVRYV2; version="1"; path=/; domain=.apple.com; secure; HttpOnly
377
+ - myacinfoName=BA710667A884C9ECD61188E9CE70F5F1C5BE108F044A95112F92FC238E8837D8; version="1"; expires=Fri, 31-Dec-2010 20:00:00 GMT; path=/; domain=.apple.com
378
+ Cache-Control:
379
+ - max-age=0
380
+ - must-revalidate
381
+ - no-cache
382
+ - no-store
383
+ - private
384
+ Server:
385
+ - Apache
386
+ Content-Type:
387
+ - text/html; charset=iso-8859-1
388
+ Content-Length:
389
+ - "289"
390
+ Expires:
391
+ - Wed, 05-Jun-2013 18:38:39 GMT
392
+ Pragma:
393
+ - no-cache
394
+ Date:
395
+ - Thu, 27 Jun 2013 07:35:24 GMT
396
+ Nncoection:
397
+ - close
398
+ body:
399
+ string: |
400
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
401
+ <HTML>
402
+ <HEAD>
403
+ <META NAME="generator" CONTENT="WebObjects 5">
404
+ <TITLE>Apple</TITLE>
405
+ <META HTTP-EQUIV="REFRESH" CONTENT="0;URL=https://developer.apple.com/account/selectTeam.action" />
406
+ </HEAD>
407
+ <BODY BGCOLOR=#FFFFFF>
408
+ </BODY>
409
+ </HTML>
410
+
411
+ http_version:
412
+ recorded_at: Thu, 27 Jun 2013 07:35:36 GMT
413
+ - request:
414
+ method: get
415
+ uri: https://developer.apple.com/account/selectTeam.action
416
+ body:
417
+ string: ""
418
+ headers:
419
+ Accept:
420
+ - "*/*"
421
+ Accept-Language:
422
+ - en-us,en;q=0.5
423
+ User-Agent:
424
+ - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.22 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22
425
+ If-Modified-Since:
426
+ - Thu, 27 Jun 2013 07:35:22 GMT
427
+ Cookie:
428
+ - NSC_MCWT_efwfmpqfs_443_BqbdifKbwb=ffffffff12f61da945525d5f4f58455e445a4a4232aa; ds01_a=056e619bd5b2b91867ba64ff14360013fb6cfdfbf22ba93d292a81c1ac3fcc492e2cfdbf14081b75fca5d3b933f25c84c2c72c775613bae8f6ea0cf10f2fcca1c6026560e1701760d7c4a9200b9d41dfc1ceadab02fb3635412c59648311b586GZVX; myacinfo=DAWTKNV2b35735344c00759cd70102a9f415865b4413adc3d254a65dafc4359bb95ae591e940a6963e1ae23545999f9330411956eafa6f3f949ebd2a709baccf283376f2f1d514b67b8324c98641225c57bd69f7f673308cc5b19020c95ea42a4722bc0d9dc3c6fd53ed5d2542fe3c5803ba24ed6967343f50ff38148c0a12bbbaf19056e0d0a74e143536ddbeaafd3b19bdd36ca801f0c41e40050b6663bb28846e2bf2d6b41636d23cc6ab264925de3f8a4e798c29645b9b799e2fd7cb262f922b599da048d2d4162913d6361a996a650bc1ba3b90ff635bd57238c7bfcd14db5c8e7eacf37794298c9a224dc92734d0dbbdfed5690233abe3761bfc7c24e103bc2d534e5d90ce21d2fbd4785497765d7dd1ce2f8b55d32289689ebb9ade0ce10a135bMVRYV2
429
+ Accept-Charset:
430
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
431
+ Host:
432
+ - developer.apple.com
433
+ Accept-Encoding:
434
+ - gzip,deflate,identity
435
+ Keep-Alive:
436
+ - 300
437
+ Connection:
438
+ - keep-alive
439
+ response:
440
+ status:
441
+ code: 200
442
+ message: OK
443
+ headers:
444
+ Transfer-Encoding:
445
+ - chunked
446
+ Set-Cookie:
447
+ - JSESSIONID=FED2AF4286021A3A61DE953F12BCC84A.worker1; Path=/
448
+ Cache-Control:
449
+ - no-cache
450
+ Server:
451
+ - Apache
452
+ Content-Type:
453
+ - text/html;charset=ISO-8859-1
454
+ Ms-Author-Via:
455
+ - DAV
456
+ Expires:
457
+ - Mon, 26 Jul 1997 05:00:00 GMT
458
+ Pragma:
459
+ - no-cache
460
+ X-Frame-Options:
461
+ - SAMEORIGIN
462
+ - SAMEORIGIN
463
+ Keep-Alive:
464
+ - timeout=15, max=421
465
+ Date:
466
+ - Thu, 27 Jun 2013 07:35:25 GMT
467
+ Connection:
468
+ - Keep-Alive
469
+ body:
470
+ string: |-
471
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
472
+
473
+
474
+ <html>
475
+ <head>
476
+ <title>Select Team - Apple Developer</title>
477
+
478
+
479
+
480
+
481
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
482
+ <meta http-equiv="pics-label" content='(pics-1.1 "http://www.icra.org/ratingsv02.html" l gen true for "http://www.apple.com" r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://www.apple.com" r (n 0 s 0 v 0 l 0))'>
483
+ <meta name="Author" content="Apple Inc.">
484
+ <meta name="viewport" content="width=1024">
485
+ <link rel="shortcut icon" href="https://devimages.apple.com.edgekey.net/favicon.ico" />
486
+ <link rel="icon" href="https://devimages.apple.com.edgekey.net/favicon.ico" />
487
+
488
+ <link rel="stylesheet" type="text/css" media="screen" href="https://devimages.apple.com.edgekey.net/assets/core/styles/base.css" charset="utf-8" />
489
+ <link rel="stylesheet" type="text/css" media="screen" href="https://devimages.apple.com.edgekey.net/assets/core/styles/adc.css" charset="utf-8" />
490
+
491
+ <link rel="stylesheet" type="text/css" media="screen" href="https://devimages.apple.com.edgekey.net/assets/styles/jqueryui/smoothness-custom-1.8.17/jquery-ui-1.8.17.css" charset="utf-8" />
492
+ <link rel="stylesheet" type="text/css" media="screen" href="https://devimages.apple.com.edgekey.net/assets/scripts/lib/jqgrid/css/ui.jqgrid.css" charset="utf-8" />
493
+ <link rel="stylesheet" type="text/css" media="screen" href="https://devimages.apple.com.edgekey.net/assets/styles/grid.css" charset="utf-8" />
494
+
495
+ <link rel="stylesheet" type="text/css" media="screen" href="https://devimages.apple.com.edgekey.net/assets/styles/portal.css" charset="utf-8" />
496
+ <link rel="stylesheet" type="text/css" media="screen" href="https://developer.apple.com/account/styles/developer_portal.css" charset="utf-8" />
497
+
498
+ <script type="text/javascript" src="https://developer.apple.com/assets/scripts/lib/jquery/jquery-1.7.1.min.js" charset="utf-8" ></script>
499
+ <script type="text/javascript" src="https://developer.apple.com/assets/scripts/lib/jquery/jquery-ui-custom-1.8.17.min.js" charset="utf-8" ></script>
500
+ <script type="text/javascript" src="https://developer.apple.com/assets/scripts/lib/jqgrid/js/i18n/grid.locale-en.js" charset="utf-8" ></script>
501
+ <script type="text/javascript" src="https://developer.apple.com/assets/scripts/lib/jqgrid/js/jquery.jqGrid.src.js" charset="utf-8" ></script>
502
+ <script type="text/javascript" src="https://developer.apple.com/assets/scripts/search_decorator_jquery.js" charset="utf-8" ></script>
503
+ <script type="text/javascript" src="https://developer.apple.com/assets/scripts/ac_retina.js" charset="utf-8" ></script>
504
+
505
+ <script type="text/javascript" src="https://developer.apple.com/account/scripts/account-min.js" charset="utf-8" ></script>
506
+
507
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
508
+
509
+
510
+ </head>
511
+ <body id="select-team" class="developer-portal class="selectProgram"" >
512
+
513
+
514
+
515
+
516
+
517
+
518
+ <div id="globalheader" data-hires="true">
519
+ <h1><a href="https://developer.apple.com">Apple Developer</a></h1>
520
+ <ul id="gh-nav">
521
+ <li id="gh-nav-technologies"><a href="https://developer.apple.com/technologies/">Technologies</a></li>
522
+ <li id="gh-nav-resources"><a href="https://developer.apple.com/resources/">Resources</a></li>
523
+ <li id="gh-nav-programs"><a href="https://developer.apple.com/programs/">Programs</a></li>
524
+ <li id="gh-nav-support"><a href="https://developer.apple.com/support/">Support</a></li>
525
+ <li id="gh-nav-membercenter"><a href="https://developer.apple.com/membercenter/">Member Center</a></li>
526
+ </ul>
527
+
528
+ <div id="gh-search">
529
+ <form action="https://developer.apple.com/search/index.php" method="get" accept-charset="utf-8">
530
+ <div>
531
+ <label for="gh-adcsearch">
532
+ <span class="prettyplaceholder">Search Developer</span>
533
+ <input type="search" name="q" id="gh-adcsearch" class="adcsearch prettysearch" results="0" placeholder="Search Developer" autosave="">
534
+ </label>
535
+ </div>
536
+ </form>
537
+ </div>
538
+ </div>
539
+
540
+ <div class="loadingMessage" data-hires="true" style=" width:32px; height:32px; display: none;">
541
+ <img src="https://devimages.apple.com.edgekey.net/assets/developerportal/images/spinner.gif" /><div>Loading...</div>
542
+ </div>
543
+
544
+ <div class="errorGenericMessage" style="display: none;">
545
+ Please refresh and try again.
546
+ </div>
547
+
548
+ <div id="main">
549
+ <div id="content" class="content" data-hires="true">
550
+ <div class="topbar">
551
+ <h1>Certificates, Identifiers & Profiles</h1>
552
+ <div class="topbar-select-container">
553
+ <a class="topbar-select portal-select" id="topbar-select">
554
+ <span class="section-title">
555
+
556
+ David&nbsp;Lawson
557
+
558
+
559
+ </span>
560
+ </a>
561
+
562
+ <div class="tooltip top-pointer" id="topbar-dropdown-tooltip" style="display:none">
563
+ <div class="top edge"></div>
564
+ <div class="tooltip-content">
565
+ <div class="content-wrapper">
566
+ <ul class="topbar-dropdown-options">
567
+
568
+ <li class="profile"><a href="https://developer.apple.com/membercenter/index.action#accountSummary" class="first-option">View Account</a></li>
569
+
570
+ <li class="sign-out"><a href="/account/logout.action;jsessionid=FED2AF4286021A3A61DE953F12BCC84A.worker1" class="last-option">Sign Out</a></li>
571
+
572
+
573
+ </ul>
574
+ </div>
575
+ </div>
576
+ </div>
577
+ </div>
578
+ </div>
579
+
580
+
581
+
582
+
583
+
584
+
585
+
586
+
587
+
588
+
589
+
590
+
591
+ <div class="sidebar" style="display:none;" data-hideSideNav="true">
592
+ <div class="top-shadow"></div>
593
+
594
+ <a class="sidebar-select portal-select" id="sidebar-select"><div class="section-icon mac"></div><div class="section-title"></div><div class="dropdown-arrow"></div></a>
595
+ <div class="select-dropdown rounded" style="display: none;">
596
+ <ul class="dropdown-options">
597
+ <li class="overview-option"><a href="/account/overview.action;jsessionid=FED2AF4286021A3A61DE953F12BCC84A.worker1" class="first-option"><span>Overview</span><div class="checkmark"></div></a></li>
598
+
599
+
600
+
601
+ </ul>
602
+ </div>
603
+
604
+ <div class="horizontal-divider"></div>
605
+
606
+
607
+
608
+
609
+
610
+
611
+ </div>
612
+
613
+ <div class="innercontent">
614
+
615
+ <div class="teams">
616
+ <h2>Select Team</h2>
617
+
618
+ <div class="team-selection">
619
+ <form id="saveTeamSelection" name="saveTeamSelection" action="/account/saveTeamSelection.action;jsessionid=FED2AF4286021A3A61DE953F12BCC84A.worker1" method="post">
620
+ <div class="input">
621
+ <p class="lead">You're a member of multiple development teams. Select a team to continue.</p>
622
+
623
+ <p class="team-value">
624
+ <input type="radio" class="radio" name="memberDisplayId" id="teams1" value="XYZ1">
625
+ <label for="teams1" class="label-primary">
626
+ Team 1
627
+ </label>
628
+ <label for="teams1" class="label-secondary"></label>
629
+
630
+ </p>
631
+
632
+ <p class="team-value">
633
+ <input type="radio" class="radio" name="memberDisplayId" id="teams2" value="XYZ2">
634
+ <label for="teams2" class="label-primary">
635
+ Team 2
636
+ </label>
637
+ <label for="teams2" class="label-secondary">iOS Developer Program</label>
638
+
639
+ </p>
640
+
641
+ </div>
642
+ <div class="sidebarDivider">
643
+ <div class="buttoncontainer">
644
+ <a href="/account/overview.action;jsessionid=FED2AF4286021A3A61DE953F12BCC84A.worker1" class="button large"><span>Cancel</span></a>
645
+ <input type="submit" id="saveTeamSelection_saveTeamSelection_save" name="action:saveTeamSelection!save" value="Continue" class="button large blue submit"/>
646
+
647
+ </div>
648
+ </div>
649
+ </form>
650
+
651
+
652
+
653
+
654
+ </div>
655
+
656
+
657
+ </div>
658
+
659
+ </div>
660
+
661
+
662
+
663
+
664
+
665
+
666
+ </div><!-- /content -->
667
+ </div><!-- /main -->
668
+
669
+ <div id="globalfooter">
670
+ <div class="gf-sosumi">
671
+ <p>Copyright &copy; 2013 Apple Inc. All rights reserved.</p>
672
+ <ul class="piped">
673
+ <li><a href="http://www.apple.com/legal/terms/site.html" class="first">Terms of Use</a></li>
674
+ <li><a href="http://www.apple.com/privacy/">Privacy Policy</a></li>
675
+ </ul>
676
+ </div>
677
+ </div>
678
+ </body>
679
+ </html>
680
+ http_version:
681
+ recorded_at: Thu, 27 Jun 2013 07:35:37 GMT
682
+ recorded_with: VCR 2.5.0
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
- - 6
9
- version: 1.0.6
8
+ - 7
9
+ version: 1.0.7
10
10
  platform: ruby
11
11
  authors:
12
12
  - David Lawson
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2013-06-27 00:00:00 +10:00
17
+ date: 2013-07-02 00:00:00 +10:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -43,7 +43,7 @@ dependencies:
43
43
  type: :development
44
44
  version_requirements: *id002
45
45
  - !ruby/object:Gem::Dependency
46
- name: cupertino
46
+ name: vcr
47
47
  prerelease: false
48
48
  requirement: &id003 !ruby/object:Gem::Requirement
49
49
  requirements:
@@ -52,10 +52,10 @@ dependencies:
52
52
  segments:
53
53
  - 0
54
54
  version: "0"
55
- type: :runtime
55
+ type: :development
56
56
  version_requirements: *id003
57
57
  - !ruby/object:Gem::Dependency
58
- name: spinning_cursor
58
+ name: webmock
59
59
  prerelease: false
60
60
  requirement: &id004 !ruby/object:Gem::Requirement
61
61
  requirements:
@@ -64,12 +64,26 @@ dependencies:
64
64
  segments:
65
65
  - 0
66
66
  version: "0"
67
- type: :runtime
67
+ type: :development
68
68
  version_requirements: *id004
69
69
  - !ruby/object:Gem::Dependency
70
- name: rainbow
70
+ name: nokogiri
71
71
  prerelease: false
72
72
  requirement: &id005 !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "="
75
+ - !ruby/object:Gem::Version
76
+ segments:
77
+ - 1
78
+ - 5
79
+ - 9
80
+ version: 1.5.9
81
+ type: :runtime
82
+ version_requirements: *id005
83
+ - !ruby/object:Gem::Dependency
84
+ name: cupertino
85
+ prerelease: false
86
+ requirement: &id006 !ruby/object:Gem::Requirement
73
87
  requirements:
74
88
  - - ">="
75
89
  - !ruby/object:Gem::Version
@@ -77,11 +91,47 @@ dependencies:
77
91
  - 0
78
92
  version: "0"
79
93
  type: :runtime
80
- version_requirements: *id005
94
+ version_requirements: *id006
95
+ - !ruby/object:Gem::Dependency
96
+ name: keychain_services
97
+ prerelease: false
98
+ requirement: &id007 !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ segments:
103
+ - 0
104
+ version: "0"
105
+ type: :runtime
106
+ version_requirements: *id007
107
+ - !ruby/object:Gem::Dependency
108
+ name: spinning_cursor
109
+ prerelease: false
110
+ requirement: &id008 !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ segments:
115
+ - 0
116
+ version: "0"
117
+ type: :runtime
118
+ version_requirements: *id008
119
+ - !ruby/object:Gem::Dependency
120
+ name: rainbow
121
+ prerelease: false
122
+ requirement: &id009 !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ segments:
127
+ - 0
128
+ version: "0"
129
+ type: :runtime
130
+ version_requirements: *id009
81
131
  - !ruby/object:Gem::Dependency
82
132
  name: commander
83
133
  prerelease: false
84
- requirement: &id006 !ruby/object:Gem::Requirement
134
+ requirement: &id010 !ruby/object:Gem::Requirement
85
135
  requirements:
86
136
  - - ~>
87
137
  - !ruby/object:Gem::Version
@@ -91,7 +141,7 @@ dependencies:
91
141
  - 2
92
142
  version: 4.1.2
93
143
  type: :runtime
94
- version_requirements: *id006
144
+ version_requirements: *id010
95
145
  description: Conveniently add a UDID to the iOS Developer Portal, refresh a provisioning profile and download it. Uploading a new provisioning profile to TestFlight is also supported.
96
146
  email:
97
147
  - tech.lawson@gmail.com
@@ -103,6 +153,7 @@ extra_rdoc_files: []
103
153
 
104
154
  files:
105
155
  - .gitignore
156
+ - .travis.yml
106
157
  - Gemfile
107
158
  - LICENSE.txt
108
159
  - README.md
@@ -114,6 +165,9 @@ files:
114
165
  - lib/omudid/portal_agent.rb
115
166
  - lib/omudid/testflight_agent.rb
116
167
  - omudid.gemspec
168
+ - test/.DS_Store
169
+ - test/test_omudid.rb
170
+ - test/vcr/teams.yml
117
171
  has_rdoc: true
118
172
  homepage: https://github.com/Papercloud/OneMoreUDID
119
173
  licenses:
@@ -144,5 +198,7 @@ rubygems_version: 1.3.6
144
198
  signing_key:
145
199
  specification_version: 3
146
200
  summary: Add one UDID to iOS Dev Portal & TestFlight
147
- test_files: []
148
-
201
+ test_files:
202
+ - test/.DS_Store
203
+ - test/test_omudid.rb
204
+ - test/vcr/teams.yml