ios_android_toolbox 0.0.13 → 0.0.14
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.
data/bin/install_prov_profile.rb
CHANGED
|
@@ -3,83 +3,17 @@
|
|
|
3
3
|
require 'rubygems'
|
|
4
4
|
require 'parsedate'
|
|
5
5
|
require 'time'
|
|
6
|
+
require 'ios_android_toolbox/ios_prov_profile'
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
PROV_PROFILE_DIR=ENV['HOME']+'/Library/MobileDevice/Provisioning Profiles'
|
|
9
|
-
UUID_REGEX='[0-9A-Za-z]{8}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{12}'
|
|
8
|
+
include IosAndroidToolbox
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
class InstallProvProfile
|
|
11
|
+
def run(args)
|
|
12
|
+
profile_path = args.shift
|
|
13
|
+
profile_path or raise "Please specify a provisioning profile name"
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def uuid_for_profile(contents)
|
|
17
|
-
# <key>UUID</key>
|
|
18
|
-
# <string>06AF2826-608D-4CE9-99AE-AA917FF1641E</string>
|
|
19
|
-
if /<key>UUID<\/key>\s*<string>(#{UUID_REGEX})<\/string>/.match(contents)
|
|
20
|
-
puts "Found UUID: #{$1}" if DEBUG
|
|
21
|
-
uuid = $1
|
|
22
|
-
else
|
|
23
|
-
nil
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def app_id_from_profile(contents)
|
|
28
|
-
# <key>application-identifier</key>
|
|
29
|
-
# <string>NDVAA33T9J.com.favequest.FFSApp.87.ircpa</string>
|
|
30
|
-
if /<key>application-identifier<\/key>\s*<string>[A-Za-z0-9]+\.([^<]+)<\/string>/.match(contents)
|
|
31
|
-
puts "Found app Id: #{$1}" if DEBUG
|
|
32
|
-
app_id = $1
|
|
33
|
-
else
|
|
34
|
-
nil
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def creation_date_from_profile(contents)
|
|
39
|
-
# <key>CreationDate</key>
|
|
40
|
-
# <date>2011-08-30T02:11:55Z</date>
|
|
41
|
-
if /<key>CreationDate<\/key>\s*<date>([^<]+)<\/date>/.match(contents)
|
|
42
|
-
#creation_date = Date.strptime($1, '%Y-%m-%dT%h:%M:%sZ')
|
|
43
|
-
creation_date = Time.parse($1)
|
|
44
|
-
puts "Found Creation date: #{creation_date.to_s}" if DEBUG
|
|
45
|
-
creation_date
|
|
46
|
-
else
|
|
47
|
-
nil
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def has_provisioned_devices(contents)
|
|
52
|
-
# <key>ProvisionedDevices</key>
|
|
53
|
-
/<key>ProvisionedDevices<\/key>/.match(contents)
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
new_uuid = uuid_for_profile(prov_profile)
|
|
57
|
-
new_app_id = app_id_from_profile(prov_profile)
|
|
58
|
-
new_cdate = creation_date_from_profile(prov_profile)
|
|
59
|
-
new_is_dev = has_provisioned_devices(prov_profile)
|
|
60
|
-
|
|
61
|
-
`mkdir -p "(#{PROV_PROFILE_DIR}"; chmod 755 "#{PROV_PROFILE_DIR}"` if !File.directory?(PROV_PROFILE_DIR)
|
|
62
|
-
|
|
63
|
-
# Look through each file in the list
|
|
64
|
-
Dir.foreach(PROV_PROFILE_DIR) do |item|
|
|
65
|
-
next if item == '.' or item == '..'
|
|
66
|
-
|
|
67
|
-
next if !/#{UUID_REGEX}\.mobileprovision/.match(item)
|
|
68
|
-
puts "Prov. profile: #{item}" if DEBUG
|
|
69
|
-
|
|
70
|
-
old_prov_profile = File.open(PROV_PROFILE_DIR+"/"+item).read
|
|
71
|
-
|
|
72
|
-
old_uuid = uuid_for_profile(old_prov_profile)
|
|
73
|
-
old_app_id = app_id_from_profile(old_prov_profile)
|
|
74
|
-
old_cdate = creation_date_from_profile(old_prov_profile)
|
|
75
|
-
old_is_dev = has_provisioned_devices(old_prov_profile)
|
|
76
|
-
|
|
77
|
-
if old_app_id == new_app_id and old_cdate < new_cdate and old_is_dev == new_is_dev
|
|
78
|
-
puts "Removing stale Prov Profile: #{item}"
|
|
79
|
-
File.unlink PROV_PROFILE_DIR+'/'+item
|
|
80
|
-
end
|
|
15
|
+
IosProvisioningProfile.install(profile_path)
|
|
16
|
+
end
|
|
81
17
|
end
|
|
82
18
|
|
|
83
|
-
|
|
84
|
-
puts "Installing new prov profile into #{new_profile_path}"
|
|
85
|
-
`cp -f "#{profile_file}" "#{new_profile_path}"`
|
|
19
|
+
InstallProvProfile.new.run(ARGV)
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
|
|
3
|
+
module IosAndroidToolbox
|
|
4
|
+
class IosProvisioningProfile
|
|
5
|
+
PROV_PROFILE_DIR=ENV['HOME']+'/Library/MobileDevice/Provisioning Profiles'
|
|
6
|
+
UUID_REGEX='[0-9A-Za-z]{8}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{12}'
|
|
7
|
+
|
|
8
|
+
DEBUG=false
|
|
9
|
+
|
|
10
|
+
attr_reader :contents
|
|
11
|
+
|
|
12
|
+
def uuid
|
|
13
|
+
# <key>UUID</key>
|
|
14
|
+
# <string>06AF2826-608D-4CE9-99AE-AA917FF1641E</string>
|
|
15
|
+
if /<key>UUID<\/key>\s*<string>(#{UUID_REGEX})<\/string>/.match(contents)
|
|
16
|
+
puts "Found UUID: #{$1}" if DEBUG
|
|
17
|
+
uuid = $1
|
|
18
|
+
else
|
|
19
|
+
nil
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def app_id
|
|
24
|
+
# <key>application-identifier</key>
|
|
25
|
+
# <string>NDVAA33T9J.com.favequest.FFSApp.87.ircpa</string>
|
|
26
|
+
if /<key>application-identifier<\/key>\s*<string>[A-Za-z0-9]+\.([^<]+)<\/string>/.match(contents)
|
|
27
|
+
puts "Found app Id: #{$1}" if DEBUG
|
|
28
|
+
app_id = $1
|
|
29
|
+
else
|
|
30
|
+
nil
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def creation_date
|
|
35
|
+
# <key>CreationDate</key>
|
|
36
|
+
# <date>2011-08-30T02:11:55Z</date>
|
|
37
|
+
if /<key>CreationDate<\/key>\s*<date>([^<]+)<\/date>/.match(contents)
|
|
38
|
+
#creation_date = Date.strptime($1, '%Y-%m-%dT%h:%M:%sZ')
|
|
39
|
+
creation_date = Time.parse($1)
|
|
40
|
+
puts "Found Creation date: #{creation_date.to_s}" if DEBUG
|
|
41
|
+
creation_date
|
|
42
|
+
else
|
|
43
|
+
nil
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def has_provisioned_devices?
|
|
48
|
+
# <key>ProvisionedDevices</key>
|
|
49
|
+
/<key>ProvisionedDevices<\/key>/.match(contents)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def initialize(contents)
|
|
53
|
+
# If we specify a path, read it first
|
|
54
|
+
begin
|
|
55
|
+
if File.exists? contents and not File.directory? contents
|
|
56
|
+
contents = File.open(contents).read
|
|
57
|
+
end
|
|
58
|
+
rescue
|
|
59
|
+
end
|
|
60
|
+
@contents = contents
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def self.remove_stale_equivalent_profiles(path)
|
|
64
|
+
new_profile = IosProvisioningProfile.new(path)
|
|
65
|
+
|
|
66
|
+
# Look through each file in the list
|
|
67
|
+
# Dir.glob(File.join(PROV_PROFILE_DIR,"*.mobileprovision")) do |installed_profile_path|
|
|
68
|
+
|
|
69
|
+
# next if not /#{UUID_REGEX}\.mobileprovision$/.match(installed_profile_path)
|
|
70
|
+
# puts "Examining prov. profile: #{installed_profile_path}" if DEBUG
|
|
71
|
+
|
|
72
|
+
# installed_profile = IosProvisioningProfile.new(File.open(installed_profile_path).read)
|
|
73
|
+
|
|
74
|
+
self.loop_through_existing_profiles do |installed_profile|
|
|
75
|
+
if installed_profile.app_id == new_profile.app_id and
|
|
76
|
+
installed_profile.creation_date < new_profile.creation_date and
|
|
77
|
+
installed_profile.has_provisioned_devices? == new_profile.has_provisioned_devices?
|
|
78
|
+
puts "Removing stale Prov Profile: #{installed_profile_path}"
|
|
79
|
+
File.delete installed_profile_path
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def self.install(path)
|
|
85
|
+
if not File.directory? PROV_PROFILE_DIR
|
|
86
|
+
FileUtils.mkdir_p PROV_PROFILE_DIR
|
|
87
|
+
FileUtils.chmod 0755, PROV_PROFILE_DIR
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
new_profile = IosProvisioningProfile.new(path)
|
|
91
|
+
new_path = File.join(PROV_PROFILE_DIR, new_profile.uuid+".mobileprovision")
|
|
92
|
+
|
|
93
|
+
if File.expand_path(path) != File.expand_path(new_path)
|
|
94
|
+
if profile_worth_installing? path
|
|
95
|
+
self.remove_stale_equivalent_profiles(path)
|
|
96
|
+
FileUtils.copy(path, new_path)
|
|
97
|
+
end
|
|
98
|
+
else
|
|
99
|
+
puts "Cannot install new profile over itself!"
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def self.profile_worth_installing?(path)
|
|
104
|
+
new_profile = IosProvisioningProfile.new(path)
|
|
105
|
+
loop_through_existing_profiles do |installed_profile|
|
|
106
|
+
if installed_profile.app_id == new_profile.app_id
|
|
107
|
+
return false if installed_profile.creation_date >= new_profile.creation_date
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
true
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
private
|
|
115
|
+
def self.loop_through_existing_profiles(&block)
|
|
116
|
+
# Look through each file in the list
|
|
117
|
+
Dir.glob(File.join(PROV_PROFILE_DIR,"*.mobileprovision")) do |installed_profile_path|
|
|
118
|
+
|
|
119
|
+
next if not /#{UUID_REGEX}\.mobileprovision$/.match(installed_profile_path)
|
|
120
|
+
puts "Examining prov. profile: #{installed_profile_path}" if DEBUG
|
|
121
|
+
|
|
122
|
+
installed_profile = IosProvisioningProfile.new(File.open(installed_profile_path).read)
|
|
123
|
+
|
|
124
|
+
yield installed_profile
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ios_android_toolbox
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 3
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 0
|
|
9
|
-
-
|
|
10
|
-
version: 0.0.
|
|
9
|
+
- 14
|
|
10
|
+
version: 0.0.14
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Igor Sales
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2012-
|
|
18
|
+
date: 2012-08-21 00:00:00 Z
|
|
19
19
|
dependencies: []
|
|
20
20
|
|
|
21
21
|
description: ""
|
|
@@ -58,6 +58,7 @@ files:
|
|
|
58
58
|
- lib/ios_android_toolbox/android.rb
|
|
59
59
|
- lib/ios_android_toolbox/base.rb
|
|
60
60
|
- lib/ios_android_toolbox/ios.rb
|
|
61
|
+
- lib/ios_android_toolbox/ios_prov_profile.rb
|
|
61
62
|
- lib/ios_android_toolbox/version.rb
|
|
62
63
|
homepage: ""
|
|
63
64
|
licenses: []
|