xcocoapods 1.5.3
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/CHANGELOG.md +6303 -0
- data/LICENSE +28 -0
- data/README.md +80 -0
- data/bin/pod +56 -0
- data/bin/sandbox-pod +168 -0
- data/lib/cocoapods.rb +73 -0
- data/lib/cocoapods/command.rb +175 -0
- data/lib/cocoapods/command/cache.rb +28 -0
- data/lib/cocoapods/command/cache/clean.rb +90 -0
- data/lib/cocoapods/command/cache/list.rb +69 -0
- data/lib/cocoapods/command/env.rb +66 -0
- data/lib/cocoapods/command/init.rb +128 -0
- data/lib/cocoapods/command/install.rb +45 -0
- data/lib/cocoapods/command/ipc.rb +19 -0
- data/lib/cocoapods/command/ipc/list.rb +40 -0
- data/lib/cocoapods/command/ipc/podfile.rb +31 -0
- data/lib/cocoapods/command/ipc/podfile_json.rb +30 -0
- data/lib/cocoapods/command/ipc/repl.rb +51 -0
- data/lib/cocoapods/command/ipc/spec.rb +29 -0
- data/lib/cocoapods/command/ipc/update_search_index.rb +24 -0
- data/lib/cocoapods/command/lib.rb +11 -0
- data/lib/cocoapods/command/lib/create.rb +105 -0
- data/lib/cocoapods/command/lib/lint.rb +121 -0
- data/lib/cocoapods/command/list.rb +39 -0
- data/lib/cocoapods/command/options/project_directory.rb +36 -0
- data/lib/cocoapods/command/options/repo_update.rb +34 -0
- data/lib/cocoapods/command/outdated.rb +140 -0
- data/lib/cocoapods/command/repo.rb +29 -0
- data/lib/cocoapods/command/repo/add.rb +103 -0
- data/lib/cocoapods/command/repo/lint.rb +82 -0
- data/lib/cocoapods/command/repo/list.rb +93 -0
- data/lib/cocoapods/command/repo/push.rb +281 -0
- data/lib/cocoapods/command/repo/remove.rb +36 -0
- data/lib/cocoapods/command/repo/update.rb +28 -0
- data/lib/cocoapods/command/setup.rb +103 -0
- data/lib/cocoapods/command/spec.rb +112 -0
- data/lib/cocoapods/command/spec/cat.rb +51 -0
- data/lib/cocoapods/command/spec/create.rb +283 -0
- data/lib/cocoapods/command/spec/edit.rb +87 -0
- data/lib/cocoapods/command/spec/env_spec.rb +53 -0
- data/lib/cocoapods/command/spec/lint.rb +137 -0
- data/lib/cocoapods/command/spec/which.rb +43 -0
- data/lib/cocoapods/command/update.rb +101 -0
- data/lib/cocoapods/config.rb +347 -0
- data/lib/cocoapods/core_overrides.rb +1 -0
- data/lib/cocoapods/downloader.rb +190 -0
- data/lib/cocoapods/downloader/cache.rb +233 -0
- data/lib/cocoapods/downloader/request.rb +86 -0
- data/lib/cocoapods/downloader/response.rb +16 -0
- data/lib/cocoapods/executable.rb +222 -0
- data/lib/cocoapods/external_sources.rb +57 -0
- data/lib/cocoapods/external_sources/abstract_external_source.rb +205 -0
- data/lib/cocoapods/external_sources/downloader_source.rb +30 -0
- data/lib/cocoapods/external_sources/path_source.rb +55 -0
- data/lib/cocoapods/external_sources/podspec_source.rb +54 -0
- data/lib/cocoapods/gem_version.rb +5 -0
- data/lib/cocoapods/generator/acknowledgements.rb +107 -0
- data/lib/cocoapods/generator/acknowledgements/markdown.rb +44 -0
- data/lib/cocoapods/generator/acknowledgements/plist.rb +94 -0
- data/lib/cocoapods/generator/app_target_helper.rb +244 -0
- data/lib/cocoapods/generator/bridge_support.rb +22 -0
- data/lib/cocoapods/generator/constant.rb +19 -0
- data/lib/cocoapods/generator/copy_resources_script.rb +230 -0
- data/lib/cocoapods/generator/dummy_source.rb +31 -0
- data/lib/cocoapods/generator/embed_frameworks_script.rb +215 -0
- data/lib/cocoapods/generator/header.rb +103 -0
- data/lib/cocoapods/generator/info_plist_file.rb +116 -0
- data/lib/cocoapods/generator/module_map.rb +99 -0
- data/lib/cocoapods/generator/prefix_header.rb +60 -0
- data/lib/cocoapods/generator/umbrella_header.rb +46 -0
- data/lib/cocoapods/hooks_manager.rb +132 -0
- data/lib/cocoapods/installer.rb +703 -0
- data/lib/cocoapods/installer/analyzer.rb +972 -0
- data/lib/cocoapods/installer/analyzer/analysis_result.rb +87 -0
- data/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb +98 -0
- data/lib/cocoapods/installer/analyzer/pod_variant.rb +67 -0
- data/lib/cocoapods/installer/analyzer/pod_variant_set.rb +157 -0
- data/lib/cocoapods/installer/analyzer/podfile_dependency_cache.rb +54 -0
- data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +240 -0
- data/lib/cocoapods/installer/analyzer/specs_state.rb +84 -0
- data/lib/cocoapods/installer/analyzer/target_inspection_result.rb +53 -0
- data/lib/cocoapods/installer/analyzer/target_inspector.rb +260 -0
- data/lib/cocoapods/installer/installation_options.rb +158 -0
- data/lib/cocoapods/installer/pod_source_installer.rb +202 -0
- data/lib/cocoapods/installer/pod_source_preparer.rb +77 -0
- data/lib/cocoapods/installer/podfile_validator.rb +139 -0
- data/lib/cocoapods/installer/post_install_hooks_context.rb +132 -0
- data/lib/cocoapods/installer/pre_install_hooks_context.rb +51 -0
- data/lib/cocoapods/installer/source_provider_hooks_context.rb +34 -0
- data/lib/cocoapods/installer/user_project_integrator.rb +250 -0
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +463 -0
- data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +146 -0
- data/lib/cocoapods/installer/xcode.rb +8 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator.rb +416 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +181 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +84 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +334 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +777 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +116 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installation_result.rb +86 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +256 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb +68 -0
- data/lib/cocoapods/installer/xcode/target_validator.rb +147 -0
- data/lib/cocoapods/open-uri.rb +33 -0
- data/lib/cocoapods/project.rb +414 -0
- data/lib/cocoapods/resolver.rb +585 -0
- data/lib/cocoapods/resolver/lazy_specification.rb +79 -0
- data/lib/cocoapods/sandbox.rb +404 -0
- data/lib/cocoapods/sandbox/file_accessor.rb +444 -0
- data/lib/cocoapods/sandbox/headers_store.rb +146 -0
- data/lib/cocoapods/sandbox/path_list.rb +220 -0
- data/lib/cocoapods/sandbox/pod_dir_cleaner.rb +85 -0
- data/lib/cocoapods/sandbox/podspec_finder.rb +23 -0
- data/lib/cocoapods/sources_manager.rb +157 -0
- data/lib/cocoapods/target.rb +261 -0
- data/lib/cocoapods/target/aggregate_target.rb +338 -0
- data/lib/cocoapods/target/build_settings.rb +1075 -0
- data/lib/cocoapods/target/pod_target.rb +559 -0
- data/lib/cocoapods/user_interface.rb +459 -0
- data/lib/cocoapods/user_interface/error_report.rb +187 -0
- data/lib/cocoapods/user_interface/inspector_reporter.rb +109 -0
- data/lib/cocoapods/validator.rb +981 -0
- metadata +533 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Pod
|
|
2
|
+
class Command
|
|
3
|
+
class IPC < Command
|
|
4
|
+
class List < IPC
|
|
5
|
+
self.summary = 'Lists the specifications known to CocoaPods'
|
|
6
|
+
self.description = <<-DESC
|
|
7
|
+
Prints to STDOUT a YAML dictionary where the keys are the name of the
|
|
8
|
+
specifications and each corresponding value is a dictionary with
|
|
9
|
+
the following keys:
|
|
10
|
+
- defined_in_file
|
|
11
|
+
- version
|
|
12
|
+
- authors
|
|
13
|
+
- summary
|
|
14
|
+
- description
|
|
15
|
+
- platforms
|
|
16
|
+
DESC
|
|
17
|
+
|
|
18
|
+
def run
|
|
19
|
+
require 'yaml'
|
|
20
|
+
sets = config.sources_manager.aggregate.all_sets
|
|
21
|
+
result = {}
|
|
22
|
+
sets.each do |set|
|
|
23
|
+
begin
|
|
24
|
+
spec = set.specification
|
|
25
|
+
result[spec.name] = {
|
|
26
|
+
'authors' => spec.authors.keys,
|
|
27
|
+
'summary' => spec.summary,
|
|
28
|
+
'description' => spec.description,
|
|
29
|
+
'platforms' => spec.available_platforms.map { |p| p.name.to_s },
|
|
30
|
+
}
|
|
31
|
+
rescue DSLError
|
|
32
|
+
next
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
output_pipe.puts result.to_yaml
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Pod
|
|
2
|
+
class Command
|
|
3
|
+
class IPC < Command
|
|
4
|
+
class Podfile < IPC
|
|
5
|
+
include ProjectDirectory
|
|
6
|
+
|
|
7
|
+
self.summary = 'Converts a Podfile to YAML'
|
|
8
|
+
self.description = 'Converts a Podfile to YAML and prints it to STDOUT.'
|
|
9
|
+
self.arguments = [
|
|
10
|
+
CLAide::Argument.new('PATH', true),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
def initialize(argv)
|
|
14
|
+
@path = argv.shift_argument
|
|
15
|
+
super
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def validate!
|
|
19
|
+
super
|
|
20
|
+
help! 'A Podfile path is required.' unless @path
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def run
|
|
24
|
+
require 'yaml'
|
|
25
|
+
podfile = Pod::Podfile.from_file(@path)
|
|
26
|
+
output_pipe.puts podfile.to_yaml
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Pod
|
|
2
|
+
class Command
|
|
3
|
+
class IPC < Command
|
|
4
|
+
class PodfileJSON < IPC
|
|
5
|
+
include ProjectDirectory
|
|
6
|
+
|
|
7
|
+
self.summary = 'Converts a Podfile to JSON'
|
|
8
|
+
self.description = 'Converts a Podfile to JSON and prints it to STDOUT.'
|
|
9
|
+
self.arguments = [
|
|
10
|
+
CLAide::Argument.new('PATH', true),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
def initialize(argv)
|
|
14
|
+
@path = argv.shift_argument
|
|
15
|
+
super
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def validate!
|
|
19
|
+
super
|
|
20
|
+
help! 'A Podfile path is required.' unless @path
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def run
|
|
24
|
+
podfile = Pod::Podfile.from_file(@path)
|
|
25
|
+
output_pipe.puts podfile.to_hash.to_json
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module Pod
|
|
2
|
+
class Command
|
|
3
|
+
class IPC < Command
|
|
4
|
+
class Repl < IPC
|
|
5
|
+
include ProjectDirectory
|
|
6
|
+
|
|
7
|
+
END_OF_OUTPUT_SIGNAL = "\n\r".freeze
|
|
8
|
+
|
|
9
|
+
self.summary = 'The repl listens to commands on standard input'
|
|
10
|
+
self.description = <<-DESC
|
|
11
|
+
The repl listens to commands on standard input and prints their
|
|
12
|
+
result to standard output.
|
|
13
|
+
It accepts all the other ipc subcommands. The repl will signal the
|
|
14
|
+
end of output with the the ASCII CR+LF `\\n\\r`.
|
|
15
|
+
DESC
|
|
16
|
+
|
|
17
|
+
def run
|
|
18
|
+
print_version
|
|
19
|
+
signal_end_of_output
|
|
20
|
+
listen
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def print_version
|
|
24
|
+
output_pipe.puts "version: '#{Pod::VERSION}'"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def signal_end_of_output
|
|
28
|
+
output_pipe.puts(END_OF_OUTPUT_SIGNAL)
|
|
29
|
+
STDOUT.flush
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def listen
|
|
33
|
+
while repl_command = STDIN.gets
|
|
34
|
+
execute_repl_command(repl_command)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def execute_repl_command(repl_command)
|
|
39
|
+
unless repl_command == '\n'
|
|
40
|
+
repl_commands = repl_command.split
|
|
41
|
+
subcommand = repl_commands.shift.capitalize
|
|
42
|
+
arguments = repl_commands
|
|
43
|
+
subcommand_class = Pod::Command::IPC.const_get(subcommand)
|
|
44
|
+
subcommand_class.new(CLAide::ARGV.new(arguments)).run
|
|
45
|
+
signal_end_of_output
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Pod
|
|
2
|
+
class Command
|
|
3
|
+
class IPC < Command
|
|
4
|
+
class Spec < IPC
|
|
5
|
+
self.summary = 'Converts a podspec to JSON'
|
|
6
|
+
self.description = 'Converts a podspec to JSON and prints it to STDOUT.'
|
|
7
|
+
self.arguments = [
|
|
8
|
+
CLAide::Argument.new('PATH', true),
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
def initialize(argv)
|
|
12
|
+
@path = argv.shift_argument
|
|
13
|
+
super
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def validate!
|
|
17
|
+
super
|
|
18
|
+
help! 'A specification path is required.' unless @path
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def run
|
|
22
|
+
require 'json'
|
|
23
|
+
spec = Specification.from_file(@path)
|
|
24
|
+
output_pipe.puts(spec.to_pretty_json)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Pod
|
|
2
|
+
class Command
|
|
3
|
+
class IPC < Command
|
|
4
|
+
class UpdateSearchIndex < IPC
|
|
5
|
+
self.summary = 'Updates the search index'
|
|
6
|
+
self.description = <<-DESC
|
|
7
|
+
Updates the search index and prints its path to standard output.
|
|
8
|
+
The search index is a YAML encoded dictionary where the keys
|
|
9
|
+
are the names of the Pods and the values are a dictionary containing
|
|
10
|
+
the following information:
|
|
11
|
+
- version
|
|
12
|
+
- summary
|
|
13
|
+
- description
|
|
14
|
+
- authors
|
|
15
|
+
DESC
|
|
16
|
+
|
|
17
|
+
def run
|
|
18
|
+
config.sources_manager.updated_search_index
|
|
19
|
+
output_pipe.puts(config.sources_manager.search_index_path)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
module Pod
|
|
2
|
+
class Command
|
|
3
|
+
class Lib < Command
|
|
4
|
+
class Create < Lib
|
|
5
|
+
self.summary = 'Creates a new Pod'
|
|
6
|
+
|
|
7
|
+
self.description = <<-DESC
|
|
8
|
+
Creates a scaffold for the development of a new Pod named `NAME`
|
|
9
|
+
according to the CocoaPods best practices.
|
|
10
|
+
If a `TEMPLATE_URL`, pointing to a git repo containing a compatible
|
|
11
|
+
template, is specified, it will be used in place of the default one.
|
|
12
|
+
DESC
|
|
13
|
+
|
|
14
|
+
self.arguments = [
|
|
15
|
+
CLAide::Argument.new('NAME', true),
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
def self.options
|
|
19
|
+
[
|
|
20
|
+
['--template-url=URL', 'The URL of the git repo containing a ' \
|
|
21
|
+
'compatible template'],
|
|
22
|
+
].concat(super)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def initialize(argv)
|
|
26
|
+
@name = argv.shift_argument
|
|
27
|
+
@template_url = argv.option('template-url', TEMPLATE_REPO)
|
|
28
|
+
super
|
|
29
|
+
@additional_args = argv.remainder!
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def validate!
|
|
33
|
+
super
|
|
34
|
+
help! 'A name for the Pod is required.' unless @name
|
|
35
|
+
help! 'The Pod name cannot contain spaces.' if @name =~ /\s/
|
|
36
|
+
help! 'The Pod name cannot contain plusses.' if @name =~ /\+/
|
|
37
|
+
help! "The Pod name cannot begin with a '.'" if @name[0, 1] == '.'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def run
|
|
41
|
+
clone_template
|
|
42
|
+
configure_template
|
|
43
|
+
print_info
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
|
|
48
|
+
#----------------------------------------#
|
|
49
|
+
|
|
50
|
+
# !@group Private helpers
|
|
51
|
+
|
|
52
|
+
extend Executable
|
|
53
|
+
executable :git
|
|
54
|
+
|
|
55
|
+
TEMPLATE_REPO = 'https://github.com/CocoaPods/pod-template.git'.freeze
|
|
56
|
+
TEMPLATE_INFO_URL = 'https://github.com/CocoaPods/pod-template'.freeze
|
|
57
|
+
CREATE_NEW_POD_INFO_URL = 'http://guides.cocoapods.org/making/making-a-cocoapod'.freeze
|
|
58
|
+
|
|
59
|
+
# Clones the template from the remote in the working directory using
|
|
60
|
+
# the name of the Pod.
|
|
61
|
+
#
|
|
62
|
+
# @return [void]
|
|
63
|
+
#
|
|
64
|
+
def clone_template
|
|
65
|
+
UI.section("Cloning `#{template_repo_url}` into `#{@name}`.") do
|
|
66
|
+
git! ['clone', template_repo_url, @name]
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Runs the template configuration utilities.
|
|
71
|
+
#
|
|
72
|
+
# @return [void]
|
|
73
|
+
#
|
|
74
|
+
def configure_template
|
|
75
|
+
UI.section("Configuring #{@name} template.") do
|
|
76
|
+
Dir.chdir(@name) do
|
|
77
|
+
if File.exist?('configure')
|
|
78
|
+
system({ 'COCOAPODS_VERSION' => Pod::VERSION }, './configure', @name, *@additional_args)
|
|
79
|
+
else
|
|
80
|
+
UI.warn 'Template does not have a configure file.'
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Runs the template configuration utilities.
|
|
87
|
+
#
|
|
88
|
+
# @return [void]
|
|
89
|
+
#
|
|
90
|
+
def print_info
|
|
91
|
+
UI.puts "\nTo learn more about the template see `#{template_repo_url}`."
|
|
92
|
+
UI.puts "To learn more about creating a new pod, see `#{CREATE_NEW_POD_INFO_URL}`."
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Checks if a template URL is given else returns the TEMPLATE_REPO URL
|
|
96
|
+
#
|
|
97
|
+
# @return String
|
|
98
|
+
#
|
|
99
|
+
def template_repo_url
|
|
100
|
+
@template_url || TEMPLATE_REPO
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
module Pod
|
|
2
|
+
class Command
|
|
3
|
+
class Lib < Command
|
|
4
|
+
class Lint < Lib
|
|
5
|
+
self.summary = 'Validates a Pod'
|
|
6
|
+
|
|
7
|
+
self.description = <<-DESC
|
|
8
|
+
Validates the Pod using the files in the working directory.
|
|
9
|
+
DESC
|
|
10
|
+
|
|
11
|
+
def self.options
|
|
12
|
+
[
|
|
13
|
+
['--quick', 'Lint skips checks that would require to download and build the spec'],
|
|
14
|
+
['--allow-warnings', 'Lint validates even if warnings are present'],
|
|
15
|
+
['--subspec=NAME', 'Lint validates only the given subspec'],
|
|
16
|
+
['--no-subspecs', 'Lint skips validation of subspecs'],
|
|
17
|
+
['--no-clean', 'Lint leaves the build directory intact for inspection'],
|
|
18
|
+
['--fail-fast', 'Lint stops on the first failing platform or subspec'],
|
|
19
|
+
['--use-libraries', 'Lint uses static libraries to install the spec'],
|
|
20
|
+
['--sources=https://github.com/artsy/Specs,master', 'The sources from which to pull dependent pods ' \
|
|
21
|
+
'(defaults to https://github.com/CocoaPods/Specs.git). ' \
|
|
22
|
+
'Multiple sources must be comma-delimited.'],
|
|
23
|
+
['--platforms=ios,macos', 'Lint against specific platforms' \
|
|
24
|
+
'(defaults to all platforms supported by the podspec).' \
|
|
25
|
+
'Multiple platforms must be comma-delimited'],
|
|
26
|
+
['--private', 'Lint skips checks that apply only to public specs'],
|
|
27
|
+
['--swift-version=VERSION', 'The SWIFT_VERSION that should be used to lint the spec. ' \
|
|
28
|
+
'This takes precedence over a .swift-version file.'],
|
|
29
|
+
['--skip-import-validation', 'Lint skips validating that the pod can be imported'],
|
|
30
|
+
['--skip-tests', 'Lint skips building and running tests during validation'],
|
|
31
|
+
].concat(super)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def initialize(argv)
|
|
35
|
+
@quick = argv.flag?('quick')
|
|
36
|
+
@allow_warnings = argv.flag?('allow-warnings')
|
|
37
|
+
@clean = argv.flag?('clean', true)
|
|
38
|
+
@fail_fast = argv.flag?('fail-fast', false)
|
|
39
|
+
@subspecs = argv.flag?('subspecs', true)
|
|
40
|
+
@only_subspec = argv.option('subspec')
|
|
41
|
+
@use_frameworks = !argv.flag?('use-libraries')
|
|
42
|
+
@source_urls = argv.option('sources', 'https://github.com/CocoaPods/Specs.git').split(',')
|
|
43
|
+
@platforms = argv.option('platforms', '').split(',')
|
|
44
|
+
@private = argv.flag?('private', false)
|
|
45
|
+
@swift_version = argv.option('swift-version', nil)
|
|
46
|
+
@skip_import_validation = argv.flag?('skip-import-validation', false)
|
|
47
|
+
@skip_tests = argv.flag?('skip-tests', false)
|
|
48
|
+
@podspecs_paths = argv.arguments!
|
|
49
|
+
super
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def validate!
|
|
53
|
+
super
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def run
|
|
57
|
+
UI.puts
|
|
58
|
+
podspecs_to_lint.each do |podspec|
|
|
59
|
+
validator = Validator.new(podspec, @source_urls, @platforms)
|
|
60
|
+
validator.local = true
|
|
61
|
+
validator.quick = @quick
|
|
62
|
+
validator.no_clean = !@clean
|
|
63
|
+
validator.fail_fast = @fail_fast
|
|
64
|
+
validator.allow_warnings = @allow_warnings
|
|
65
|
+
validator.no_subspecs = !@subspecs || @only_subspec
|
|
66
|
+
validator.only_subspec = @only_subspec
|
|
67
|
+
validator.use_frameworks = @use_frameworks
|
|
68
|
+
validator.ignore_public_only_results = @private
|
|
69
|
+
validator.swift_version = @swift_version
|
|
70
|
+
validator.skip_import_validation = @skip_import_validation
|
|
71
|
+
validator.skip_tests = @skip_tests
|
|
72
|
+
validator.validate
|
|
73
|
+
|
|
74
|
+
unless @clean
|
|
75
|
+
UI.puts "Pods workspace available at `#{validator.validation_dir}/App.xcworkspace` for inspection."
|
|
76
|
+
UI.puts
|
|
77
|
+
end
|
|
78
|
+
if validator.validated?
|
|
79
|
+
UI.puts "#{validator.spec.name} passed validation.".green
|
|
80
|
+
else
|
|
81
|
+
spec_name = podspec
|
|
82
|
+
spec_name = validator.spec.name if validator.spec
|
|
83
|
+
message = "#{spec_name} did not pass validation, due to #{validator.failure_reason}."
|
|
84
|
+
|
|
85
|
+
if @clean
|
|
86
|
+
message << "\nYou can use the `--no-clean` option to inspect " \
|
|
87
|
+
'any issue.'
|
|
88
|
+
end
|
|
89
|
+
raise Informative, message
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
private
|
|
95
|
+
|
|
96
|
+
#----------------------------------------#
|
|
97
|
+
|
|
98
|
+
# !@group Private helpers
|
|
99
|
+
|
|
100
|
+
# @return [Pathname] The path of the podspec found in the current
|
|
101
|
+
# working directory.
|
|
102
|
+
#
|
|
103
|
+
# @raise If no podspec is found.
|
|
104
|
+
# @raise If multiple podspecs are found.
|
|
105
|
+
#
|
|
106
|
+
def podspecs_to_lint
|
|
107
|
+
if !@podspecs_paths.empty?
|
|
108
|
+
Array(@podspecs_paths)
|
|
109
|
+
else
|
|
110
|
+
podspecs = Pathname.glob(Pathname.pwd + '*.podspec{.json,}')
|
|
111
|
+
if podspecs.count.zero?
|
|
112
|
+
raise Informative, 'Unable to find a podspec in the working ' \
|
|
113
|
+
'directory'
|
|
114
|
+
end
|
|
115
|
+
podspecs
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|