cocoapods 0.37.2 → 0.38.0.beta.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/CHANGELOG.md +136 -1
- data/lib/cocoapods.rb +0 -5
- data/lib/cocoapods/command.rb +3 -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/lib.rb +11 -4
- data/lib/cocoapods/command/list.rb +4 -4
- data/lib/cocoapods/command/outdated.rb +1 -10
- data/lib/cocoapods/command/project.rb +3 -2
- data/lib/cocoapods/command/spec.rb +0 -17
- data/lib/cocoapods/command/spec/cat.rb +1 -1
- data/lib/cocoapods/command/spec/create.rb +1 -0
- data/lib/cocoapods/command/spec/edit.rb +1 -1
- data/lib/cocoapods/command/spec/lint.rb +10 -4
- data/lib/cocoapods/config.rb +6 -0
- data/lib/cocoapods/downloader/cache.rb +48 -1
- data/lib/cocoapods/executable.rb +27 -6
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/copy_resources_script.rb +1 -0
- data/lib/cocoapods/generator/embed_frameworks_script.rb +23 -28
- data/lib/cocoapods/generator/header.rb +5 -1
- data/lib/cocoapods/generator/umbrella_header.rb +1 -1
- data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +139 -33
- data/lib/cocoapods/generator/xcconfig/private_pod_xcconfig.rb +2 -2
- data/lib/cocoapods/generator/xcconfig/xcconfig_helper.rb +3 -3
- data/lib/cocoapods/installer.rb +64 -109
- data/lib/cocoapods/installer/analyzer.rb +167 -336
- data/lib/cocoapods/installer/analyzer/analysis_result.rb +46 -0
- data/lib/cocoapods/installer/analyzer/specs_state.rb +76 -0
- data/lib/cocoapods/installer/analyzer/target_inspection_result.rb +41 -0
- data/lib/cocoapods/installer/analyzer/target_inspector.rb +203 -0
- data/lib/cocoapods/installer/file_references_installer.rb +48 -13
- data/lib/cocoapods/installer/podfile_validator.rb +86 -0
- data/lib/cocoapods/installer/{hooks_context.rb → post_install_hooks_context.rb} +3 -3
- data/lib/cocoapods/installer/pre_install_hooks_context.rb +41 -0
- data/lib/cocoapods/installer/target_installer.rb +1 -7
- data/lib/cocoapods/installer/target_installer/aggregate_target_installer.rb +15 -17
- data/lib/cocoapods/installer/target_installer/pod_target_installer.rb +4 -4
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +16 -16
- data/lib/cocoapods/sandbox/file_accessor.rb +20 -2
- data/lib/cocoapods/sandbox/path_list.rb +15 -13
- data/lib/cocoapods/sandbox/podspec_finder.rb +1 -0
- data/lib/cocoapods/sources_manager.rb +2 -0
- data/lib/cocoapods/target.rb +7 -37
- data/lib/cocoapods/target/aggregate_target.rb +25 -1
- data/lib/cocoapods/target/pod_target.rb +106 -10
- data/lib/cocoapods/user_interface.rb +26 -0
- data/lib/cocoapods/user_interface/error_report.rb +6 -0
- data/lib/cocoapods/validator.rb +22 -0
- metadata +21 -16
- data/lib/cocoapods/generator/target_environment_header.rb +0 -171
- data/lib/cocoapods/hooks/installer_representation.rb +0 -133
- data/lib/cocoapods/hooks/library_representation.rb +0 -93
- data/lib/cocoapods/hooks/pod_representation.rb +0 -70
@@ -1,171 +0,0 @@
|
|
1
|
-
require 'active_support/core_ext/string/strip'
|
2
|
-
|
3
|
-
module Pod
|
4
|
-
module Generator
|
5
|
-
# Generates a header which allows to inspect at compile time the installed
|
6
|
-
# pods and the installed specifications of a pod.
|
7
|
-
#
|
8
|
-
# Example output:
|
9
|
-
#
|
10
|
-
# #define COCOAPODS_POD_AVAILABLE_ObjectiveSugar 1
|
11
|
-
# #define COCOAPODS_VERSION_MAJOR_ObjectiveSugar 0
|
12
|
-
# #define COCOAPODS_VERSION_MINOR_ObjectiveSugar 6
|
13
|
-
# #define COCOAPODS_VERSION_PATCH_ObjectiveSugar 2
|
14
|
-
#
|
15
|
-
# Example usage:
|
16
|
-
#
|
17
|
-
# #ifdef COCOAPODS
|
18
|
-
# #ifdef COCOAPODS_POD_AVAILABLE_ObjectiveSugar
|
19
|
-
# #import "ObjectiveSugar.h"
|
20
|
-
# #endif
|
21
|
-
# #else
|
22
|
-
# // Non CocoaPods code
|
23
|
-
# #endif
|
24
|
-
#
|
25
|
-
class TargetEnvironmentHeader
|
26
|
-
# @return [Hash{String => LocalPod}] the specifications installed for
|
27
|
-
# the target by build configuration name.
|
28
|
-
#
|
29
|
-
attr_reader :specs_by_configuration
|
30
|
-
|
31
|
-
# @param [Array<Specification>] pods @see pods
|
32
|
-
#
|
33
|
-
def initialize(specs_by_configuration)
|
34
|
-
@specs_by_configuration = specs_by_configuration
|
35
|
-
end
|
36
|
-
|
37
|
-
# Generates the file contents.
|
38
|
-
#
|
39
|
-
# @return [void]
|
40
|
-
#
|
41
|
-
def generate
|
42
|
-
result = "\n#{notice}\n\n"
|
43
|
-
common_specs = common_specs(specs_by_configuration)
|
44
|
-
common_specs.each { |spec| result << spec_defines(spec) }
|
45
|
-
|
46
|
-
c99ext_identifier_method = Target.new.method(:c99ext_identifier)
|
47
|
-
|
48
|
-
specs_by_config = specs_scoped_by_configuration(common_specs, specs_by_configuration)
|
49
|
-
specs_by_config.each do |config, specs|
|
50
|
-
result << "// #{config} build configuration\n"
|
51
|
-
result << "#ifdef #{c99ext_identifier_method[config].upcase}\n\n"
|
52
|
-
specs.each { |spec| result << spec_defines(spec, 1) }
|
53
|
-
result << "#endif\n"
|
54
|
-
end
|
55
|
-
result
|
56
|
-
end
|
57
|
-
|
58
|
-
def save_as(path)
|
59
|
-
path.open('w') { |header| header.write(generate) }
|
60
|
-
end
|
61
|
-
|
62
|
-
private
|
63
|
-
|
64
|
-
# !@group Private Helpers
|
65
|
-
#-----------------------------------------------------------------------#
|
66
|
-
|
67
|
-
# @return [Array<Specification>] The list of the specifications present
|
68
|
-
# in all build configurations sorted by name.
|
69
|
-
#
|
70
|
-
# @param [Hash{String => Array<Specification>}] specs_by_configuration
|
71
|
-
# The specs grouped by build configuration.
|
72
|
-
#
|
73
|
-
def common_specs(specs_by_configuration)
|
74
|
-
result = specs_by_configuration.values.flatten.uniq
|
75
|
-
specs_by_configuration.values.each do |configuration_specs|
|
76
|
-
result &= configuration_specs
|
77
|
-
end
|
78
|
-
result.sort_by(&:name)
|
79
|
-
end
|
80
|
-
|
81
|
-
# @return [Hash{String => Array<Specification>}] The list of the
|
82
|
-
# specifications not present in all build configurations sorted
|
83
|
-
# by name and grouped by build configuration name.
|
84
|
-
#
|
85
|
-
# @param [Hash{String => Array<Specification>}] specs_by_configuration
|
86
|
-
# The specs grouped by build configuration.
|
87
|
-
#
|
88
|
-
def specs_scoped_by_configuration(common_specs, specs_by_configuration)
|
89
|
-
result = {}
|
90
|
-
specs_by_configuration.each do |configuration, all_specs|
|
91
|
-
specs = all_specs.sort_by(&:name) - common_specs
|
92
|
-
result[configuration] = specs unless specs.empty?
|
93
|
-
end
|
94
|
-
result
|
95
|
-
end
|
96
|
-
|
97
|
-
# @return The sanitized name of a specification to make it suitable to be
|
98
|
-
# used as part of an identifier of a define statement.
|
99
|
-
#
|
100
|
-
# @param [String] spec_name
|
101
|
-
# The name of the spec.
|
102
|
-
#
|
103
|
-
def safe_spec_name(spec_name)
|
104
|
-
spec_name.gsub(/[^\w]/, '_')
|
105
|
-
end
|
106
|
-
|
107
|
-
# @return [String]
|
108
|
-
#
|
109
|
-
def notice
|
110
|
-
<<-DOC.strip_heredoc
|
111
|
-
// To check if a library is compiled with CocoaPods you
|
112
|
-
// can use the `COCOAPODS` macro definition which is
|
113
|
-
// defined in the xcconfigs so it is available in
|
114
|
-
// headers also when they are imported in the client
|
115
|
-
// project.
|
116
|
-
DOC
|
117
|
-
end
|
118
|
-
|
119
|
-
# @return [String]
|
120
|
-
#
|
121
|
-
def spec_defines(spec, indent_count = 0)
|
122
|
-
spec_name = safe_spec_name(spec.name)
|
123
|
-
result = "// #{spec.name}\n"
|
124
|
-
result << "#define COCOAPODS_POD_AVAILABLE_#{spec_name}\n"
|
125
|
-
if spec.version.semantic?
|
126
|
-
result << semantic_version_defines(spec)
|
127
|
-
else
|
128
|
-
result << non_semantic_version_notice(spec)
|
129
|
-
end
|
130
|
-
result << "\n"
|
131
|
-
indent(result, indent_count)
|
132
|
-
end
|
133
|
-
|
134
|
-
def indent(string, indent_count)
|
135
|
-
indent = ' ' * (indent_count * 2)
|
136
|
-
lines = string.lines.map do |line|
|
137
|
-
if line == "\n"
|
138
|
-
line
|
139
|
-
else
|
140
|
-
"#{indent}#{line}"
|
141
|
-
end
|
142
|
-
end
|
143
|
-
lines.join
|
144
|
-
end
|
145
|
-
|
146
|
-
# @return [String]
|
147
|
-
#
|
148
|
-
def semantic_version_defines(spec)
|
149
|
-
spec_name = safe_spec_name(spec.name)
|
150
|
-
<<-DOC.strip_heredoc
|
151
|
-
#define COCOAPODS_VERSION_MAJOR_#{spec_name} #{spec.version.major}
|
152
|
-
#define COCOAPODS_VERSION_MINOR_#{spec_name} #{spec.version.minor}
|
153
|
-
#define COCOAPODS_VERSION_PATCH_#{spec_name} #{spec.version.patch}
|
154
|
-
DOC
|
155
|
-
end
|
156
|
-
|
157
|
-
# @return [String]
|
158
|
-
#
|
159
|
-
def non_semantic_version_notice(spec)
|
160
|
-
<<-DOC.strip_heredoc
|
161
|
-
// This library does not follow semantic-versioning,
|
162
|
-
// so we were not able to define version macros.
|
163
|
-
// Please contact the author.
|
164
|
-
// Version: #{spec.version}.
|
165
|
-
DOC
|
166
|
-
end
|
167
|
-
|
168
|
-
#-----------------------------------------------------------------------#
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
@@ -1,133 +0,0 @@
|
|
1
|
-
module Pod
|
2
|
-
# @todo: Remove by CocoaPods 1.0
|
3
|
-
#
|
4
|
-
class Podfile
|
5
|
-
def config
|
6
|
-
UI.warn 'Podfile#config is deprecated. The config is accessible from ' \
|
7
|
-
'the parameter passed to the hooks'
|
8
|
-
Config.instance
|
9
|
-
end
|
10
|
-
|
11
|
-
class TargetDefinition
|
12
|
-
def copy_resources_script_name
|
13
|
-
UI.warn 'TargetDefinition#copy_resources_script_name is deprecated. ' \
|
14
|
-
'The value is accessible directly from the representation of the ' \
|
15
|
-
'library using the #copy_resources_script_path method.'
|
16
|
-
Config.instance.sandbox.root + "#{label}-resources.sh"
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
module Hooks
|
22
|
-
# The installer representation to pass to the hooks.
|
23
|
-
#
|
24
|
-
class InstallerRepresentation
|
25
|
-
public
|
26
|
-
|
27
|
-
# @!group Public Hooks API
|
28
|
-
|
29
|
-
# @return [Pathname] The root of the sandbox.
|
30
|
-
#
|
31
|
-
def sandbox_root
|
32
|
-
installer.sandbox.root
|
33
|
-
end
|
34
|
-
|
35
|
-
# @return [Pod::Project] the `Pods/Pods.xcodeproj` project.
|
36
|
-
#
|
37
|
-
# @note This value is not yet set in the pre install callbacks.
|
38
|
-
#
|
39
|
-
def project
|
40
|
-
installer.pods_project
|
41
|
-
end
|
42
|
-
|
43
|
-
# @return [Array<PodRepresentation>] The representation of the Pods.
|
44
|
-
#
|
45
|
-
def pods
|
46
|
-
installer.pod_reps
|
47
|
-
end
|
48
|
-
|
49
|
-
# @return [Array<LibraryRepresentation>] The representation of the
|
50
|
-
# libraries.
|
51
|
-
#
|
52
|
-
def libraries
|
53
|
-
installer.library_reps
|
54
|
-
end
|
55
|
-
|
56
|
-
# @return [Hash{LibraryRepresentation => Array<Specification>}] The
|
57
|
-
# specifications grouped by target definition.
|
58
|
-
#
|
59
|
-
def specs_by_lib
|
60
|
-
result = {}
|
61
|
-
installer.aggregate_targets.each do |aggregate_target|
|
62
|
-
result[installer.library_rep(aggregate_target)] = aggregate_target.specs
|
63
|
-
end
|
64
|
-
result
|
65
|
-
end
|
66
|
-
|
67
|
-
# @return [Hash{LibraryRepresentation => Array<PodRepresentation>}] The
|
68
|
-
# local pod instances grouped by target.
|
69
|
-
#
|
70
|
-
def pods_by_lib
|
71
|
-
result = {}
|
72
|
-
installer.aggregate_targets.map(&:pod_targets).flatten.each do |lib|
|
73
|
-
pod_names = [lib.root_spec.name]
|
74
|
-
pod_reps = pods.select { |rep| pod_names.include?(rep.name) }
|
75
|
-
result[lib.target_definition] = pod_reps
|
76
|
-
end
|
77
|
-
result
|
78
|
-
end
|
79
|
-
|
80
|
-
#-----------------------------------------------------------------------#
|
81
|
-
|
82
|
-
public
|
83
|
-
|
84
|
-
# @!group Compatibility
|
85
|
-
#
|
86
|
-
# The following aliases provides compatibility with CP < 0.17
|
87
|
-
|
88
|
-
alias_method :target_installers, :libraries
|
89
|
-
alias_method :specs_by_target, :specs_by_lib
|
90
|
-
alias_method :local_pods_by_target, :pods_by_lib
|
91
|
-
|
92
|
-
#-----------------------------------------------------------------------#
|
93
|
-
|
94
|
-
public
|
95
|
-
|
96
|
-
# @!group Unsafe Hooks API
|
97
|
-
#
|
98
|
-
# The interface of the following objects might change at any time.
|
99
|
-
# If there some information which is needed, please open an issue.
|
100
|
-
|
101
|
-
# @return [Sandbox] sandbox the sandbox where the support files should
|
102
|
-
# be generated.
|
103
|
-
#
|
104
|
-
def sandbox
|
105
|
-
installer.sandbox
|
106
|
-
end
|
107
|
-
|
108
|
-
# @return [Config] The config singleton used for the installation.
|
109
|
-
#
|
110
|
-
def config
|
111
|
-
Config.instance
|
112
|
-
end
|
113
|
-
|
114
|
-
# @return [Installer] The installer described by this instance.
|
115
|
-
#
|
116
|
-
attr_reader :installer
|
117
|
-
|
118
|
-
#-----------------------------------------------------------------------#
|
119
|
-
|
120
|
-
# @!group Private implementation
|
121
|
-
|
122
|
-
# Initialize a new instance
|
123
|
-
#
|
124
|
-
# @param [Installer] installer @see installer
|
125
|
-
#
|
126
|
-
def initialize(installer)
|
127
|
-
@installer = installer
|
128
|
-
end
|
129
|
-
|
130
|
-
#-----------------------------------------------------------------------#
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
@@ -1,93 +0,0 @@
|
|
1
|
-
module Pod
|
2
|
-
module Hooks
|
3
|
-
class LibraryRepresentation
|
4
|
-
# Stores the information of the target installer
|
5
|
-
|
6
|
-
#-----------------------------------------------------------------------#
|
7
|
-
|
8
|
-
# @return [String] The name of the Pods library.
|
9
|
-
#
|
10
|
-
def name
|
11
|
-
library.name
|
12
|
-
end
|
13
|
-
|
14
|
-
# @return [Array<Dependency>] The dependencies of this library.
|
15
|
-
#
|
16
|
-
def dependencies
|
17
|
-
target_definition.dependencies
|
18
|
-
end
|
19
|
-
|
20
|
-
# @return [Pathname] The path of the Pods dir.
|
21
|
-
#
|
22
|
-
def sandbox_dir
|
23
|
-
sandbox.root
|
24
|
-
end
|
25
|
-
|
26
|
-
# @return [Pathname] The path of the prefix_header
|
27
|
-
#
|
28
|
-
def prefix_header_path
|
29
|
-
UI.warn 'LibraryRepresentation#prefix_header_path is deprecated. ' \
|
30
|
-
'Use the specification `prefix_header_contents` attribute.'
|
31
|
-
library.prefix_header_path
|
32
|
-
end
|
33
|
-
alias_method :prefix_header_filename, :prefix_header_path
|
34
|
-
|
35
|
-
# @return [Pathname] The path of the script used to copy the resources.
|
36
|
-
#
|
37
|
-
def copy_resources_script_path
|
38
|
-
library.copy_resources_script_path
|
39
|
-
end
|
40
|
-
|
41
|
-
# @return [Project] The Pods project of the sandbox.
|
42
|
-
#
|
43
|
-
def project
|
44
|
-
sandbox.project
|
45
|
-
end
|
46
|
-
|
47
|
-
# @return [TargetDefinition] The target definition of the library.
|
48
|
-
#
|
49
|
-
def target_definition
|
50
|
-
library.target_definition
|
51
|
-
end
|
52
|
-
|
53
|
-
#-----------------------------------------------------------------------#
|
54
|
-
|
55
|
-
public
|
56
|
-
|
57
|
-
# @!group Unsafe Hooks API
|
58
|
-
|
59
|
-
# @return [Sandbox] sandbox the sandbox where the support files should
|
60
|
-
# be generated.
|
61
|
-
#
|
62
|
-
attr_reader :sandbox
|
63
|
-
|
64
|
-
# @return [Target] The library whose target needs to be generated.
|
65
|
-
#
|
66
|
-
attr_reader :library
|
67
|
-
|
68
|
-
# @return [PBXNativeTarget] The target generated by the installation
|
69
|
-
# process.
|
70
|
-
#
|
71
|
-
def target
|
72
|
-
library.native_target
|
73
|
-
end
|
74
|
-
|
75
|
-
#-----------------------------------------------------------------------#
|
76
|
-
|
77
|
-
# @!group Private implementation
|
78
|
-
|
79
|
-
# Initialize a new instance
|
80
|
-
#
|
81
|
-
# @param [Sandbox] sandbox @see sandbox
|
82
|
-
# @param [Target] library @see library
|
83
|
-
#
|
84
|
-
def initialize(sandbox, library)
|
85
|
-
@sandbox = sandbox
|
86
|
-
@library = library
|
87
|
-
raise '[BUG]' unless library.is_a?(AggregateTarget)
|
88
|
-
end
|
89
|
-
|
90
|
-
#-----------------------------------------------------------------------#
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
module Pod
|
2
|
-
class Specification
|
3
|
-
def config
|
4
|
-
UI.warn "[#{name}] Specification#config is deprecated. The config is accessible from " \
|
5
|
-
'the parameter passed to the hooks'
|
6
|
-
Config.instance
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
module Hooks
|
11
|
-
# Stores the information of the Installer for the hooks
|
12
|
-
#
|
13
|
-
class PodRepresentation
|
14
|
-
# @return [String] the name of the pod
|
15
|
-
#
|
16
|
-
attr_accessor :name
|
17
|
-
|
18
|
-
# @return [Version] the version
|
19
|
-
#
|
20
|
-
def version
|
21
|
-
root_spec.version
|
22
|
-
end
|
23
|
-
|
24
|
-
# @return [Specification] the root spec
|
25
|
-
#
|
26
|
-
def root_spec
|
27
|
-
file_accessors.first.spec.root
|
28
|
-
end
|
29
|
-
|
30
|
-
# @return [Array<Specification>] the specs
|
31
|
-
#
|
32
|
-
def specs
|
33
|
-
file_accessors.map(&:spec).uniq
|
34
|
-
end
|
35
|
-
|
36
|
-
# @return [Pathname] the root path
|
37
|
-
#
|
38
|
-
def root
|
39
|
-
file_accessors.first.path_list.root
|
40
|
-
end
|
41
|
-
|
42
|
-
# @return [Array<Pathname>] the source files
|
43
|
-
#
|
44
|
-
def source_files
|
45
|
-
file_accessors.map(&:source_files).flatten.uniq
|
46
|
-
end
|
47
|
-
|
48
|
-
#-----------------------------------------------------------------------#
|
49
|
-
|
50
|
-
# @!group Private implementation
|
51
|
-
|
52
|
-
# @param [Installer] installer @see installer
|
53
|
-
#
|
54
|
-
def initialize(name, file_accessors)
|
55
|
-
@name = name
|
56
|
-
@file_accessors = file_accessors
|
57
|
-
end
|
58
|
-
|
59
|
-
def to_s
|
60
|
-
root_spec.to_s
|
61
|
-
end
|
62
|
-
|
63
|
-
private
|
64
|
-
|
65
|
-
attr_reader :file_accessors
|
66
|
-
|
67
|
-
#-----------------------------------------------------------------------#
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|