ios_provisioning_profile_parser 0.0.4
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 +7 -0
- data/lib/ios_provisioning_profile_entitlements.rb +27 -0
- data/lib/ios_provisioning_profile_parser.rb +81 -0
- metadata +68 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e591a7d7a225a455eaaa2a236c6af377ce66fcd9
|
4
|
+
data.tar.gz: 09b4d6965d86626659a3657b5640e3c528ac960c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7781af43f79b0a2c7ed993b918ee0e2779c265f7cd23d78e6de962519e7b01274e41dd497cbec6020ae8af01cf50bed210d363bb1f14005deb787f59564abdd5
|
7
|
+
data.tar.gz: 99491b4a6a49bd01836e212cb1b02bfaf6f803889951409fdcc446fa4651df1b281f61fe6ec5bbc640faad510dd6108dcc705724af59a676a345ca3a499cafd9
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module IOSProvisioningProfileParser
|
2
|
+
# INFO: Based on https://github.com/fastlane/fastlane/blob/master/fastlane_core/lib/fastlane_core/provisioning_profile.rb
|
3
|
+
# and http://maniak-dobrii.com/extracting-stuff-from-provisioning-profile/
|
4
|
+
class ProvisioningProfileEntitlements
|
5
|
+
attr_reader :dictionary
|
6
|
+
|
7
|
+
def initialize(dictionary)
|
8
|
+
@dictionary = dictionary
|
9
|
+
end
|
10
|
+
|
11
|
+
def keychain_access_groups
|
12
|
+
return @dictionary["keychain-access-groups"]
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_task_allow
|
16
|
+
return @dictionary["get-task-allow"]
|
17
|
+
end
|
18
|
+
|
19
|
+
def security_application_groups
|
20
|
+
return @dictionary["com.apple.security.application-groups"]
|
21
|
+
end
|
22
|
+
|
23
|
+
def aps_environment
|
24
|
+
return @dictionary["aps-environment"]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require_relative 'ios_provisioning_profile_entitlements.rb'
|
2
|
+
|
3
|
+
module IOSProvisioningProfileParser
|
4
|
+
# INFO: Based on https://github.com/fastlane/fastlane/blob/master/fastlane_core/lib/fastlane_core/provisioning_profile.rb
|
5
|
+
# and http://maniak-dobrii.com/extracting-stuff-from-provisioning-profile/
|
6
|
+
class ProvisioningProfile
|
7
|
+
attr_reader :profile_path
|
8
|
+
|
9
|
+
def initialize(path)
|
10
|
+
@profile_path = path
|
11
|
+
@profile_dict = ProvisioningProfile.parse(path)
|
12
|
+
end
|
13
|
+
|
14
|
+
def identities
|
15
|
+
return @profile_dict["DeveloperCertificates"].map { |cert|
|
16
|
+
encoded_identity = Base64.encode64(cert.string)
|
17
|
+
ProvisioningProfile.decode_identity(encoded_identity)
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def teams
|
22
|
+
return @profile_dict["TeamIdentifier"]
|
23
|
+
end
|
24
|
+
|
25
|
+
def name
|
26
|
+
return @profile_dict["Name"]
|
27
|
+
end
|
28
|
+
|
29
|
+
def bundle_id
|
30
|
+
return @profile_dict["Entitlements"]["application-identifier"]
|
31
|
+
end
|
32
|
+
|
33
|
+
def bundle_id_no_team
|
34
|
+
return self.bundle_id().partition('.').last
|
35
|
+
end
|
36
|
+
|
37
|
+
def uuid
|
38
|
+
return @profile_dict["UUID"]
|
39
|
+
end
|
40
|
+
|
41
|
+
def entitlements
|
42
|
+
return ProvisioningProfileEntitlements.new(@profile_dict["Entitlements"])
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def self.parse(path, keychain_path = nil)
|
48
|
+
require 'plist'
|
49
|
+
|
50
|
+
plist = Plist.parse_xml(ProvisioningProfile.decode(path, keychain_path))
|
51
|
+
if (plist || []).count > 5
|
52
|
+
plist
|
53
|
+
else
|
54
|
+
raise RuntimeError, "Error parsing provisioning profile at path '#{path}'"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.decode(path, keychain_path = nil)
|
59
|
+
require 'tmpdir'
|
60
|
+
Dir.mktmpdir('fastlane') do |dir|
|
61
|
+
err = "#{dir}/cms.err"
|
62
|
+
# we want to prevent the error output to mix up with the standard output because of
|
63
|
+
# /dev/null: https://github.com/fastlane/fastlane/issues/6387
|
64
|
+
if keychain_path.nil?
|
65
|
+
decoded = `security cms -D -i "#{path}" 2> #{err}`
|
66
|
+
else
|
67
|
+
decoded = `security cms -D -i "#{path}" -k "#{keychain_path.shellescape}" 2> #{err}`
|
68
|
+
end
|
69
|
+
|
70
|
+
raise RuntimeError, "Failure to decode #{path}. Exit: #{$?.exitstatus}: #{File.read(err)}" if $?.exitstatus != 0
|
71
|
+
|
72
|
+
decoded
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.decode_identity(encoded_identity)
|
77
|
+
result = `echo \"#{encoded_identity}\" | base64 -D | openssl x509 -noout -inform DER -subject | sed 's/^.*CN=\\([^\\/]*\\)\\/.*$/\\1/'`.strip
|
78
|
+
result
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
metadata
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ios_provisioning_profile_parser
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ramil Minibaev
|
8
|
+
- Alexey Martynov
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2019-05-07 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: plist
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 3.1.0
|
21
|
+
- - <
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 4.0.0
|
24
|
+
type: :runtime
|
25
|
+
prerelease: false
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
requirements:
|
28
|
+
- - '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 3.1.0
|
31
|
+
- - <
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 4.0.0
|
34
|
+
description: 'Gem can parse following properties: profile identities, teams, profile
|
35
|
+
name, bundle ID, profile UUID, entitlements'
|
36
|
+
email:
|
37
|
+
executables: []
|
38
|
+
extensions: []
|
39
|
+
extra_rdoc_files: []
|
40
|
+
files:
|
41
|
+
- lib/ios_provisioning_profile_entitlements.rb
|
42
|
+
- lib/ios_provisioning_profile_parser.rb
|
43
|
+
homepage: https://github.com/alexeyn-martynov
|
44
|
+
licenses:
|
45
|
+
- MIT
|
46
|
+
metadata: {}
|
47
|
+
post_install_message:
|
48
|
+
rdoc_options: []
|
49
|
+
require_paths:
|
50
|
+
- lib
|
51
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
requirements: []
|
62
|
+
rubyforge_project:
|
63
|
+
rubygems_version: 2.6.14
|
64
|
+
signing_key:
|
65
|
+
specification_version: 4
|
66
|
+
summary: Apple provisioning profile parser utility. Requires plist gem, works only
|
67
|
+
on Mac OS X.
|
68
|
+
test_files: []
|