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.
@@ -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: []