fastlane-plugin-dependency_check_ios_analyzer 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 660f1ed90d6f3f6f65d75491077ff0163590226fc0cf71dc00604af2565ac317
4
+ data.tar.gz: 8a02db2fb5c3d921e60b9fd4dbdb8aa879f923baa7ef22127c4853b36fade699
5
+ SHA512:
6
+ metadata.gz: 9d2afdd951f732aa69b4f39c9d7b4b7e4921912ae877e9828d8ec8351fb74713c4cefcd4a4cec0aa8be9ba6b2f1c91001aac4dd86e8816cbf3bb5477c5cd260b
7
+ data.tar.gz: 10ea8e5bfb61ad113dd578f8b1eb33f511469db0e69a4cc17aa4fc5785cda3c2a7fa851b09394aaf14d899cf2dbfa7565ec6399b4a9383d9182390bca49a55e0
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Alexey Alter-Pesotskiy
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # fastlane-plugin-dependency_check_ios_analyzer
2
+
3
+ [![fastlane Plugin Badge](https://rawcdn.githack.com/fastlane/fastlane/master/fastlane/assets/plugin-badge.svg)](https://rubygems.org/gems/fastlane-plugin-dependency_check_ios_analyzer)
4
+
5
+ ## About dependency_check_ios_analyzer
6
+
7
+ Fastlane wrapper around the [OWASP dependency-check](https://jeremylong.github.io/DependencyCheck) [Swift Package Manager](https://jeremylong.github.io/DependencyCheck/analyzers/swift.html) and [Cocoapods](https://jeremylong.github.io/DependencyCheck/analyzers/cocoapods.html) analyzers 🚀
8
+
9
+ This analyzer is considered experimental. While it may be useful and provide valid results more testing must be completed to ensure that the false negative/false positive rates are acceptable.
10
+
11
+ ## Parameters
12
+
13
+ | *Key* | *Description* | *Default* |
14
+ | ------|-------------- | --------- |
15
+ | `skip_spm_analysis` | Skip analysis of SPM dependencies | `false` |
16
+ | `skip_pods_analysis` | Skip analysis of Cocoapods dependencies | `false` |
17
+ | `spm_checkouts_path` | Path to Swift Packages, if they are resolved | |
18
+ | `pod_file_lock_path` | Path to the `Podfile.lock` file | |
19
+ | `project_name` | The project's name | DependencyCheck |
20
+ | `output_directory` | The directory in which all reports will be stored | dependency-check |
21
+ | `output_types` | Comma separated list of the output types (e.g. `html`, `xml`, `csv`, `json`, `junit`, `sarif`, `all`) | `sarif` |
22
+ | `cli_version` | Specify the required version of DependencyCheck analyzer. *Not recommended* | |
23
+ | `rsa_key` | Specify the RSA_KEY of DependencyCheck analyzer download. *Not recommended* | |
24
+ | `verbose` | The file path to write verbose logging information | |
25
+ | `fail_on_cvss` | Specifies if the build should be failed if a CVSS score above a specified level is identified. Since the CVSS scores are 0-10, by default the build will never fail | |
26
+ | `junit_fail_on_cvss` | Specifies the CVSS score that is considered a failure when generating the junit report | |
27
+ | `keep_binary_on_exit` | Keep `DependencyCheck` binary and data on exit | |
28
+
29
+ ## Requirements
30
+
31
+ * [Xcode](https://developer.apple.com/downloads)
32
+ * [Xcode Command Line Tools](http://railsapps.github.io/xcode-command-line-tools.html)
33
+
34
+ ## Getting Started
35
+
36
+ To get started with `dependency_check_ios_analyzer`, add it to your project by running:
37
+
38
+ ```bash
39
+ $ fastlane add_plugin dependency_check_ios_analyzer
40
+ ```
41
+
42
+ ## Usage
43
+
44
+ ```ruby
45
+ vulnerabilities_count = dependency_check_ios_analyzer(
46
+ output_types: 'HTML, JUNIT',
47
+ fail_on_cvss: 7
48
+ )
49
+ ```
@@ -0,0 +1,16 @@
1
+ require 'fastlane/plugin/dependency_check_ios_analyzer/version'
2
+
3
+ module Fastlane
4
+ module DependencyCheckIosAnalyzer
5
+ # Return all .rb files inside the "actions" and "helper" directory
6
+ def self.all_classes
7
+ Dir[File.expand_path('**/{actions,helper}/*.rb', File.dirname(__FILE__))]
8
+ end
9
+ end
10
+ end
11
+
12
+ # By default we want to import all available actions and helpers
13
+ # A plugin can contain any number of actions and plugins
14
+ Fastlane::DependencyCheckIosAnalyzer.all_classes.each do |current|
15
+ require current
16
+ end
@@ -0,0 +1,166 @@
1
+ require 'fastlane_core/ui/ui'
2
+ require 'fastlane/action'
3
+ require_relative '../helper/analyzer_helper'
4
+ require_relative '../helper/pods_helper'
5
+ require_relative '../helper/spm_helper'
6
+
7
+ module Fastlane
8
+ module Actions
9
+ class DependencyCheckIosAnalyzerAction < Action
10
+ def self.run(params)
11
+ params[:output_types] = Helper::AnalyzerHelper.parse_output_types(params[:output_types])
12
+ bin_path = Helper::AnalyzerHelper.install(params)
13
+ @success = Helper::SpmHelper.analize(bin_path: bin_path, params: params)
14
+ @vulnerabilities = Helper::AnalyzerHelper.parse_report("#{params[:output_directory]}/SPM/*.sarif")
15
+ on_exit(params)
16
+ end
17
+
18
+ def self.on_exit(params)
19
+ Helper::AnalyzerHelper.clean_up(params)
20
+ say_goodbye = "🦠 There are #{@vulnerabilities} potential vulnerabilities. " \
21
+ 'Check out the report for further investigation.'
22
+ @success ? UI.important(say_goodbye) : UI.crash!(say_goodbye)
23
+ end
24
+
25
+ #####################################################
26
+ # Documentation #
27
+ #####################################################
28
+
29
+ def self.description
30
+ 'Fastlane wrapper around the OWASP dependency-check Swift Package Manager and Cocoapods analyzers.'
31
+ end
32
+
33
+ def self.authors
34
+ ["Alexey Alter-Pesotskiy"]
35
+ end
36
+
37
+ def self.example_code
38
+ [
39
+ vulnerabilities_count = dependency_check_ios_analyzer(
40
+ project_name: 'MyProject',
41
+ skip_pods_analysis: true,
42
+ output_types: 'HTML, JUNIT',
43
+ fail_on_cvss: 7
44
+ )
45
+ ]
46
+ end
47
+
48
+ def self.return_value
49
+ @vulnerabilities
50
+ end
51
+
52
+ def self.available_options
53
+ [
54
+ FastlaneCore::ConfigItem.new(
55
+ key: :skip_spm_analysis,
56
+ description: 'Skip analysis of SPM dependencies',
57
+ optional: true,
58
+ default_value: false,
59
+ is_string: false,
60
+ type: Boolean
61
+ ),
62
+ FastlaneCore::ConfigItem.new(
63
+ key: :skip_pods_analysis,
64
+ description: 'Skip analysis of Cocoapods dependencies',
65
+ optional: true,
66
+ default_value: false,
67
+ is_string: false,
68
+ type: Boolean
69
+ ),
70
+ FastlaneCore::ConfigItem.new(
71
+ key: :spm_checkouts_path,
72
+ description: 'Path to Swift Packages, if they are resolved',
73
+ optional: true,
74
+ is_string: true,
75
+ type: String
76
+ ),
77
+ FastlaneCore::ConfigItem.new(
78
+ key: :pod_file_lock_path,
79
+ description: 'Path to the Podfile.lock file',
80
+ optional: true,
81
+ is_string: true,
82
+ type: String
83
+ ),
84
+ FastlaneCore::ConfigItem.new(
85
+ key: :project_name,
86
+ description: "The project's name",
87
+ optional: true,
88
+ default_value: 'DependencyCheck',
89
+ is_string: true,
90
+ type: String
91
+ ),
92
+ FastlaneCore::ConfigItem.new(
93
+ key: :output_directory,
94
+ description: 'The directory in which all reports will be stored',
95
+ optional: true,
96
+ default_value: 'dependency-check',
97
+ is_string: true,
98
+ type: String
99
+ ),
100
+ FastlaneCore::ConfigItem.new(
101
+ key: :output_types,
102
+ description: 'Comma separated list of the output types (e.g. html, xml, csv, json, junit, sarif, all)',
103
+ optional: true,
104
+ default_value: 'SARIF',
105
+ is_string: true,
106
+ type: String
107
+ ),
108
+ FastlaneCore::ConfigItem.new(
109
+ key: :cli_version,
110
+ description: 'Specify the required version of DependencyCheck analyzer. Not recommended',
111
+ optional: true,
112
+ is_string: true,
113
+ type: String
114
+ ),
115
+ FastlaneCore::ConfigItem.new(
116
+ key: :rsa_key,
117
+ description: 'Specify the RSA_KEY of DependencyCheck analyzer download. Not recommended',
118
+ optional: true,
119
+ is_string: true,
120
+ type: String
121
+ ),
122
+ FastlaneCore::ConfigItem.new(
123
+ key: :verbose,
124
+ description: 'The file path to write verbose logging information',
125
+ optional: true,
126
+ is_string: true,
127
+ type: String
128
+ ),
129
+ FastlaneCore::ConfigItem.new(
130
+ key: :fail_on_cvss,
131
+ description: 'Specifies if the build should be failed if a CVSS score above a specified level is identified. ' \
132
+ 'Since the CVSS scores are 0-10, by default the build will never fail',
133
+ optional: true,
134
+ default_value: 11,
135
+ is_string: false,
136
+ type: Integer
137
+ ),
138
+ FastlaneCore::ConfigItem.new(
139
+ key: :junit_fail_on_cvss,
140
+ description: 'Specifies the CVSS score that is considered a failure when generating the junit report',
141
+ optional: true,
142
+ default_value: 0,
143
+ is_string: false,
144
+ type: Integer
145
+ ),
146
+ FastlaneCore::ConfigItem.new(
147
+ key: :keep_binary_on_exit,
148
+ description: 'Keep DependencyCheck binary and data on exit',
149
+ optional: true,
150
+ default_value: true,
151
+ is_string: false,
152
+ type: Boolean
153
+ )
154
+ ]
155
+ end
156
+
157
+ def self.category
158
+ :testing
159
+ end
160
+
161
+ def self.is_supported?(platform)
162
+ [:ios, :mac].include?(platform)
163
+ end
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,91 @@
1
+ require 'json'
2
+ require 'curb'
3
+ require 'zip'
4
+
5
+ module Fastlane
6
+ UI = FastlaneCore::UI unless Fastlane.const_defined?("UI")
7
+
8
+ module Helper
9
+ class AnalyzerHelper
10
+ def self.install(params)
11
+ repo = 'https://github.com/jeremylong/DependencyCheck'
12
+ name = 'dependency-check'
13
+ version = params[:cli_version] ? params[:cli_version] : '6.1.6'
14
+ rsa_key = params[:rsa_key] ? params[:rsa_key] : 'F9514E84AE3708288374BBBE097586CFEA37F9A6'
15
+ base_url = "#{repo}/releases/download/v#{version}/#{name}-#{version}-release"
16
+ bin_path = "#{params[:output_directory]}/#{name}/bin/#{name}.sh"
17
+ zip_path = "#{params[:output_directory]}/#{name}.zip"
18
+ asc_path = "#{zip_path}.asc"
19
+
20
+ unless File.exist?(bin_path)
21
+ FileUtils.mkdir_p(params[:output_directory])
22
+
23
+ unless File.exist?(zip_path)
24
+ zip_url = "#{base_url}.zip"
25
+ UI.message("🚀 Downloading DependencyCheck: #{zip_url}")
26
+ curl = Curl.get(zip_url) { |curl| curl.follow_location = true }
27
+ File.open(zip_path, 'w+') { |f| f.write(curl.body_str) }
28
+ end
29
+
30
+ asc_url = "#{base_url}.zip.asc"
31
+ UI.message("🚀 Downloading associated GPG signature file: #{asc_url}")
32
+ curl = Curl.get(asc_url) { |curl| curl.follow_location = true }
33
+ File.open(asc_path, 'w+') { |f| f.write(curl.body_str) }
34
+
35
+ verify_cryptographic_integrity(asc_path: asc_path, rsa_key: rsa_key)
36
+
37
+ unzip(file: zip_path, params: params)
38
+
39
+ FileUtils.rm_rf(zip_path)
40
+ FileUtils.rm_rf(asc_path)
41
+ end
42
+
43
+ bin_path
44
+ end
45
+
46
+ def self.parse_output_types(output_types)
47
+ list = output_types.delete(' ').split(',')
48
+ list << 'sarif' unless list.include?('sarif')
49
+ report_types = ''
50
+ list.each { |output_type| report_types += " --format #{output_type.upcase}" }
51
+
52
+ UI.message("🎥 Output types: #{list}")
53
+ report_types
54
+ end
55
+
56
+ def self.parse_report(report)
57
+ if Dir[report].empty?
58
+ UI.crash!('Something went wrong. There is no report to analyze. Consider reporting a bug.')
59
+ end
60
+
61
+ JSON.parse(File.read(Dir[report].first))['runs'][0]['results'].size
62
+ end
63
+
64
+ def self.clean_up(params)
65
+ return if params[:keep_binary_on_exit]
66
+
67
+ FileUtils.rm_rf("#{params[:output_directory]}/dependency-check")
68
+ end
69
+
70
+ private
71
+
72
+ def self.unzip(file:, params:)
73
+ Zip::File.open(file) do |zip_file|
74
+ zip_file.each do |f|
75
+ fpath = File.join(params[:output_directory], f.name)
76
+ zip_file.extract(f, fpath) unless File.exist?(fpath)
77
+ end
78
+ end
79
+ end
80
+
81
+ # https://jeremylong.github.io/DependencyCheck/dependency-check-cli/
82
+ def self.verify_cryptographic_integrity(asc_path:, rsa_key:)
83
+ UI.message("🕵️ Verifying the cryptographic integrity")
84
+ # Import the GPG key used to sign all DependencyCheck releases
85
+ Actions.sh("gpg --keyserver hkp://keys.gnupg.net --recv-keys #{rsa_key}")
86
+ # Verify the cryptographic integrity
87
+ Actions.sh("gpg --verify #{asc_path}")
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,27 @@
1
+ module Fastlane
2
+ UI = FastlaneCore::UI unless Fastlane.const_defined?("UI")
3
+
4
+ module Helper
5
+ class PodsHelper
6
+ def self.analize(params)
7
+ if params[:skip_pods_analysis]
8
+ UI.important("⚡ Cocoapods dependencies will NOT be analyzed.")
9
+ return 0
10
+ end
11
+
12
+ 0 # FIXME: https://github.com/alteral/fastlane-plugin-dependency_check_ios_analyzer/issues/3
13
+ end
14
+
15
+ private
16
+
17
+ def self.verify(params)
18
+ report = "#{params[:output_directory]}/Cocoapods/*.sarif"
19
+ if Dir[report].empty?
20
+ UI.crash!('Something went wrong. There is no report to analyze. Consider reporting a bug.')
21
+ end
22
+
23
+ JSON.parse(File.read(Dir[report].first))
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,58 @@
1
+ module Fastlane
2
+ UI = FastlaneCore::UI unless Fastlane.const_defined?("UI")
3
+
4
+ module Helper
5
+ class SpmHelper
6
+ def self.analize(bin_path:, params:)
7
+ if params[:skip_spm_analysis]
8
+ UI.important("⚡ SPM dependencies will NOT be analyzed.")
9
+ return 0
10
+ end
11
+
12
+ # Verify xcodebuild
13
+ UI.user_error!("xcodebuild not installed") if `which xcodebuild`.length.zero?
14
+
15
+ # Specify verbose output
16
+ verbose = params[:verbose] ? " --log #{params[:verbose]}" : ''
17
+
18
+ # Resolve package ddependencies
19
+ checkouts_path = resolve_package_dependencies(params)
20
+
21
+ # Make the script executable
22
+ Actions.sh("chmod 775 #{bin_path}")
23
+
24
+ # Execute DependencyCheck
25
+ begin
26
+ Actions.sh(
27
+ "#{bin_path}" \
28
+ " --enableExperimental" \
29
+ " --disableBundleAudit" \
30
+ " --prettyPrint" \
31
+ " --project #{params[:project_name]}" \
32
+ " --out #{params[:output_directory]}/SPM" \
33
+ " --failOnCVSS #{params[:fail_on_cvss]}" \
34
+ " --scan #{checkouts_path}" \
35
+ "#{params[:output_types]}" \
36
+ "#{verbose}"
37
+ )
38
+ rescue
39
+ return false
40
+ end
41
+
42
+ true
43
+ end
44
+
45
+ private
46
+
47
+ def self.resolve_package_dependencies(params)
48
+ return params[:spm_checkouts_path] if params[:spm_checkouts_path]
49
+
50
+ checkouts_path = "#{params[:output_directory]}/SPM/SourcePackages"
51
+ Actions.sh("set -o pipefail && xcodebuild -resolvePackageDependencies -clonedSourcePackagesDirPath #{checkouts_path}")
52
+
53
+ UI.message("🎉 SPM checkouts path: #{checkouts_path}")
54
+ checkouts_path
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,5 @@
1
+ module Fastlane
2
+ module DependencyCheckIosAnalyzer
3
+ VERSION = '0.1.0'
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,205 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fastlane-plugin-dependency_check_ios_analyzer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Alexey Alter-Pesotskiy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-05-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: curb
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubyzip
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec_junit_formatter
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 0.49.1
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 0.49.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-require_tools
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: fastlane
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: 2.144.0
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: 2.144.0
167
+ description:
168
+ email: a.alterpesotskiy@mail.ru
169
+ executables: []
170
+ extensions: []
171
+ extra_rdoc_files: []
172
+ files:
173
+ - LICENSE
174
+ - README.md
175
+ - lib/fastlane/plugin/dependency_check_ios_analyzer.rb
176
+ - lib/fastlane/plugin/dependency_check_ios_analyzer/actions/dependency_check_ios_analyzer_action.rb
177
+ - lib/fastlane/plugin/dependency_check_ios_analyzer/helper/analyzer_helper.rb
178
+ - lib/fastlane/plugin/dependency_check_ios_analyzer/helper/pods_helper.rb
179
+ - lib/fastlane/plugin/dependency_check_ios_analyzer/helper/spm_helper.rb
180
+ - lib/fastlane/plugin/dependency_check_ios_analyzer/version.rb
181
+ homepage: https://github.com/alteral/fastlane-plugin-dependency_check_ios_analyzer
182
+ licenses:
183
+ - MIT
184
+ metadata: {}
185
+ post_install_message:
186
+ rdoc_options: []
187
+ require_paths:
188
+ - lib
189
+ required_ruby_version: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ required_rubygems_version: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ requirements: []
200
+ rubygems_version: 3.0.3
201
+ signing_key:
202
+ specification_version: 4
203
+ summary: Fastlane wrapper around the OWASP dependency-check Swift Package Manager
204
+ and Cocoapods analyzers.
205
+ test_files: []