fastlane-plugin-verify_ipa 0.2.1 → 0.4.1
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 +4 -4
- data/README.md +26 -3
- data/lib/fastlane/plugin/verify_ipa/actions/verify_ipa_entitlements_action.rb +36 -11
- data/lib/fastlane/plugin/verify_ipa/actions/verify_ipa_files_action.rb +1 -1
- data/lib/fastlane/plugin/verify_ipa/helper/verify_ipa_helper.rb +10 -4
- data/lib/fastlane/plugin/verify_ipa/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8d3d6a12c11ed740135f189e5ee1bbd27f4e155
|
4
|
+
data.tar.gz: 5f225411dfcd0b22c1651b1bea94b903b84bab57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: afd584e1c65d24a7297ec756ba095056a96ca6a287ca9fb46aa6279a473788f1a1adbb43f9516adb39501a76abd1f2c5f29ecc1113668cb31ced179a174a4b12
|
7
|
+
data.tar.gz: d66f57bffaf9c67957e54b12985172411b14979733da809a19aa9c3ddc427b0c58d8c84bca6ed0ffc71060b8c998c448f3a8c6870f0f9c7e578275da6e7b6a3b
|
data/README.md
CHANGED
@@ -62,9 +62,32 @@ verify_ipa_entitlements(
|
|
62
62
|
team_identifier: 'MZ6ZTY3EA7',
|
63
63
|
aps_environment: 'production',
|
64
64
|
other_params: {
|
65
|
-
|
66
|
-
|
67
|
-
|
65
|
+
keychain_access_groups: ['MZ6ZTY3EA7.*'],
|
66
|
+
get_task_allow: false,
|
67
|
+
beta_reports_active: true
|
68
|
+
}
|
69
|
+
)
|
70
|
+
```
|
71
|
+
|
72
|
+
To test application extensions, use the `:extensions` parameter, e.g:
|
73
|
+
|
74
|
+
```bash
|
75
|
+
verify_ipa_entitlements(
|
76
|
+
application_identifier: 'MZ6ZTY3EA7.com.apple.myapp',
|
77
|
+
team_identifier: 'MZ6ZTY3EA7',
|
78
|
+
aps_environment: 'production',
|
79
|
+
application_groups: [
|
80
|
+
'group.com.apple.mygroup'
|
81
|
+
]
|
82
|
+
extensions: {
|
83
|
+
'My Great Extension': {
|
84
|
+
application_identifier: 'MZ6ZTY3EA7.com.apple.myapp.ext',
|
85
|
+
team_identifier: 'MZ6ZTY3EA7',
|
86
|
+
application_groups: [
|
87
|
+
'group.com.apple.mygroup'
|
88
|
+
]
|
89
|
+
}
|
90
|
+
}
|
68
91
|
)
|
69
92
|
```
|
70
93
|
|
@@ -5,42 +5,57 @@ module Fastlane
|
|
5
5
|
class VerifyIpaEntitlementsAction < Action
|
6
6
|
def self.run(params)
|
7
7
|
Dir.mktmpdir do |dir|
|
8
|
-
app_path = Helper::VerifyIpaHelper.app_path(params, dir)
|
8
|
+
app_path = Helper::VerifyIpaHelper.app_path(params[:ipa_path], dir)
|
9
9
|
entitlements = self.read_entitlements(params, app_path)
|
10
10
|
self.verify_entitlements(params, entitlements)
|
11
|
+
self.verify_extensions(params, app_path)
|
11
12
|
end
|
12
13
|
end
|
13
14
|
|
14
|
-
def self.read_entitlements(params,
|
15
|
-
profile_path = "#{
|
16
|
-
profile_plist = sh("security cms -D -i #{profile_path}")
|
15
|
+
def self.read_entitlements(params, path)
|
16
|
+
profile_path = "#{path}/embedded.mobileprovision"
|
17
|
+
profile_plist = sh("security cms -D -i '#{profile_path}'")
|
17
18
|
UI.user_error!("Unable to extract profile") unless $? == 0
|
18
19
|
|
19
20
|
profile = Plist.parse_xml(profile_plist)
|
20
21
|
profile['Entitlements']
|
21
22
|
end
|
22
23
|
|
23
|
-
def self.verify_entitlements(params, entitlements)
|
24
|
+
def self.verify_entitlements(params, entitlements, appex_name = nil)
|
24
25
|
if params[:application_identifier]
|
25
|
-
self.verify_param(:application_identifier, params[:application_identifier], entitlements['application-identifier'])
|
26
|
+
self.verify_param(:application_identifier, params[:application_identifier], entitlements['application-identifier'], appex_name)
|
26
27
|
end
|
27
28
|
if params[:team_identifier]
|
28
|
-
self.verify_param(:team_identifier, params[:team_identifier], entitlements['com.apple.developer.team-identifier'])
|
29
|
+
self.verify_param(:team_identifier, params[:team_identifier], entitlements['com.apple.developer.team-identifier'], appex_name)
|
29
30
|
end
|
30
31
|
if params[:aps_environment]
|
31
|
-
self.verify_param(:aps_environment, params[:aps_environment], entitlements['aps-environment'])
|
32
|
+
self.verify_param(:aps_environment, params[:aps_environment], entitlements['aps-environment'], appex_name)
|
33
|
+
end
|
34
|
+
if params[:application_groups]
|
35
|
+
self.verify_param(:application_groups, params[:application_groups], entitlements['com.apple.security.application-groups'], appex_name)
|
32
36
|
end
|
33
37
|
if params[:other_params]
|
34
38
|
params[:other_params].keys.each do |key|
|
35
|
-
self.verify_param(key, params[:other_params][key], entitlements[key.to_s.tr('_', '-')])
|
39
|
+
self.verify_param(key, params[:other_params][key], entitlements[key.to_s.tr('_', '-')], appex_name)
|
36
40
|
end
|
37
41
|
end
|
38
42
|
|
39
43
|
UI.success("Entitlements are verified.")
|
40
44
|
end
|
41
45
|
|
42
|
-
def self.verify_param(param, expected, actual)
|
43
|
-
|
46
|
+
def self.verify_param(param, expected, actual, appex_name)
|
47
|
+
msg_prefix = appex_name ? "[#{appex_name}] " : ""
|
48
|
+
UI.user_error!("#{msg_prefix}Mismatched #{param}. Expected: '#{expected}'; Found: '#{actual}'") unless expected == actual
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.verify_extensions(params, app_path)
|
52
|
+
if params[:extensions]
|
53
|
+
params[:extensions].each do |key, value|
|
54
|
+
appex_path = Helper::VerifyIpaHelper.appex_path(app_path, key)
|
55
|
+
entitlements = self.read_entitlements(params, appex_path)
|
56
|
+
self.verify_entitlements(value, entitlements, appex_path)
|
57
|
+
end
|
58
|
+
end
|
44
59
|
end
|
45
60
|
|
46
61
|
def self.description
|
@@ -69,9 +84,19 @@ module Fastlane
|
|
69
84
|
env_name: 'VERIFY_IPA_APS_ENVIRONMENT',
|
70
85
|
description: 'Key aps-environment in Entitlements',
|
71
86
|
optional: true),
|
87
|
+
FastlaneCore::ConfigItem.new(key: :application_groups,
|
88
|
+
env_name: 'VERIFY_IPA_APPLICATION_GROUPS',
|
89
|
+
description: 'Key com.apple.security.application-groups in Entitlements',
|
90
|
+
optional: true,
|
91
|
+
type: Array),
|
72
92
|
FastlaneCore::ConfigItem.new(key: :other_params,
|
73
93
|
env_name: 'VERIFY_IPA_OTHER_PARAMS',
|
74
94
|
description: 'A hash of entitlement key and expected values',
|
95
|
+
optional: true,
|
96
|
+
type: Hash),
|
97
|
+
FastlaneCore::ConfigItem.new(key: :extensions,
|
98
|
+
env_name: 'VERIFY_IPA_EXTENSIONS',
|
99
|
+
description: 'A hash of entitlement key & values for app extensions found under the PlugIns folder',
|
75
100
|
optional: true,
|
76
101
|
type: Hash)
|
77
102
|
]
|
@@ -3,7 +3,7 @@ module Fastlane
|
|
3
3
|
class VerifyIpaFilesAction < Action
|
4
4
|
def self.run(params)
|
5
5
|
Dir.mktmpdir do |dir|
|
6
|
-
app_path = Helper::VerifyIpaHelper.app_path(params, dir)
|
6
|
+
app_path = Helper::VerifyIpaHelper.app_path(params[:ipa_path], dir)
|
7
7
|
self.verify_files(params, app_path)
|
8
8
|
end
|
9
9
|
end
|
@@ -1,14 +1,20 @@
|
|
1
1
|
module Fastlane
|
2
2
|
module Helper
|
3
3
|
class VerifyIpaHelper
|
4
|
-
def self.app_path(
|
5
|
-
ipa_path
|
4
|
+
def self.app_path(ipa_path, tmpdir)
|
5
|
+
ipa_path ||= Actions.lane_context[Fastlane::Actions::SharedValues::IPA_OUTPUT_PATH] || ''
|
6
6
|
UI.user_error!("Unable to find ipa file '#{ipa_path}'.") unless File.exist?(ipa_path)
|
7
7
|
|
8
8
|
ipa_path = File.expand_path(ipa_path)
|
9
|
-
`unzip '#{ipa_path}' -d #{
|
9
|
+
`unzip '#{ipa_path}' -d #{tmpdir}`
|
10
10
|
UI.user_error!("Unable to unzip ipa '#{ipa_path}'") unless $? == 0
|
11
|
-
Dir["#{
|
11
|
+
Dir["#{tmpdir}/Payload/*.app"].first
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.appex_path(app_path, appex_name)
|
15
|
+
appex_path = "#{app_path}/PlugIns/#{appex_name}.appex"
|
16
|
+
UI.user_error!("Unable to find '#{appex_path}'.") unless File.exist?(appex_path)
|
17
|
+
appex_path
|
12
18
|
end
|
13
19
|
end
|
14
20
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane-plugin-verify_ipa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Derek Yang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: plist
|