cocoapods 0.33.1 → 0.34.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +171 -46
- data/README.md +9 -9
- data/bin/pod +5 -5
- data/bin/sandbox-pod +2 -6
- data/lib/cocoapods.rb +4 -4
- data/lib/cocoapods/command.rb +12 -10
- data/lib/cocoapods/command/init.rb +12 -13
- data/lib/cocoapods/command/inter_process_communication.rb +6 -17
- data/lib/cocoapods/command/lib.rb +27 -24
- data/lib/cocoapods/command/list.rb +9 -9
- data/lib/cocoapods/command/outdated.rb +4 -9
- data/lib/cocoapods/command/project.rb +57 -19
- data/lib/cocoapods/command/push.rb +0 -1
- data/lib/cocoapods/command/repo.rb +14 -15
- data/lib/cocoapods/command/repo/push.rb +24 -19
- data/lib/cocoapods/command/search.rb +12 -13
- data/lib/cocoapods/command/setup.rb +10 -9
- data/lib/cocoapods/command/spec.rb +67 -63
- data/lib/cocoapods/config.rb +21 -54
- data/lib/cocoapods/downloader.rb +0 -1
- data/lib/cocoapods/executable.rb +3 -8
- data/lib/cocoapods/external_sources.rb +2 -4
- data/lib/cocoapods/external_sources/abstract_external_source.rb +15 -10
- data/lib/cocoapods/external_sources/downloader_source.rb +0 -2
- data/lib/cocoapods/external_sources/path_source.rb +1 -4
- data/lib/cocoapods/external_sources/podspec_source.rb +1 -3
- data/lib/cocoapods/gem_version.rb +1 -2
- data/lib/cocoapods/generator/acknowledgements.rb +5 -8
- data/lib/cocoapods/generator/acknowledgements/markdown.rb +5 -7
- data/lib/cocoapods/generator/acknowledgements/plist.rb +9 -10
- data/lib/cocoapods/generator/bridge_support.rb +1 -1
- data/lib/cocoapods/generator/copy_resources_script.rb +10 -14
- data/lib/cocoapods/generator/dummy_source.rb +3 -3
- data/lib/cocoapods/generator/prefix_header.rb +15 -16
- data/lib/cocoapods/generator/target_environment_header.rb +122 -36
- data/lib/cocoapods/generator/xcconfig.rb +0 -4
- data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +74 -65
- data/lib/cocoapods/generator/xcconfig/private_pod_xcconfig.rb +92 -95
- data/lib/cocoapods/generator/xcconfig/public_pod_xcconfig.rb +48 -51
- data/lib/cocoapods/generator/xcconfig/xcconfig_helper.rb +10 -10
- data/lib/cocoapods/hooks/installer_representation.rb +15 -18
- data/lib/cocoapods/hooks/library_representation.rb +4 -8
- data/lib/cocoapods/hooks/pod_representation.rb +1 -5
- data/lib/cocoapods/hooks_manager.rb +63 -0
- data/lib/cocoapods/installer.rb +60 -47
- data/lib/cocoapods/installer/analyzer.rb +60 -62
- data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +5 -8
- data/lib/cocoapods/installer/file_references_installer.rb +7 -10
- data/lib/cocoapods/installer/hooks_context.rb +74 -0
- data/lib/cocoapods/installer/migrator.rb +99 -0
- data/lib/cocoapods/installer/pod_source_installer.rb +9 -29
- data/lib/cocoapods/installer/target_installer.rb +7 -17
- data/lib/cocoapods/installer/target_installer/aggregate_target_installer.rb +40 -41
- data/lib/cocoapods/installer/target_installer/pod_target_installer.rb +43 -54
- data/lib/cocoapods/installer/user_project_integrator.rb +54 -10
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +66 -117
- data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +116 -0
- data/lib/cocoapods/open_uri.rb +1 -2
- data/lib/cocoapods/project.rb +34 -8
- data/lib/cocoapods/resolver.rb +43 -21
- data/lib/cocoapods/sandbox.rb +80 -75
- data/lib/cocoapods/sandbox/file_accessor.rb +3 -8
- data/lib/cocoapods/sandbox/headers_store.rb +6 -7
- data/lib/cocoapods/sandbox/path_list.rb +7 -10
- data/lib/cocoapods/sources_manager.rb +81 -49
- data/lib/cocoapods/target.rb +18 -12
- data/lib/cocoapods/target/aggregate_target.rb +43 -18
- data/lib/cocoapods/target/pod_target.rb +37 -4
- data/lib/cocoapods/user_interface.rb +19 -18
- data/lib/cocoapods/user_interface/error_report.rb +23 -4
- data/lib/cocoapods/validator.rb +30 -33
- metadata +100 -73
- data/lib/cocoapods/command/help.rb +0 -25
@@ -1,11 +1,9 @@
|
|
1
1
|
module Pod
|
2
2
|
class Installer
|
3
|
-
|
4
3
|
# Creates the targets which aggregate the Pods libraries in the Pods
|
5
4
|
# project and the relative support files.
|
6
5
|
#
|
7
6
|
class AggregateTargetInstaller < TargetInstaller
|
8
|
-
|
9
7
|
# Creates the target in the Pods project and the relative support files.
|
10
8
|
#
|
11
9
|
# @return [void]
|
@@ -13,6 +11,7 @@ module Pod
|
|
13
11
|
def install!
|
14
12
|
UI.message "- Installing target `#{library.name}` #{library.platform}" do
|
15
13
|
add_target
|
14
|
+
create_support_files_dir
|
16
15
|
create_suport_files_group
|
17
16
|
create_xcconfig_file
|
18
17
|
create_target_environment_header
|
@@ -27,21 +26,30 @@ module Pod
|
|
27
26
|
|
28
27
|
private
|
29
28
|
|
29
|
+
# Creates the group that holds the references to the support files
|
30
|
+
# generated by this installer.
|
31
|
+
#
|
32
|
+
# @return [void]
|
33
|
+
#
|
34
|
+
def create_suport_files_group
|
35
|
+
parent = project.support_files_group
|
36
|
+
name = library.name
|
37
|
+
dir = library.support_files_dir
|
38
|
+
@support_files_group = parent.new_group(name, dir)
|
39
|
+
end
|
40
|
+
|
30
41
|
# Generates the contents of the xcconfig file and saves it to disk.
|
31
42
|
#
|
32
43
|
# @return [void]
|
33
44
|
#
|
34
45
|
def create_xcconfig_file
|
35
|
-
|
36
|
-
|
37
|
-
gen = Generator::XCConfig::AggregateXCConfig.new(library)
|
46
|
+
target.build_configurations.each do |configuration|
|
47
|
+
path = library.xcconfig_path(configuration.name)
|
48
|
+
gen = Generator::XCConfig::AggregateXCConfig.new(library, configuration.name)
|
38
49
|
gen.save_as(path)
|
39
|
-
library.
|
50
|
+
library.xcconfigs[configuration.name] = gen.xcconfig
|
40
51
|
xcconfig_file_ref = add_file_to_support_group(path)
|
41
|
-
|
42
|
-
target.build_configurations.each do |c|
|
43
|
-
c.base_configuration_reference = xcconfig_file_ref
|
44
|
-
end
|
52
|
+
configuration.base_configuration_reference = xcconfig_file_ref
|
45
53
|
end
|
46
54
|
end
|
47
55
|
|
@@ -50,11 +58,9 @@ module Pod
|
|
50
58
|
#
|
51
59
|
def create_target_environment_header
|
52
60
|
path = library.target_environment_header_path
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
add_file_to_support_group(path)
|
57
|
-
end
|
61
|
+
generator = Generator::TargetEnvironmentHeader.new(library.specs_by_build_configuration)
|
62
|
+
generator.save_as(path)
|
63
|
+
add_file_to_support_group(path)
|
58
64
|
end
|
59
65
|
|
60
66
|
# Generates the bridge support metadata if requested by the {Podfile}.
|
@@ -68,13 +74,11 @@ module Pod
|
|
68
74
|
def create_bridge_support_file
|
69
75
|
if target_definition.podfile.generate_bridge_support?
|
70
76
|
path = library.bridge_support_path
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
@bridge_support_file = path.relative_path_from(sandbox.root)
|
77
|
-
end
|
77
|
+
headers = target.headers_build_phase.files.map { |bf| sandbox.root + bf.file_ref.path }
|
78
|
+
generator = Generator::BridgeSupport.new(headers)
|
79
|
+
generator.save_as(path)
|
80
|
+
add_file_to_support_group(path)
|
81
|
+
@bridge_support_file = path.relative_path_from(sandbox.root)
|
78
82
|
end
|
79
83
|
end
|
80
84
|
|
@@ -88,18 +92,16 @@ module Pod
|
|
88
92
|
#
|
89
93
|
def create_copy_resources_script
|
90
94
|
path = library.copy_resources_script_path
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
add_file_to_support_group(path)
|
102
|
-
end
|
95
|
+
file_accessors = library.pod_targets.map(&:file_accessors).flatten
|
96
|
+
resource_paths = file_accessors.map { |accessor| accessor.resources.flatten.map { |res| res.relative_path_from(project.path.dirname) } }.flatten
|
97
|
+
resource_bundles = file_accessors.map { |accessor| accessor.resource_bundles.keys.map { |name| "${BUILT_PRODUCTS_DIR}/#{name}.bundle" } }.flatten
|
98
|
+
resources = []
|
99
|
+
resources.concat(resource_paths)
|
100
|
+
resources.concat(resource_bundles)
|
101
|
+
resources << bridge_support_file if bridge_support_file
|
102
|
+
generator = Generator::CopyResourcesScript.new(resources, library.platform)
|
103
|
+
generator.save_as(path)
|
104
|
+
add_file_to_support_group(path)
|
103
105
|
end
|
104
106
|
|
105
107
|
# Generates the acknowledgement files (markdown and plist) for the target.
|
@@ -110,12 +112,10 @@ module Pod
|
|
110
112
|
basepath = library.acknowledgements_basepath
|
111
113
|
Generator::Acknowledgements.generators.each do |generator_class|
|
112
114
|
path = generator_class.path_from_basepath(basepath)
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
add_file_to_support_group(path)
|
118
|
-
end
|
115
|
+
file_accessors = library.pod_targets.map(&:file_accessors).flatten
|
116
|
+
generator = generator_class.new(file_accessors)
|
117
|
+
generator.save_as(path)
|
118
|
+
add_file_to_support_group(path)
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
@@ -127,7 +127,6 @@ module Pod
|
|
127
127
|
attr_reader :bridge_support_file
|
128
128
|
|
129
129
|
#-----------------------------------------------------------------------#
|
130
|
-
|
131
130
|
end
|
132
131
|
end
|
133
132
|
end
|
@@ -1,11 +1,9 @@
|
|
1
1
|
module Pod
|
2
2
|
class Installer
|
3
|
-
|
4
3
|
# Creates the target for the Pods libraries in the Pods project and the
|
5
4
|
# relative support files.
|
6
5
|
#
|
7
6
|
class PodTargetInstaller < TargetInstaller
|
8
|
-
|
9
7
|
# Creates the target in the Pods project and the relative support files.
|
10
8
|
#
|
11
9
|
# @return [void]
|
@@ -13,6 +11,7 @@ module Pod
|
|
13
11
|
def install!
|
14
12
|
UI.message "- Installing target `#{library.name}` #{library.platform}" do
|
15
13
|
add_target
|
14
|
+
create_support_files_dir
|
16
15
|
add_files_to_build_phases
|
17
16
|
add_resources_bundle_targets
|
18
17
|
create_xcconfig_file
|
@@ -34,17 +33,15 @@ module Pod
|
|
34
33
|
# @return [void]
|
35
34
|
#
|
36
35
|
def add_files_to_build_phases
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
target.add_file_references(other_file_refs, nil)
|
47
|
-
end
|
36
|
+
library.file_accessors.each do |file_accessor|
|
37
|
+
consumer = file_accessor.spec_consumer
|
38
|
+
flags = compiler_flags_for_consumer(consumer)
|
39
|
+
all_source_files = file_accessor.source_files
|
40
|
+
regular_source_files = all_source_files.reject { |sf| sf.extname == '.d' }
|
41
|
+
regular_file_refs = regular_source_files.map { |sf| project.reference_for_path(sf) }
|
42
|
+
target.add_file_references(regular_file_refs, flags)
|
43
|
+
other_file_refs = (all_source_files - regular_source_files).map { |sf| project.reference_for_path(sf) }
|
44
|
+
target.add_file_references(other_file_refs, nil)
|
48
45
|
end
|
49
46
|
end
|
50
47
|
|
@@ -56,24 +53,22 @@ module Pod
|
|
56
53
|
# @return [void]
|
57
54
|
#
|
58
55
|
def add_resources_bundle_targets
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
if bundle_target = project.targets.detect { |target| target.name == bundle_name }
|
64
|
-
target.add_dependency(bundle_target)
|
65
|
-
next
|
66
|
-
end
|
67
|
-
file_references = paths.map { |sf| project.reference_for_path(sf) }
|
68
|
-
bundle_target = project.new_resources_bundle(bundle_name, file_accessor.spec_consumer.platform_name)
|
69
|
-
bundle_target.add_resources(file_references)
|
70
|
-
|
71
|
-
library.user_build_configurations.each do |bc_name, type|
|
72
|
-
bundle_target.add_build_configuration(bc_name, type)
|
73
|
-
end
|
74
|
-
|
56
|
+
library.file_accessors.each do |file_accessor|
|
57
|
+
file_accessor.resource_bundles.each do |bundle_name, paths|
|
58
|
+
# Add a dependency on an existing Resource Bundle target if possible
|
59
|
+
if bundle_target = project.targets.find { |target| target.name == bundle_name }
|
75
60
|
target.add_dependency(bundle_target)
|
61
|
+
next
|
62
|
+
end
|
63
|
+
file_references = paths.map { |sf| project.reference_for_path(sf) }
|
64
|
+
bundle_target = project.new_resources_bundle(bundle_name, file_accessor.spec_consumer.platform_name)
|
65
|
+
bundle_target.add_resources(file_references)
|
66
|
+
|
67
|
+
library.user_build_configurations.each do |bc_name, type|
|
68
|
+
bundle_target.add_build_configuration(bc_name, type)
|
76
69
|
end
|
70
|
+
|
71
|
+
target.add_dependency(bundle_target)
|
77
72
|
end
|
78
73
|
end
|
79
74
|
end
|
@@ -85,20 +80,16 @@ module Pod
|
|
85
80
|
def create_xcconfig_file
|
86
81
|
path = library.xcconfig_path
|
87
82
|
public_gen = Generator::XCConfig::PublicPodXCConfig.new(library)
|
88
|
-
|
89
|
-
|
90
|
-
add_file_to_support_group(path)
|
91
|
-
end
|
83
|
+
public_gen.save_as(path)
|
84
|
+
add_file_to_support_group(path)
|
92
85
|
|
93
86
|
path = library.xcconfig_private_path
|
94
87
|
private_gen = Generator::XCConfig::PrivatePodXCConfig.new(library, public_gen.xcconfig)
|
95
|
-
|
96
|
-
|
97
|
-
xcconfig_file_ref = add_file_to_support_group(path)
|
88
|
+
private_gen.save_as(path)
|
89
|
+
xcconfig_file_ref = add_file_to_support_group(path)
|
98
90
|
|
99
|
-
|
100
|
-
|
101
|
-
end
|
91
|
+
target.build_configurations.each do |c|
|
92
|
+
c.base_configuration_reference = xcconfig_file_ref
|
102
93
|
end
|
103
94
|
end
|
104
95
|
|
@@ -110,22 +101,20 @@ module Pod
|
|
110
101
|
#
|
111
102
|
def create_prefix_header
|
112
103
|
path = library.prefix_header_path
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
c.build_settings['GCC_PREFIX_HEADER'] = relative_path.to_s
|
122
|
-
end
|
104
|
+
generator = Generator::PrefixHeader.new(library.file_accessors, library.platform)
|
105
|
+
generator.imports << library.target_environment_header_path.basename
|
106
|
+
generator.save_as(path)
|
107
|
+
add_file_to_support_group(path)
|
108
|
+
|
109
|
+
target.build_configurations.each do |c|
|
110
|
+
relative_path = path.relative_path_from(project.path.dirname)
|
111
|
+
c.build_settings['GCC_PREFIX_HEADER'] = relative_path.to_s
|
123
112
|
end
|
124
113
|
end
|
125
114
|
|
126
115
|
ENABLE_OBJECT_USE_OBJC_FROM = {
|
127
116
|
:ios => Version.new('6'),
|
128
|
-
:osx => Version.new('10.8')
|
117
|
+
:osx => Version.new('10.8'),
|
129
118
|
}
|
130
119
|
|
131
120
|
# Returns the compiler flags for the source files of the given specification.
|
@@ -174,9 +163,9 @@ module Pod
|
|
174
163
|
end
|
175
164
|
end
|
176
165
|
if target_definition.inhibits_warnings_for_pod?(consumer.spec.root.name)
|
177
|
-
flags << '-w -Xanalyzer -analyzer-disable-checker'
|
166
|
+
flags << '-w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode'
|
178
167
|
end
|
179
|
-
flags *
|
168
|
+
flags * ' '
|
180
169
|
end
|
181
170
|
|
182
171
|
# Adds a reference to the given file in the support group of this target.
|
@@ -188,12 +177,12 @@ module Pod
|
|
188
177
|
#
|
189
178
|
def add_file_to_support_group(path)
|
190
179
|
pod_name = library.pod_name
|
191
|
-
|
180
|
+
dir = library.support_files_dir
|
181
|
+
group = project.pod_support_files_group(pod_name, dir)
|
192
182
|
group.new_file(path)
|
193
183
|
end
|
194
184
|
|
195
185
|
#-----------------------------------------------------------------------#
|
196
|
-
|
197
186
|
end
|
198
187
|
end
|
199
188
|
end
|
@@ -6,13 +6,11 @@ require 'active_support/core_ext/array/conversions'
|
|
6
6
|
|
7
7
|
module Pod
|
8
8
|
class Installer
|
9
|
-
|
10
9
|
# The {UserProjectIntegrator} integrates the libraries generated by
|
11
10
|
# TargetDefinitions of the {Podfile} with their correspondent user
|
12
11
|
# projects.
|
13
12
|
#
|
14
13
|
class UserProjectIntegrator
|
15
|
-
|
16
14
|
autoload :TargetIntegrator, 'cocoapods/installer/user_project_integrator/target_integrator'
|
17
15
|
|
18
16
|
# @return [Podfile] the podfile that should be integrated with the user
|
@@ -62,6 +60,7 @@ module Pod
|
|
62
60
|
create_workspace
|
63
61
|
integrate_user_targets
|
64
62
|
warn_about_empty_podfile
|
63
|
+
warn_about_xcconfig_overrides
|
65
64
|
end
|
66
65
|
|
67
66
|
#-----------------------------------------------------------------------#
|
@@ -128,8 +127,30 @@ module Pod
|
|
128
127
|
# @return [void]
|
129
128
|
#
|
130
129
|
def warn_about_empty_podfile
|
131
|
-
if podfile.target_definitions.values.all?
|
132
|
-
UI.warn
|
130
|
+
if podfile.target_definitions.values.all?(&:empty?)
|
131
|
+
UI.warn '[!] The Podfile does not contain any dependencies.'
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
# Checks whether the settings of the CocoaPods generated xcconfig are
|
136
|
+
# overridden by the build configuration of a target and prints a
|
137
|
+
# warning to inform the user if needed.
|
138
|
+
#
|
139
|
+
def warn_about_xcconfig_overrides
|
140
|
+
targets.each do |aggregate_target|
|
141
|
+
aggregate_target.user_targets.each do |user_target|
|
142
|
+
user_target.build_configurations.each do |config|
|
143
|
+
xcconfig = aggregate_target.xcconfigs[config.name]
|
144
|
+
if xcconfig
|
145
|
+
xcconfig.to_hash.keys.each do |key|
|
146
|
+
target_value = config.build_settings[key]
|
147
|
+
if target_value && !target_value.include?('$(inherited)')
|
148
|
+
print_override_warning(aggregate_target, user_target, config, key)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
133
154
|
end
|
134
155
|
end
|
135
156
|
|
@@ -152,7 +173,7 @@ module Pod
|
|
152
173
|
project = user_project_paths.first.basename('.xcodeproj')
|
153
174
|
installation_root + "#{project}.xcworkspace"
|
154
175
|
else
|
155
|
-
raise Informative,
|
176
|
+
raise Informative, 'Could not automatically select an Xcode ' \
|
156
177
|
"workspace. Specify one in your Podfile like so:\n\n" \
|
157
178
|
" workspace 'path/to/Workspace.xcworkspace'\n"
|
158
179
|
end
|
@@ -164,18 +185,41 @@ module Pod
|
|
164
185
|
# @note Empty target definitions are ignored.
|
165
186
|
#
|
166
187
|
def user_project_paths
|
167
|
-
targets.map
|
168
|
-
target.user_project_path
|
169
|
-
end.compact.uniq
|
188
|
+
targets.map(&:user_project_path).compact.uniq
|
170
189
|
end
|
171
190
|
|
172
|
-
|
173
191
|
def targets_to_integrate
|
174
192
|
targets.reject { |target| target.target_definition.empty? }
|
175
193
|
end
|
176
194
|
|
177
|
-
|
195
|
+
# Prints a warning informing the user that a build configuration of
|
196
|
+
# the integrated target is overriding the CocoaPods build settings.
|
197
|
+
#
|
198
|
+
# @param [Target::AggregateTarget] aggregate_target
|
199
|
+
# The umbrella target.
|
200
|
+
#
|
201
|
+
# @param [XcodeProj::PBXNativeTarget] user_target
|
202
|
+
# The native target.
|
203
|
+
#
|
204
|
+
# @param [Xcodeproj::XCBuildConfiguration] config
|
205
|
+
# The build configuration.
|
206
|
+
#
|
207
|
+
# @param [String] key
|
208
|
+
# The key of the overridden build setting.
|
209
|
+
#
|
210
|
+
def print_override_warning(aggregate_target, user_target, config, key)
|
211
|
+
actions = [
|
212
|
+
'Use the `$(inherited)` flag, or',
|
213
|
+
'Remove the build settings from the target.',
|
214
|
+
]
|
215
|
+
message = "The `#{user_target.name} [#{config.name}]` " \
|
216
|
+
"target overrides the `#{key}` build setting defined in " \
|
217
|
+
"`#{aggregate_target.xcconfig_relative_path(config.name)}'. " \
|
218
|
+
'This can lead to problems with the CocoaPods installation'
|
219
|
+
UI.warn(message, actions)
|
220
|
+
end
|
178
221
|
|
222
|
+
#-----------------------------------------------------------------------#
|
179
223
|
end
|
180
224
|
end
|
181
225
|
end
|
@@ -3,11 +3,11 @@ require 'active_support/core_ext/string/inflections'
|
|
3
3
|
module Pod
|
4
4
|
class Installer
|
5
5
|
class UserProjectIntegrator
|
6
|
-
|
7
6
|
# This class is responsible for integrating the library generated by a
|
8
7
|
# {TargetDefinition} with its destination project.
|
9
8
|
#
|
10
9
|
class TargetIntegrator
|
10
|
+
autoload :XCConfigIntegrator, 'cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator'
|
11
11
|
|
12
12
|
# @return [Target] the target that should be integrated.
|
13
13
|
#
|
@@ -26,54 +26,17 @@ module Pod
|
|
26
26
|
# @return [void]
|
27
27
|
#
|
28
28
|
def integrate!
|
29
|
-
return if native_targets.empty?
|
30
29
|
UI.section(integration_message) do
|
31
|
-
|
32
|
-
|
33
|
-
add_copy_resources_script_phase
|
34
|
-
add_check_manifest_lock_script_phase
|
35
|
-
user_project.save
|
36
|
-
end
|
37
|
-
end
|
30
|
+
XCConfigIntegrator.integrate(target, native_targets)
|
31
|
+
update_to_cocoapods_0_34
|
38
32
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
target_uuids = target.user_target_uuids
|
44
|
-
native_targets = target_uuids.map do |uuid|
|
45
|
-
native_target = user_project.objects_by_uuid[uuid]
|
46
|
-
unless native_target
|
47
|
-
raise Informative, "[Bug] Unable to find the target with " \
|
48
|
-
"the `#{uuid}` UUID for the `#{target}` integration library"
|
49
|
-
end
|
50
|
-
native_target
|
33
|
+
unless native_targets_to_integrate.empty?
|
34
|
+
add_pods_library
|
35
|
+
add_copy_resources_script_phase
|
36
|
+
add_check_manifest_lock_script_phase
|
51
37
|
end
|
52
|
-
|
53
|
-
native_target.frameworks_build_phase.files.any? do |build_file|
|
54
|
-
file_ref = build_file.file_ref
|
55
|
-
file_ref &&
|
56
|
-
file_ref.isa == 'PBXFileReference' &&
|
57
|
-
file_ref.display_name == target.product_name
|
58
|
-
end
|
59
|
-
end
|
60
|
-
@native_targets = non_integrated
|
38
|
+
user_project.save
|
61
39
|
end
|
62
|
-
@native_targets
|
63
|
-
end
|
64
|
-
|
65
|
-
# Read the project from the disk to ensure that it is up to date as
|
66
|
-
# other TargetIntegrators might have modified it.
|
67
|
-
#
|
68
|
-
def user_project
|
69
|
-
@user_project ||= Xcodeproj::Project.open(target.user_project_path)
|
70
|
-
end
|
71
|
-
|
72
|
-
# Read the pods project from the disk to ensure that it is up to date as
|
73
|
-
# other TargetIntegrators might have modified it.
|
74
|
-
#
|
75
|
-
def pods_project
|
76
|
-
@pods_project ||= Xcodeproj::Project.open(target.sandbox.project_path)
|
77
40
|
end
|
78
41
|
|
79
42
|
# @return [String] a string representation suitable for debugging.
|
@@ -82,39 +45,25 @@ module Pod
|
|
82
45
|
"#<#{self.class} for target `#{target.label}'>"
|
83
46
|
end
|
84
47
|
|
85
|
-
#---------------------------------------------------------------------#
|
86
|
-
|
87
|
-
# @!group Integration steps
|
88
|
-
|
89
48
|
private
|
90
49
|
|
91
|
-
#
|
92
|
-
|
93
|
-
def spec_consumers
|
94
|
-
@spec_consumers ||= target.pod_targets.map(&:file_accessors).flatten.map(&:spec_consumer)
|
95
|
-
end
|
50
|
+
# @!group Integration steps
|
51
|
+
#---------------------------------------------------------------------#
|
96
52
|
|
97
|
-
#
|
98
|
-
# {TargetDefinition} to the build configurations of the targets that
|
99
|
-
# should be integrated.
|
100
|
-
#
|
101
|
-
# @note It also checks if any build setting of the build
|
102
|
-
# configurations overrides the `xcconfig` file and warns the
|
103
|
-
# user.
|
53
|
+
# Fixes the paths of the copy resource scripts.
|
104
54
|
#
|
105
|
-
# @todo
|
106
|
-
# the user.
|
55
|
+
# @todo This can be removed for CocoaPods 1.0
|
107
56
|
#
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
user_project.new_file(target.xcconfig_relative_path)
|
113
|
-
native_targets.each do |native_target|
|
114
|
-
check_overridden_build_settings(target.xcconfig, native_target)
|
115
|
-
native_target.build_configurations.each do |config|
|
116
|
-
config.base_configuration_reference = xcconfig
|
57
|
+
def update_to_cocoapods_0_34
|
58
|
+
phases = native_targets.map do |target|
|
59
|
+
target.shell_script_build_phases.select do |bp|
|
60
|
+
bp.name == 'Copy Pods Resources'
|
117
61
|
end
|
62
|
+
end.flatten
|
63
|
+
|
64
|
+
script_path = target.copy_resources_script_relative_path
|
65
|
+
phases.each do |phase|
|
66
|
+
phase.shell_script = %("#{script_path}"\n)
|
118
67
|
end
|
119
68
|
end
|
120
69
|
|
@@ -127,11 +76,11 @@ module Pod
|
|
127
76
|
#
|
128
77
|
def add_pods_library
|
129
78
|
frameworks = user_project.frameworks_group
|
130
|
-
|
79
|
+
native_targets_to_integrate.each do |native_target|
|
131
80
|
library = frameworks.files.select { |f| f.path == target.product_name }.first ||
|
132
81
|
frameworks.new_product_ref_for_target(target.name, :static_library)
|
133
82
|
unless native_target.frameworks_build_phase.files_references.include?(library)
|
134
|
-
|
83
|
+
native_target.frameworks_build_phase.add_file_reference(library)
|
135
84
|
end
|
136
85
|
end
|
137
86
|
end
|
@@ -143,12 +92,12 @@ module Pod
|
|
143
92
|
# @return [void]
|
144
93
|
#
|
145
94
|
def add_copy_resources_script_phase
|
146
|
-
phase_name =
|
147
|
-
|
148
|
-
phase = native_target.shell_script_build_phases.select { |bp| bp.name == phase_name }.first
|
149
|
-
|
150
|
-
|
151
|
-
phase.shell_script = %
|
95
|
+
phase_name = 'Copy Pods Resources'
|
96
|
+
native_targets_to_integrate.each do |native_target|
|
97
|
+
phase = native_target.shell_script_build_phases.select { |bp| bp.name == phase_name }.first
|
98
|
+
phase ||= native_target.new_shell_script_build_phase(phase_name)
|
99
|
+
script_path = target.copy_resources_script_relative_path
|
100
|
+
phase.shell_script = %("#{script_path}"\n)
|
152
101
|
phase.show_env_vars_in_log = '0'
|
153
102
|
end
|
154
103
|
end
|
@@ -164,7 +113,7 @@ module Pod
|
|
164
113
|
#
|
165
114
|
def add_check_manifest_lock_script_phase
|
166
115
|
phase_name = 'Check Pods Manifest.lock'
|
167
|
-
|
116
|
+
native_targets_to_integrate.each do |native_target|
|
168
117
|
next if native_target.shell_script_build_phases.any? { |phase| phase.name == phase_name }
|
169
118
|
phase = native_target.project.new(Xcodeproj::Project::Object::PBXShellScriptBuildPhase)
|
170
119
|
native_target.build_phases.unshift(phase)
|
@@ -182,56 +131,56 @@ module Pod
|
|
182
131
|
end
|
183
132
|
end
|
184
133
|
|
185
|
-
#---------------------------------------------------------------------#
|
186
|
-
|
187
|
-
# @!group Private helpers.
|
188
|
-
|
189
134
|
private
|
190
135
|
|
191
|
-
#
|
192
|
-
|
193
|
-
#
|
194
|
-
# @return [void]
|
195
|
-
#
|
196
|
-
def check_overridden_build_settings(xcconfig, native_target)
|
197
|
-
return unless xcconfig
|
136
|
+
# @!group Private helpers
|
137
|
+
#---------------------------------------------------------------------#
|
198
138
|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
139
|
+
# @return [Array<PBXNativeTarget>] The list of all the targets that
|
140
|
+
# match the given target.
|
141
|
+
#
|
142
|
+
def native_targets
|
143
|
+
@native_targets ||= target.user_targets(user_project)
|
144
|
+
end
|
203
145
|
|
204
|
-
|
205
|
-
|
206
|
-
|
146
|
+
# @return [Array<PBXNativeTarget>] The list of the targets
|
147
|
+
# that have not been integrated by past installations
|
148
|
+
# of
|
149
|
+
#
|
150
|
+
def native_targets_to_integrate
|
151
|
+
unless @native_targets_to_integrate
|
152
|
+
@native_targets_to_integrate = native_targets.reject do |native_target|
|
153
|
+
native_target.frameworks_build_phase.files.any? do |build_file|
|
154
|
+
file_ref = build_file.file_ref
|
155
|
+
file_ref &&
|
156
|
+
file_ref.isa == 'PBXFileReference' &&
|
157
|
+
file_ref.display_name == target.product_name
|
207
158
|
end
|
208
159
|
end
|
209
|
-
|
210
|
-
configs_by_overridden_key.each do |key, config_names|
|
211
|
-
name = "#{native_target.name} [#{config_names.join(' - ')}]"
|
212
|
-
actions = [
|
213
|
-
"Use the `$(inherited)` flag, or",
|
214
|
-
"Remove the build settings from the target."
|
215
|
-
]
|
216
|
-
UI.warn("The target `#{name}` overrides the `#{key}` build " \
|
217
|
-
"setting defined in `#{target.xcconfig_relative_path}'.",
|
218
|
-
actions)
|
219
|
-
end
|
220
160
|
end
|
161
|
+
@native_targets_to_integrate
|
162
|
+
end
|
163
|
+
|
164
|
+
# Read the project from the disk to ensure that it is up to date as
|
165
|
+
# other TargetIntegrators might have modified it.
|
166
|
+
#
|
167
|
+
def user_project
|
168
|
+
@user_project ||= Xcodeproj::Project.open(target.user_project_path)
|
169
|
+
end
|
170
|
+
|
171
|
+
# @return [Specification::Consumer] the consumer for the specifications.
|
172
|
+
#
|
173
|
+
def spec_consumers
|
174
|
+
@spec_consumers ||= target.pod_targets.map(&:file_accessors).flatten.map(&:spec_consumer)
|
221
175
|
end
|
222
176
|
|
223
177
|
# @return [String] the message that should be displayed for the target
|
224
178
|
# integration.
|
225
179
|
#
|
226
180
|
def integration_message
|
227
|
-
"Integrating
|
228
|
-
"
|
229
|
-
"into aggregate target #{target.name} " \
|
230
|
-
"of project #{UI.path target.user_project_path}."
|
181
|
+
"Integrating target `#{target.name}` " \
|
182
|
+
"(#{UI.path target.user_project_path} project)"
|
231
183
|
end
|
232
|
-
|
233
|
-
#---------------------------------------------------------------------#
|
234
|
-
|
235
184
|
end
|
236
185
|
end
|
237
186
|
end
|