cocoapods 1.5.3 → 1.6.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 +200 -0
- data/lib/cocoapods.rb +0 -1
- data/lib/cocoapods/command/init.rb +1 -1
- data/lib/cocoapods/command/install.rb +7 -0
- data/lib/cocoapods/command/lib/lint.rb +8 -1
- data/lib/cocoapods/command/outdated.rb +2 -7
- data/lib/cocoapods/command/repo/add.rb +1 -1
- data/lib/cocoapods/command/repo/list.rb +1 -1
- data/lib/cocoapods/command/repo/push.rb +17 -12
- data/lib/cocoapods/command/repo/remove.rb +1 -1
- data/lib/cocoapods/command/repo/update.rb +1 -1
- data/lib/cocoapods/command/setup.rb +1 -1
- data/lib/cocoapods/command/spec/create.rb +39 -39
- data/lib/cocoapods/command/spec/lint.rb +8 -1
- data/lib/cocoapods/config.rb +13 -2
- data/lib/cocoapods/downloader/cache.rb +1 -1
- data/lib/cocoapods/executable.rb +2 -2
- data/lib/cocoapods/external_sources.rb +7 -4
- data/lib/cocoapods/external_sources/abstract_external_source.rb +23 -13
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/acknowledgements/markdown.rb +6 -0
- data/lib/cocoapods/generator/acknowledgements/plist.rb +11 -0
- data/lib/cocoapods/generator/app_target_helper.rb +102 -16
- data/lib/cocoapods/generator/copy_resources_script.rb +6 -0
- data/lib/cocoapods/generator/dummy_source.rb +14 -5
- data/lib/cocoapods/generator/embed_frameworks_script.rb +13 -2
- data/lib/cocoapods/generator/header.rb +1 -1
- data/lib/cocoapods/generator/info_plist_file.rb +12 -4
- data/lib/cocoapods/generator/prefix_header.rb +2 -2
- data/lib/cocoapods/hooks_manager.rb +28 -17
- data/lib/cocoapods/installer.rb +103 -42
- data/lib/cocoapods/installer/analyzer.rb +362 -277
- data/lib/cocoapods/installer/analyzer/analysis_result.rb +52 -22
- data/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb +9 -6
- data/lib/cocoapods/installer/analyzer/pod_variant.rb +4 -5
- data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +3 -14
- data/lib/cocoapods/installer/analyzer/specs_state.rb +28 -4
- data/lib/cocoapods/installer/analyzer/target_inspection_result.rb +24 -16
- data/lib/cocoapods/installer/analyzer/target_inspector.rb +17 -11
- data/lib/cocoapods/installer/pod_source_installer.rb +31 -43
- data/lib/cocoapods/installer/post_install_hooks_context.rb +71 -46
- data/lib/cocoapods/installer/pre_install_hooks_context.rb +22 -13
- data/lib/cocoapods/installer/source_provider_hooks_context.rb +3 -1
- data/lib/cocoapods/installer/user_project_integrator.rb +0 -2
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +38 -28
- data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +44 -11
- data/lib/cocoapods/installer/xcode/pods_project_generator.rb +129 -119
- data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +25 -16
- data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +95 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +12 -45
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +277 -169
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +31 -24
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installation_result.rb +93 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +60 -69
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb +72 -0
- data/lib/cocoapods/installer/xcode/target_validator.rb +15 -9
- data/lib/cocoapods/project.rb +14 -14
- data/lib/cocoapods/resolver.rb +38 -50
- data/lib/cocoapods/sandbox.rb +22 -38
- data/lib/cocoapods/sandbox/file_accessor.rb +11 -6
- data/lib/cocoapods/sandbox/headers_store.rb +9 -8
- data/lib/cocoapods/sandbox/path_list.rb +5 -8
- data/lib/cocoapods/sources_manager.rb +1 -1
- data/lib/cocoapods/target.rb +92 -37
- data/lib/cocoapods/target/aggregate_target.rb +140 -84
- data/lib/cocoapods/target/build_settings.rb +1076 -0
- data/lib/cocoapods/target/pod_target.rb +198 -294
- data/lib/cocoapods/user_interface.rb +5 -0
- data/lib/cocoapods/validator.rb +133 -41
- metadata +18 -18
- data/lib/cocoapods/generator/xcconfig.rb +0 -13
- data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +0 -260
- data/lib/cocoapods/generator/xcconfig/pod_xcconfig.rb +0 -87
- data/lib/cocoapods/generator/xcconfig/xcconfig_helper.rb +0 -558
@@ -16,11 +16,11 @@ module Pod
|
|
16
16
|
# @return [Pathname] The root of the list whose files and directories
|
17
17
|
# are used to perform the matching operations.
|
18
18
|
#
|
19
|
-
|
19
|
+
attr_reader :root
|
20
20
|
|
21
21
|
# Initialize a new instance
|
22
22
|
#
|
23
|
-
# @param [Pathname] root
|
23
|
+
# @param [Pathname] root @see #root
|
24
24
|
#
|
25
25
|
def initialize(root)
|
26
26
|
root_dir = ActiveSupport::Multibyte::Unicode.normalize(root.to_s)
|
@@ -88,7 +88,8 @@ module Pod
|
|
88
88
|
# @return [Array<Pathname>]
|
89
89
|
#
|
90
90
|
def glob(patterns, options = {})
|
91
|
-
|
91
|
+
cache_key = options.merge(:patterns => patterns)
|
92
|
+
@glob_cache[cache_key] ||= relative_glob(patterns, options).map { |p| root.join(p) }
|
92
93
|
end
|
93
94
|
|
94
95
|
# The list of relative paths that are case insensitively matched by a
|
@@ -115,10 +116,6 @@ module Pod
|
|
115
116
|
def relative_glob(patterns, options = {})
|
116
117
|
return [] if patterns.empty?
|
117
118
|
|
118
|
-
cache_key = options.merge(:patterns => patterns)
|
119
|
-
cached_value = @glob_cache[cache_key]
|
120
|
-
return cached_value if cached_value
|
121
|
-
|
122
119
|
dir_pattern = options[:dir_pattern]
|
123
120
|
exclude_patterns = options[:exclude_patterns]
|
124
121
|
include_dirs = options[:include_dirs]
|
@@ -155,7 +152,7 @@ module Pod
|
|
155
152
|
exclude_options = { :dir_pattern => '**/*', :include_dirs => include_dirs }
|
156
153
|
list -= relative_glob(exclude_patterns, exclude_options)
|
157
154
|
end
|
158
|
-
|
155
|
+
list
|
159
156
|
end
|
160
157
|
|
161
158
|
#-----------------------------------------------------------------------#
|
@@ -31,7 +31,7 @@ module Pod
|
|
31
31
|
"named `#{name}`.\n"
|
32
32
|
message << "(#{e})\n" if Config.instance.verbose?
|
33
33
|
message << 'You can try adding it manually in ' \
|
34
|
-
|
34
|
+
"`#{Config.instance.repos_dir}` or via `pod repo add`."
|
35
35
|
raise Informative, message
|
36
36
|
ensure
|
37
37
|
UI.title_level = previous_title_level
|
data/lib/cocoapods/target.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'cocoapods/target/build_settings'
|
2
|
+
|
1
3
|
module Pod
|
2
4
|
# Model class which describes a Pods target.
|
3
5
|
#
|
@@ -7,6 +9,8 @@ module Pod
|
|
7
9
|
#
|
8
10
|
class Target
|
9
11
|
DEFAULT_VERSION = '1.0.0'.freeze
|
12
|
+
DEFAULT_NAME = 'Default'.freeze
|
13
|
+
DEFAULT_BUILD_CONFIGURATIONS = { 'Release' => :release, 'Debug' => :debug }.freeze
|
10
14
|
|
11
15
|
# @return [Sandbox] The sandbox where the Pods should be installed.
|
12
16
|
#
|
@@ -15,13 +19,43 @@ module Pod
|
|
15
19
|
# @return [Boolean] Whether the target needs to be implemented as a framework.
|
16
20
|
# Computed by analyzer.
|
17
21
|
#
|
18
|
-
|
22
|
+
attr_reader :host_requires_frameworks
|
19
23
|
alias_method :host_requires_frameworks?, :host_requires_frameworks
|
20
24
|
|
25
|
+
# @return [Hash{String=>Symbol}] A hash representing the user build
|
26
|
+
# configurations where each key corresponds to the name of a
|
27
|
+
# configuration and its value to its type (`:debug` or `:release`).
|
28
|
+
#
|
29
|
+
attr_reader :user_build_configurations
|
30
|
+
|
31
|
+
# @return [Array<String>] The value for the ARCHS build setting.
|
32
|
+
#
|
33
|
+
attr_reader :archs
|
34
|
+
|
35
|
+
# @return [Platform] the platform of this target.
|
36
|
+
#
|
37
|
+
attr_reader :platform
|
38
|
+
|
39
|
+
# @return [BuildSettings] the build settings for this target.
|
40
|
+
#
|
41
|
+
attr_reader :build_settings
|
42
|
+
|
21
43
|
# Initialize a new target
|
22
44
|
#
|
23
|
-
|
24
|
-
|
45
|
+
# @param [Sandbox] sandbox @see #sandbox
|
46
|
+
# @param [Boolean] host_requires_frameworks @see #host_requires_frameworks
|
47
|
+
# @param [Hash{String=>Symbol}] user_build_configurations @see #user_build_configurations
|
48
|
+
# @param [Array<String>] archs @see #archs
|
49
|
+
# @param [Platform] platform @see #platform
|
50
|
+
#
|
51
|
+
def initialize(sandbox, host_requires_frameworks, user_build_configurations, archs, platform)
|
52
|
+
@sandbox = sandbox
|
53
|
+
@host_requires_frameworks = host_requires_frameworks
|
54
|
+
@user_build_configurations = user_build_configurations
|
55
|
+
@archs = archs
|
56
|
+
@platform = platform
|
57
|
+
|
58
|
+
@build_settings = create_build_settings
|
25
59
|
end
|
26
60
|
|
27
61
|
# @return [String] the name of the library.
|
@@ -30,6 +64,40 @@ module Pod
|
|
30
64
|
label
|
31
65
|
end
|
32
66
|
|
67
|
+
alias to_s name
|
68
|
+
|
69
|
+
# @return [String] the label for the target.
|
70
|
+
#
|
71
|
+
def label
|
72
|
+
DEFAULT_NAME
|
73
|
+
end
|
74
|
+
|
75
|
+
# @return [String] The version associated with this target
|
76
|
+
#
|
77
|
+
def version
|
78
|
+
DEFAULT_VERSION
|
79
|
+
end
|
80
|
+
|
81
|
+
# @return [Boolean] Whether the target uses Swift code
|
82
|
+
#
|
83
|
+
def uses_swift?
|
84
|
+
false
|
85
|
+
end
|
86
|
+
|
87
|
+
# @return [Boolean] Whether the target should build a static framework.
|
88
|
+
#
|
89
|
+
def static_framework?
|
90
|
+
false
|
91
|
+
end
|
92
|
+
|
93
|
+
# @return [String] the name to use for the source code module constructed
|
94
|
+
# for this target, and which will be used to import the module in
|
95
|
+
# implementation source files.
|
96
|
+
#
|
97
|
+
def product_module_name
|
98
|
+
c99ext_identifier(label)
|
99
|
+
end
|
100
|
+
|
33
101
|
# @return [String] the name of the product.
|
34
102
|
#
|
35
103
|
def product_name
|
@@ -85,6 +153,8 @@ module Pod
|
|
85
153
|
|
86
154
|
#-------------------------------------------------------------------------#
|
87
155
|
|
156
|
+
# @!group Framework support
|
157
|
+
|
88
158
|
# @return [Boolean] whether the generated target needs to be implemented
|
89
159
|
# as a framework
|
90
160
|
#
|
@@ -92,33 +162,6 @@ module Pod
|
|
92
162
|
host_requires_frameworks? || false
|
93
163
|
end
|
94
164
|
|
95
|
-
# @return [Boolean] Whether the target should build a static framework.
|
96
|
-
#
|
97
|
-
def static_framework?
|
98
|
-
return if is_a?(Pod::AggregateTarget)
|
99
|
-
return if specs.empty?
|
100
|
-
specs.all? { |spec| spec.root.static_framework }
|
101
|
-
end
|
102
|
-
|
103
|
-
#-------------------------------------------------------------------------#
|
104
|
-
|
105
|
-
# @!group Information storage
|
106
|
-
|
107
|
-
# @return [Hash{String=>Symbol}] A hash representing the user build
|
108
|
-
# configurations where each key corresponds to the name of a
|
109
|
-
# configuration and its value to its type (`:debug` or `:release`).
|
110
|
-
#
|
111
|
-
attr_accessor :user_build_configurations
|
112
|
-
|
113
|
-
# @return [PBXNativeTarget] the target generated in the Pods project for
|
114
|
-
# this library.
|
115
|
-
#
|
116
|
-
attr_accessor :native_target
|
117
|
-
|
118
|
-
# @return [Array<String>] The value for the ARCHS build setting.
|
119
|
-
#
|
120
|
-
attr_accessor :archs
|
121
|
-
|
122
165
|
#-------------------------------------------------------------------------#
|
123
166
|
|
124
167
|
# @!group Support files
|
@@ -153,10 +196,24 @@ module Pod
|
|
153
196
|
module_map_path.parent + "#{label}-umbrella.h"
|
154
197
|
end
|
155
198
|
|
199
|
+
def umbrella_header_path_to_write
|
200
|
+
module_map_path_to_write.parent + "#{label}-umbrella.h"
|
201
|
+
end
|
202
|
+
|
156
203
|
# @return [Pathname] the absolute path of the LLVM module map file that
|
157
204
|
# defines the module structure for the compiler.
|
158
205
|
#
|
159
206
|
def module_map_path
|
207
|
+
module_map_path_to_write
|
208
|
+
end
|
209
|
+
|
210
|
+
# @!private
|
211
|
+
#
|
212
|
+
# @return [Pathname] the absolute path of the module map file that
|
213
|
+
# CocoaPods writes. This can be different from `module_map_path`
|
214
|
+
# if the module map gets symlinked.
|
215
|
+
#
|
216
|
+
def module_map_path_to_write
|
160
217
|
basename = "#{label}.modulemap"
|
161
218
|
support_files_dir + basename
|
162
219
|
end
|
@@ -170,7 +227,7 @@ module Pod
|
|
170
227
|
# @return [Pathname] the absolute path of the Info.plist file.
|
171
228
|
#
|
172
229
|
def info_plist_path
|
173
|
-
support_files_dir +
|
230
|
+
support_files_dir + "#{label}-Info.plist"
|
174
231
|
end
|
175
232
|
|
176
233
|
# @return [Pathname] the path of the dummy source generated by CocoaPods
|
@@ -179,12 +236,6 @@ module Pod
|
|
179
236
|
support_files_dir + "#{label}-dummy.m"
|
180
237
|
end
|
181
238
|
|
182
|
-
# @return [String] The version associated with this target
|
183
|
-
#
|
184
|
-
def version
|
185
|
-
DEFAULT_VERSION
|
186
|
-
end
|
187
|
-
|
188
239
|
#-------------------------------------------------------------------------#
|
189
240
|
|
190
241
|
private
|
@@ -202,5 +253,9 @@ module Pod
|
|
202
253
|
def c99ext_identifier(name)
|
203
254
|
name.gsub(/^([0-9])/, '_\1').gsub(/[^a-zA-Z0-9_]/, '_')
|
204
255
|
end
|
256
|
+
|
257
|
+
def create_build_settings
|
258
|
+
BuildSettings.new(self)
|
259
|
+
end
|
205
260
|
end
|
206
261
|
end
|
@@ -3,30 +3,109 @@ module Pod
|
|
3
3
|
# of the single Pods. The client targets will then depend on this one.
|
4
4
|
#
|
5
5
|
class AggregateTarget < Target
|
6
|
+
# Product types where the product's frameworks must be embedded in a host target
|
7
|
+
#
|
8
|
+
EMBED_FRAMEWORKS_IN_HOST_TARGET_TYPES = [:app_extension, :framework, :static_library, :messages_extension, :watch_extension, :xpc_service].freeze
|
9
|
+
|
6
10
|
# @return [TargetDefinition] the target definition of the Podfile that
|
7
11
|
# generated this target.
|
12
|
+
#
|
8
13
|
attr_reader :target_definition
|
9
14
|
|
10
|
-
#
|
15
|
+
# @return [Pathname] the folder where the client is stored used for
|
16
|
+
# computing the relative paths. If integrating it should be the
|
17
|
+
# folder where the user project is stored, otherwise it should
|
18
|
+
# be the installation root.
|
11
19
|
#
|
12
|
-
|
20
|
+
attr_reader :client_root
|
13
21
|
|
14
|
-
#
|
22
|
+
# @return [Xcodeproj::Project] the user project that this target will
|
23
|
+
# integrate as identified by the analyzer.
|
15
24
|
#
|
16
|
-
|
17
|
-
|
25
|
+
attr_reader :user_project
|
26
|
+
|
27
|
+
# @return [Array<String>] the list of the UUIDs of the user targets that
|
28
|
+
# will be integrated by this target as identified by the analyzer.
|
29
|
+
#
|
30
|
+
# @note The target instances are not stored to prevent editing different
|
31
|
+
# instances.
|
32
|
+
#
|
33
|
+
attr_reader :user_target_uuids
|
34
|
+
|
35
|
+
# @return [Hash<String, Xcodeproj::Config>] Map from configuration name to
|
36
|
+
# configuration file for the target
|
37
|
+
#
|
38
|
+
# @note The configurations are generated by the {TargetInstaller} and
|
39
|
+
# used by {UserProjectIntegrator} to check for any overridden
|
40
|
+
# values.
|
18
41
|
#
|
19
|
-
|
20
|
-
|
21
|
-
|
42
|
+
attr_reader :xcconfigs
|
43
|
+
|
44
|
+
# @return [Array<PodTarget>] The dependencies for this target.
|
45
|
+
#
|
46
|
+
attr_reader :pod_targets
|
47
|
+
|
48
|
+
# @return [Array<AggregateTarget>] The aggregate targets whose pods this
|
49
|
+
# target must be able to import, but will not directly link against.
|
50
|
+
#
|
51
|
+
attr_reader :search_paths_aggregate_targets
|
52
|
+
|
53
|
+
# Initialize a new instance
|
54
|
+
#
|
55
|
+
# @param [Sandbox] sandbox @see Target#sandbox
|
56
|
+
# @param [Boolean] host_requires_frameworks @see Target#host_requires_frameworks
|
57
|
+
# @param [Hash{String=>Symbol}] user_build_configurations @see Target#user_build_configurations
|
58
|
+
# @param [Array<String>] archs @see Target#archs
|
59
|
+
# @param [Platform] platform @see #Target#platform
|
60
|
+
# @param [TargetDefinition] target_definition @see #target_definition
|
61
|
+
# @param [Pathname] client_root @see #client_root
|
62
|
+
# @param [Xcodeproj::Project] user_project @see #user_project
|
63
|
+
# @param [Array<String>] user_target_uuids @see #user_target_uuids
|
64
|
+
# @param [Hash{String=>Array<PodTarget>}] pod_targets_for_build_configuration @see #pod_targets_for_build_configuration
|
65
|
+
#
|
66
|
+
def initialize(sandbox, host_requires_frameworks, user_build_configurations, archs, platform, target_definition,
|
67
|
+
client_root, user_project, user_target_uuids, pod_targets_for_build_configuration)
|
68
|
+
super(sandbox, host_requires_frameworks, user_build_configurations, archs, platform)
|
69
|
+
raise "Can't initialize an AggregateTarget without a TargetDefinition!" if target_definition.nil?
|
70
|
+
raise "Can't initialize an AggregateTarget with an abstract TargetDefinition!" if target_definition.abstract?
|
22
71
|
@target_definition = target_definition
|
23
|
-
@
|
24
|
-
@
|
72
|
+
@client_root = client_root
|
73
|
+
@user_project = user_project
|
74
|
+
@user_target_uuids = user_target_uuids
|
75
|
+
@pod_targets_for_build_configuration = pod_targets_for_build_configuration
|
76
|
+
@pod_targets = pod_targets_for_build_configuration.values.flatten.uniq
|
25
77
|
@search_paths_aggregate_targets = []
|
26
|
-
@file_accessors = []
|
27
78
|
@xcconfigs = {}
|
28
79
|
end
|
29
80
|
|
81
|
+
# Merges this aggregate target with additional pod targets that are part of embedded aggregate targets.
|
82
|
+
#
|
83
|
+
# @param [Hash{String=>Array<PodTarget>}] embedded_pod_targets_for_build_configuration
|
84
|
+
# The pod targets to merge with.
|
85
|
+
#
|
86
|
+
# @return [AggregateTarget] a new instance of this aggregate target with additional pod targets to be used from
|
87
|
+
# pod targets of embedded aggregate targets.
|
88
|
+
#
|
89
|
+
def merge_embedded_pod_targets(embedded_pod_targets_for_build_configuration)
|
90
|
+
merged = @pod_targets_for_build_configuration.merge(embedded_pod_targets_for_build_configuration) do |_, before, after|
|
91
|
+
(before + after).uniq
|
92
|
+
end
|
93
|
+
AggregateTarget.new(sandbox, host_requires_frameworks, user_build_configurations, archs, platform,
|
94
|
+
target_definition, client_root, user_project, user_target_uuids, merged).tap do |aggregate_target|
|
95
|
+
aggregate_target.search_paths_aggregate_targets.concat(search_paths_aggregate_targets).freeze
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def build_settings(configuration_name = nil)
|
100
|
+
if configuration_name
|
101
|
+
@build_settings[configuration_name] ||
|
102
|
+
raise(ArgumentError, "#{self} does not contain a build setting for the #{configuration_name.inspect} configuration, only #{@build_settings.keys.inspect}")
|
103
|
+
else
|
104
|
+
@build_settings.each_value.first ||
|
105
|
+
raise(ArgumentError, "#{self} does not contain any build settings")
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
30
109
|
# @return [Boolean] True if the user_target refers to a
|
31
110
|
# library (framework, static or dynamic lib).
|
32
111
|
#
|
@@ -61,38 +140,12 @@ module Pod
|
|
61
140
|
target_definition.label.to_s
|
62
141
|
end
|
63
142
|
|
64
|
-
# @return [String] the name to use for the source code module constructed
|
65
|
-
# for this target, and which will be used to import the module in
|
66
|
-
# implementation source files.
|
67
|
-
#
|
68
|
-
def product_module_name
|
69
|
-
c99ext_identifier(label)
|
70
|
-
end
|
71
|
-
|
72
|
-
# @return [Platform] the platform for this target.
|
73
|
-
#
|
74
|
-
def platform
|
75
|
-
@platform ||= target_definition.platform
|
76
|
-
end
|
77
|
-
|
78
143
|
# @return [Podfile] The podfile which declares the dependency
|
79
144
|
#
|
80
145
|
def podfile
|
81
146
|
target_definition.podfile
|
82
147
|
end
|
83
148
|
|
84
|
-
# @return [Pathname] the folder where the client is stored used for
|
85
|
-
# computing the relative paths. If integrating it should be the
|
86
|
-
# folder where the user project is stored, otherwise it should
|
87
|
-
# be the installation root.
|
88
|
-
#
|
89
|
-
attr_accessor :client_root
|
90
|
-
|
91
|
-
# @return [Xcodeproj::Project] the user project that this target will
|
92
|
-
# integrate as identified by the analyzer.
|
93
|
-
#
|
94
|
-
attr_accessor :user_project
|
95
|
-
|
96
149
|
# @return [Pathname] the path of the user project that this target will
|
97
150
|
# integrate as identified by the analyzer.
|
98
151
|
#
|
@@ -100,14 +153,6 @@ module Pod
|
|
100
153
|
user_project.path if user_project
|
101
154
|
end
|
102
155
|
|
103
|
-
# @return [Array<String>] the list of the UUIDs of the user targets that
|
104
|
-
# will be integrated by this target as identified by the analyzer.
|
105
|
-
#
|
106
|
-
# @note The target instances are not stored to prevent editing different
|
107
|
-
# instances.
|
108
|
-
#
|
109
|
-
attr_accessor :user_target_uuids
|
110
|
-
|
111
156
|
# List all user targets that will be integrated by this #target.
|
112
157
|
#
|
113
158
|
# @return [Array<PBXNativeTarget>]
|
@@ -124,24 +169,6 @@ module Pod
|
|
124
169
|
end
|
125
170
|
end
|
126
171
|
|
127
|
-
# @return [Hash<String, Xcodeproj::Config>] Map from configuration name to
|
128
|
-
# configuration file for the target
|
129
|
-
#
|
130
|
-
# @note The configurations are generated by the {TargetInstaller} and
|
131
|
-
# used by {UserProjectIntegrator} to check for any overridden
|
132
|
-
# values.
|
133
|
-
#
|
134
|
-
attr_reader :xcconfigs
|
135
|
-
|
136
|
-
# @return [Array<PodTarget>] The dependencies for this target.
|
137
|
-
#
|
138
|
-
attr_accessor :pod_targets
|
139
|
-
|
140
|
-
# @return [Array<AggregateTarget>] The aggregate targets whose pods this
|
141
|
-
# target must be able to import, but will not directly link against.
|
142
|
-
#
|
143
|
-
attr_reader :search_paths_aggregate_targets
|
144
|
-
|
145
172
|
# @param [String] build_configuration The build configuration for which the
|
146
173
|
# the pod targets should be returned.
|
147
174
|
#
|
@@ -149,14 +176,7 @@ module Pod
|
|
149
176
|
# configuration.
|
150
177
|
#
|
151
178
|
def pod_targets_for_build_configuration(build_configuration)
|
152
|
-
@pod_targets_for_build_configuration
|
153
|
-
@pod_targets_for_build_configuration[build_configuration] ||= pod_targets.select do |pod_target|
|
154
|
-
pod_target.include_in_build_config?(target_definition, build_configuration)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
def pod_targets_to_link
|
159
|
-
@pod_targets_to_link ||= pod_targets.to_set - search_paths_aggregate_targets.flat_map(&:pod_targets)
|
179
|
+
@pod_targets_for_build_configuration[build_configuration] || []
|
160
180
|
end
|
161
181
|
|
162
182
|
# @return [Array<Specification>] The specifications used by this aggregate target.
|
@@ -189,6 +209,19 @@ module Pod
|
|
189
209
|
pod_targets.any?(&:uses_swift?)
|
190
210
|
end
|
191
211
|
|
212
|
+
# @return [Boolean] Whether the target contains any resources
|
213
|
+
#
|
214
|
+
def includes_resources?
|
215
|
+
!resource_paths_by_config.values.all?(&:empty?)
|
216
|
+
end
|
217
|
+
|
218
|
+
# @return [Boolean] Whether the target contains framework to be embedded into
|
219
|
+
# the user target
|
220
|
+
#
|
221
|
+
def includes_frameworks?
|
222
|
+
!framework_paths_by_config.values.all?(&:empty?)
|
223
|
+
end
|
224
|
+
|
192
225
|
# @return [Hash{String => Array<Hash{Symbol => [String]}>}] The vendored dynamic artifacts and framework target
|
193
226
|
# input and output paths grouped by config
|
194
227
|
#
|
@@ -197,7 +230,10 @@ module Pod
|
|
197
230
|
framework_paths_by_config = {}
|
198
231
|
user_build_configurations.keys.each do |config|
|
199
232
|
relevant_pod_targets = pod_targets_for_build_configuration(config)
|
200
|
-
framework_paths_by_config[config] = relevant_pod_targets.flat_map
|
233
|
+
framework_paths_by_config[config] = relevant_pod_targets.flat_map do |pod_target|
|
234
|
+
non_test_specs = pod_target.non_test_specs.map(&:name)
|
235
|
+
pod_target.framework_paths.values_at(*non_test_specs).flatten.compact.uniq
|
236
|
+
end
|
201
237
|
end
|
202
238
|
framework_paths_by_config
|
203
239
|
end
|
@@ -211,8 +247,12 @@ module Pod
|
|
211
247
|
pod_target.should_build? && pod_target.requires_frameworks? && !pod_target.static_framework?
|
212
248
|
end
|
213
249
|
user_build_configurations.keys.each_with_object({}) do |config, resources_by_config|
|
214
|
-
|
215
|
-
|
250
|
+
targets = relevant_pod_targets & pod_targets_for_build_configuration(config)
|
251
|
+
resources_by_config[config] = targets.flat_map do |pod_target|
|
252
|
+
non_test_specs = pod_target.non_test_specs.map(&:name)
|
253
|
+
resource_paths = pod_target.resource_paths.values_at(*non_test_specs).flatten
|
254
|
+
resource_paths << bridge_support_file
|
255
|
+
resource_paths.compact.uniq
|
216
256
|
end
|
217
257
|
end
|
218
258
|
end
|
@@ -256,11 +296,17 @@ module Pod
|
|
256
296
|
"$(DERIVED_FILE_DIR)/#{label}-checkManifestLockResult.txt"
|
257
297
|
end
|
258
298
|
|
299
|
+
# @return [Pathname] The relative path of the Pods directory from user project's directory.
|
300
|
+
#
|
301
|
+
def relative_pods_root_path
|
302
|
+
sandbox.root.relative_path_from(client_root)
|
303
|
+
end
|
304
|
+
|
259
305
|
# @return [String] The xcconfig path of the root from the `$(SRCROOT)`
|
260
306
|
# variable of the user's project.
|
261
307
|
#
|
262
308
|
def relative_pods_root
|
263
|
-
"${SRCROOT}/#{
|
309
|
+
"${SRCROOT}/#{relative_pods_root_path}"
|
264
310
|
end
|
265
311
|
|
266
312
|
# @return [String] The path of the Podfile directory relative to the
|
@@ -278,21 +324,21 @@ module Pod
|
|
278
324
|
# the user project.
|
279
325
|
#
|
280
326
|
def xcconfig_relative_path(config_name)
|
281
|
-
|
327
|
+
xcconfig_path(config_name).relative_path_from(client_root).to_s
|
282
328
|
end
|
283
329
|
|
284
330
|
# @return [String] The path of the copy resources script relative to the
|
285
|
-
# root of the
|
331
|
+
# root of the Pods project.
|
286
332
|
#
|
287
333
|
def copy_resources_script_relative_path
|
288
|
-
"${
|
334
|
+
"${PODS_ROOT}/#{relative_to_pods_root(copy_resources_script_path)}"
|
289
335
|
end
|
290
336
|
|
291
337
|
# @return [String] The path of the embed frameworks relative to the
|
292
|
-
# root of the
|
338
|
+
# root of the Pods project.
|
293
339
|
#
|
294
340
|
def embed_frameworks_script_relative_path
|
295
|
-
"${
|
341
|
+
"${PODS_ROOT}/#{relative_to_pods_root(embed_frameworks_script_path)}"
|
296
342
|
end
|
297
343
|
|
298
344
|
private
|
@@ -300,16 +346,26 @@ module Pod
|
|
300
346
|
# @!group Private Helpers
|
301
347
|
#-------------------------------------------------------------------------#
|
302
348
|
|
303
|
-
# Computes the relative path of a sandboxed file from the `$(
|
304
|
-
# variable of the
|
349
|
+
# Computes the relative path of a sandboxed file from the `$(PODS_ROOT)`
|
350
|
+
# variable of the Pods's project.
|
305
351
|
#
|
306
352
|
# @param [Pathname] path
|
307
353
|
# A relative path from the root of the sandbox.
|
308
354
|
#
|
309
355
|
# @return [String] The computed path.
|
310
356
|
#
|
311
|
-
def
|
312
|
-
path.relative_path_from(
|
357
|
+
def relative_to_pods_root(path)
|
358
|
+
path.relative_path_from(sandbox.root).to_s
|
359
|
+
end
|
360
|
+
|
361
|
+
def create_build_settings
|
362
|
+
settings = {}
|
363
|
+
|
364
|
+
user_build_configurations.each_key do |configuration_name|
|
365
|
+
settings[configuration_name] = BuildSettings::AggregateTargetSettings.new(self, configuration_name)
|
366
|
+
end
|
367
|
+
|
368
|
+
settings
|
313
369
|
end
|
314
370
|
end
|
315
371
|
end
|