omudid 1.0.3 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,8 +1,8 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'cupertino'#, :git => 'git://github.com/davidlawson/cupertino.git', :branch => 'omudid'
3
+ gem 'cupertino'
4
4
  gem 'spinning_cursor'
5
5
  gem 'rainbow'
6
6
 
7
- # Specify your gem's dependencies in OneMoreUDID.gemspec
7
+ # Specify your gem's dependencies in omudid.gemspec
8
8
  gemspec
data/README.md CHANGED
@@ -8,7 +8,7 @@ Uploading a new provisioning profile to TestFlight is also supported.
8
8
  Installation
9
9
  -
10
10
  ```
11
- $ gem install OneMoreUDID
11
+ $ gem install omudid
12
12
  ```
13
13
 
14
14
  Usage
@@ -16,4 +16,95 @@ Usage
16
16
  ```
17
17
  $ omudid add
18
18
  $ omudid testflight upload
19
- ```
19
+ ```
20
+
21
+ Example Output
22
+ -
23
+ ```
24
+ $ omudid add
25
+ Apple Username:
26
+ appleuser@example.com
27
+ Apple Password:
28
+ ************
29
+ Profile name (leave blank to select from available profiles):
30
+
31
+ Device name:
32
+ DeviceTen
33
+ UDID:
34
+ B123456789012345678901234567890123456789
35
+
36
+ Loading page... done
37
+ Loading page... done
38
+
39
+ Note: you can specify the team with a command-line argument
40
+
41
+ Please select one of the following teams:
42
+ 1. Y2ZAFJ6Z9R: Team 1 - iOS Developer Program
43
+ 2. LDF73KN5AM: Team 2 - iOS Developer Program
44
+ ? 1
45
+
46
+ Loading page... done
47
+ Device DeviceTen (B123456789012345678901234567890123456789) added
48
+
49
+ Loading page... done
50
+ Loading page... done
51
+
52
+ Select a profile:
53
+ 1. profile2
54
+ 2. demo1
55
+ 3. demo3
56
+ ? 2
57
+
58
+ Note: you can repeat this process by running:
59
+ omudid add appleuser@example.com [password] demo1 DeviceTen B123456789012345678901234567890123456789 Y2ZAFJ6Z9R
60
+
61
+ Loading page... done
62
+ Loading page... done
63
+ Loading page... done
64
+ Loading page... done
65
+ Loading page... done
66
+ Loading page... done
67
+ Loading page... done
68
+ Loading page... done
69
+ Loading page... done
70
+ Loading page... done
71
+ Downloaded new profile (./demo1.mobileprovision)
72
+ Old profile deleted (~/Library/MobileDevice/Provisioning Profiles/demo1.mobileprovision)
73
+ New profile installed (~/Library/MobileDevice/Provisioning Profiles/demo1.mobileprovision)
74
+
75
+ $ omudid testflight upload
76
+ TestFlight Username:
77
+ testflightuser@example.com
78
+ TestFlight Password:
79
+ ********
80
+ Build ID (leave blank to select from available IDs):
81
+
82
+ Profile name (leave blank to select from available local profiles):
83
+
84
+ Enter an App ID to list builds (or leave blank to list App IDs):
85
+
86
+
87
+ Loading page... done
88
+ Loading page... done
89
+ Select an app ID:
90
+ 1. 151463 (com.example.identifier)
91
+ ? 1
92
+
93
+
94
+ Loading page... done
95
+ Select a build ID:
96
+ 1. 1857636 (1.0 (1.0))
97
+ ? 1
98
+
99
+ Select a profile:
100
+ 1. profile2
101
+ 2. demo1
102
+ 3. demo3
103
+ ? 2
104
+
105
+ Note: you can repeat this process by running:
106
+ omudid testflight list-builds testflightuser@example.com [password] 1857636 demo1
107
+
108
+ Loading page... done
109
+ Submitted ~/Library/MobileDevice/Provisioning Profiles/demo1.mobileprovision
110
+ ```
data/bin/omudid CHANGED
@@ -3,7 +3,7 @@
3
3
  require 'rubygems'
4
4
  require 'commander/import'
5
5
 
6
- require 'OneMoreUDID'
6
+ require 'omudid'
7
7
 
8
8
  require 'terminal-table'
9
9
  require 'term/ansicolor'
@@ -0,0 +1,65 @@
1
+ module OneMoreUDID
2
+ class LocalAgent
3
+ def install_profile(profile_name, filename)
4
+
5
+ Dir.glob(File.expand_path('~') + '/Library/MobileDevice/Provisioning Profiles/*.mobileprovision') do |file|
6
+
7
+ delete_file = false
8
+
9
+ File.open(file, "r") do |_file|
10
+
11
+ file_contents = _file.read
12
+ if String.method_defined?(:encode)
13
+ #file_contents.encode!('UTF-8', 'UTF-8', :invalid => :replace)
14
+
15
+ file_contents.encode!('UTF-16', 'UTF-8', :invalid => :replace, :replace => '')
16
+ file_contents.encode!('UTF-8', 'UTF-16')
17
+ end
18
+ matches = /<key>Name<\/key>\s+<string>([^<]+)<\/string>/.match file_contents
19
+
20
+ if matches[1] == profile_name
21
+ delete_file = true
22
+ end
23
+ end
24
+
25
+ if delete_file
26
+ say_warning 'Old profile deleted ('+ file +')'
27
+ File.delete(file)
28
+ break
29
+ end
30
+
31
+ end
32
+
33
+ new_path = File.expand_path('~') + '/Library/MobileDevice/Provisioning Profiles/' + filename
34
+ File.rename(Dir.pwd + '/' + filename, new_path)
35
+
36
+ say_ok 'New profile installed ('+new_path+')'
37
+ end
38
+
39
+ def get_profiles
40
+
41
+ profiles = []
42
+
43
+ Dir.glob(File.expand_path('~') + '/Library/MobileDevice/Provisioning Profiles/*.mobileprovision') do |file|
44
+
45
+ File.open(file, "r") do |_file|
46
+
47
+ file_contents = _file.read
48
+ if String.method_defined?(:encode)
49
+ #file_contents.encode!('UTF-8', 'UTF-8', :invalid => :replace)
50
+
51
+ file_contents.encode!('UTF-16', 'UTF-8', :invalid => :replace, :replace => '')
52
+ file_contents.encode!('UTF-8', 'UTF-16')
53
+ end
54
+
55
+ matches = /<key>Name<\/key>\s+<string>([^<]+)<\/string>/.match file_contents
56
+ profiles << matches[1]
57
+ end
58
+
59
+ end
60
+
61
+ profiles
62
+
63
+ end
64
+ end
65
+ end
@@ -1,11 +1,4 @@
1
- require 'mechanize'
2
- require 'spinning_cursor'
3
- require 'rainbow'
4
- require 'iconv' unless String.method_defined?(:encode)
5
-
6
1
  module OneMoreUDID
7
- VERSION = "1.0.3"
8
-
9
2
  class PortalAgent
10
3
 
11
4
  attr_accessor :agent
@@ -197,149 +190,4 @@ module OneMoreUDID
197
190
  filename
198
191
  end
199
192
  end
200
-
201
- class LocalAgent
202
- def install_profile(profile_name, filename)
203
-
204
- Dir.glob(File.expand_path('~') + '/Library/MobileDevice/Provisioning Profiles/*.mobileprovision') do |file|
205
-
206
- delete_file = false
207
-
208
- File.open(file, "r") do |_file|
209
-
210
- file_contents = _file.read
211
- if String.method_defined?(:encode)
212
- file_contents.encode!('UTF-8', 'UTF-8', :invalid => :replace)
213
- end
214
- matches = /<key>Name<\/key>\s+<string>([^<]+)<\/string>/.match file_contents
215
-
216
- if matches[1] == profile_name
217
- delete_file = true
218
- end
219
- end
220
-
221
- if delete_file
222
- say_warning 'Old profile deleted ('+ file +')'
223
- File.delete(file)
224
- break
225
- end
226
-
227
- end
228
-
229
- new_path = File.expand_path('~') + '/Library/MobileDevice/Provisioning Profiles/' + filename
230
- File.rename(Dir.pwd + '/' + filename, new_path)
231
-
232
- say_ok 'New profile installed ('+new_path+')'
233
- end
234
-
235
- def get_profiles
236
-
237
- profiles = []
238
-
239
- Dir.glob(File.expand_path('~') + '/Library/MobileDevice/Provisioning Profiles/*.mobileprovision') do |file|
240
-
241
- File.open(file, "r") do |_file|
242
-
243
- file_contents = _file.read
244
- if String.method_defined?(:encode)
245
- file_contents.encode!('UTF-8', 'UTF-8', :invalid => :replace)
246
- end
247
-
248
- matches = /<key>Name<\/key>\s+<string>([^<]+)<\/string>/.match file_contents
249
- profiles << matches[1]
250
- end
251
-
252
- end
253
-
254
- profiles
255
-
256
- end
257
- end
258
-
259
- class TestFlightAgent < ::Mechanize
260
-
261
- attr_accessor :username, :password
262
-
263
- def initialize(username, password)
264
- super()
265
- @username = username
266
- @password = password
267
- self
268
- end
269
-
270
- def get(uri, parameters = [], referer = nil, headers = {})
271
- 3.times do
272
- SpinningCursor.start do
273
- banner 'Loading page...'
274
- action do
275
- super(uri, parameters, referer, headers)
276
- end
277
- message 'Loading page... '+'done'.color(:green)
278
- end
279
-
280
- return page unless page.respond_to?(:body)
281
-
282
- case page.body
283
- when /Login to TestFlight and FlightPath/
284
- login! and next
285
- else
286
- return page
287
- end
288
- end
289
-
290
- raise UnsuccessfulAuthenticationError
291
- end
292
-
293
- def get_apps
294
- get('https://testflightapp.com/dashboard/applications/')
295
-
296
- apps = page.search('tr.goapp')
297
- regex = /([0-9]+)/
298
- apps.collect { |app| [(app['id'].match regex)[1], app.search('h2 small').text.strip] }
299
- end
300
-
301
- def get_builds(app_id)
302
- get("https://testflightapp.com/dashboard/applications/#{app_id}/builds/")
303
-
304
- builds = page.search('tr.goversion')
305
- regex = /([0-9]+)/
306
- builds.collect { |build| [(build['id'].match regex)[1], build.search('td:first')[0].text] }
307
- end
308
-
309
- def upload(build_id, profile_name)
310
- get("https://testflightapp.com/dashboard/builds/update/#{build_id}/")
311
-
312
- profile_file = get_profile_file(profile_name)
313
-
314
- form = page.form_with(:id => 'provision-form')
315
- upload = form.file_uploads.first
316
- upload.file_name = profile_file.path
317
- form.submit
318
-
319
- say_ok 'Submitted '+profile_file.path
320
- end
321
-
322
- def get_profile_file(profile_name)
323
- Dir.glob(::File.expand_path('~') + '/Library/MobileDevice/Provisioning Profiles/*.mobileprovision') do |file|
324
-
325
- ::File.open(file, "r") do |_file|
326
- matches = /<key>Name<\/key>\s+<string>([^<]+)<\/string>/.match _file.read
327
- if matches[1] == profile_name
328
- return _file
329
- end
330
- end
331
-
332
- end
333
- end
334
-
335
- private
336
-
337
- def login!
338
- form = page.forms[0]
339
- form.username = self.username
340
- form.password = self.password
341
- form.submit
342
- end
343
- end
344
-
345
- end
193
+ end
@@ -0,0 +1,94 @@
1
+ module OneMoreUDID
2
+ class TestFlightAgent < ::Mechanize
3
+
4
+ attr_accessor :username, :password
5
+
6
+ def initialize(username, password)
7
+ super()
8
+ @username = username
9
+ @password = password
10
+ self
11
+ end
12
+
13
+ def get(uri, parameters = [], referer = nil, headers = {})
14
+ 3.times do
15
+ SpinningCursor.start do
16
+ banner 'Loading page...'
17
+ action do
18
+ super(uri, parameters, referer, headers)
19
+ end
20
+ message 'Loading page... '+'done'.color(:green)
21
+ end
22
+
23
+ return page unless page.respond_to?(:body)
24
+
25
+ case page.body
26
+ when /Login to TestFlight and FlightPath/
27
+ login! and next
28
+ else
29
+ return page
30
+ end
31
+ end
32
+
33
+ raise UnsuccessfulAuthenticationError
34
+ end
35
+
36
+ def get_apps
37
+ get('https://testflightapp.com/dashboard/applications/')
38
+
39
+ apps = page.search('tr.goapp')
40
+ regex = /([0-9]+)/
41
+ apps.collect { |app| [(app['id'].match regex)[1], app.search('h2 small').text.strip] }
42
+ end
43
+
44
+ def get_builds(app_id)
45
+ get("https://testflightapp.com/dashboard/applications/#{app_id}/builds/")
46
+
47
+ builds = page.search('tr.goversion')
48
+ regex = /([0-9]+)/
49
+ builds.collect { |build| [(build['id'].match regex)[1], build.search('td:first')[0].text] }
50
+ end
51
+
52
+ def upload(build_id, profile_name)
53
+ get("https://testflightapp.com/dashboard/builds/update/#{build_id}/")
54
+
55
+ profile_file = get_profile_file(profile_name)
56
+
57
+ form = page.form_with(:id => 'provision-form')
58
+ upload = form.file_uploads.first
59
+ upload.file_name = profile_file.path
60
+ form.submit
61
+
62
+ say_ok 'Submitted '+profile_file.path+"\n"+'Share link: '+page.link_with(:dom_class => 'bitly').text
63
+ end
64
+
65
+ def get_profile_file(profile_name)
66
+ Dir.glob(::File.expand_path('~') + '/Library/MobileDevice/Provisioning Profiles/*.mobileprovision') do |file|
67
+
68
+ ::File.open(file, "r") do |_file|
69
+ file_contents = _file.read
70
+ if String.method_defined?(:encode)
71
+ #file_contents.encode!('UTF-8', 'UTF-8', :invalid => :replace)
72
+
73
+ file_contents.encode!('UTF-16', 'UTF-8', :invalid => :replace, :replace => '')
74
+ file_contents.encode!('UTF-8', 'UTF-16')
75
+ end
76
+ matches = /<key>Name<\/key>\s+<string>([^<]+)<\/string>/.match file_contents
77
+ if matches[1] == profile_name
78
+ return _file
79
+ end
80
+ end
81
+
82
+ end
83
+ end
84
+
85
+ private
86
+
87
+ def login!
88
+ form = page.forms[0]
89
+ form.username = self.username
90
+ form.password = self.password
91
+ form.submit
92
+ end
93
+ end
94
+ end
data/lib/omudid.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'mechanize'
2
+ require 'spinning_cursor'
3
+ require 'rainbow'
4
+
5
+ module OneMoreUDID
6
+ VERSION = "1.0.6"
7
+ end
8
+
9
+ require 'omudid/local_agent'
10
+ require 'omudid/portal_agent'
11
+ require 'omudid/testflight_agent'
@@ -2,7 +2,7 @@
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
- require 'OneMoreUDID'
5
+ require 'omudid'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = "omudid"
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
- - 3
9
- version: 1.0.3
8
+ - 6
9
+ version: 1.0.6
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-05-10 00:00:00 +10:00
17
+ date: 2013-06-27 00:00:00 +10:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -105,12 +105,15 @@ files:
105
105
  - .gitignore
106
106
  - Gemfile
107
107
  - LICENSE.txt
108
- - OneMoreUDID.gemspec
109
108
  - README.md
110
109
  - Rakefile
111
110
  - bin/omudid
112
- - lib/OneMoreUDID.rb
113
111
  - lib/cupertino_compatibility.rb
112
+ - lib/omudid.rb
113
+ - lib/omudid/local_agent.rb
114
+ - lib/omudid/portal_agent.rb
115
+ - lib/omudid/testflight_agent.rb
116
+ - omudid.gemspec
114
117
  has_rdoc: true
115
118
  homepage: https://github.com/Papercloud/OneMoreUDID
116
119
  licenses: