xcocoapods 1.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +6303 -0
  3. data/LICENSE +28 -0
  4. data/README.md +80 -0
  5. data/bin/pod +56 -0
  6. data/bin/sandbox-pod +168 -0
  7. data/lib/cocoapods.rb +73 -0
  8. data/lib/cocoapods/command.rb +175 -0
  9. data/lib/cocoapods/command/cache.rb +28 -0
  10. data/lib/cocoapods/command/cache/clean.rb +90 -0
  11. data/lib/cocoapods/command/cache/list.rb +69 -0
  12. data/lib/cocoapods/command/env.rb +66 -0
  13. data/lib/cocoapods/command/init.rb +128 -0
  14. data/lib/cocoapods/command/install.rb +45 -0
  15. data/lib/cocoapods/command/ipc.rb +19 -0
  16. data/lib/cocoapods/command/ipc/list.rb +40 -0
  17. data/lib/cocoapods/command/ipc/podfile.rb +31 -0
  18. data/lib/cocoapods/command/ipc/podfile_json.rb +30 -0
  19. data/lib/cocoapods/command/ipc/repl.rb +51 -0
  20. data/lib/cocoapods/command/ipc/spec.rb +29 -0
  21. data/lib/cocoapods/command/ipc/update_search_index.rb +24 -0
  22. data/lib/cocoapods/command/lib.rb +11 -0
  23. data/lib/cocoapods/command/lib/create.rb +105 -0
  24. data/lib/cocoapods/command/lib/lint.rb +121 -0
  25. data/lib/cocoapods/command/list.rb +39 -0
  26. data/lib/cocoapods/command/options/project_directory.rb +36 -0
  27. data/lib/cocoapods/command/options/repo_update.rb +34 -0
  28. data/lib/cocoapods/command/outdated.rb +140 -0
  29. data/lib/cocoapods/command/repo.rb +29 -0
  30. data/lib/cocoapods/command/repo/add.rb +103 -0
  31. data/lib/cocoapods/command/repo/lint.rb +82 -0
  32. data/lib/cocoapods/command/repo/list.rb +93 -0
  33. data/lib/cocoapods/command/repo/push.rb +281 -0
  34. data/lib/cocoapods/command/repo/remove.rb +36 -0
  35. data/lib/cocoapods/command/repo/update.rb +28 -0
  36. data/lib/cocoapods/command/setup.rb +103 -0
  37. data/lib/cocoapods/command/spec.rb +112 -0
  38. data/lib/cocoapods/command/spec/cat.rb +51 -0
  39. data/lib/cocoapods/command/spec/create.rb +283 -0
  40. data/lib/cocoapods/command/spec/edit.rb +87 -0
  41. data/lib/cocoapods/command/spec/env_spec.rb +53 -0
  42. data/lib/cocoapods/command/spec/lint.rb +137 -0
  43. data/lib/cocoapods/command/spec/which.rb +43 -0
  44. data/lib/cocoapods/command/update.rb +101 -0
  45. data/lib/cocoapods/config.rb +347 -0
  46. data/lib/cocoapods/core_overrides.rb +1 -0
  47. data/lib/cocoapods/downloader.rb +190 -0
  48. data/lib/cocoapods/downloader/cache.rb +233 -0
  49. data/lib/cocoapods/downloader/request.rb +86 -0
  50. data/lib/cocoapods/downloader/response.rb +16 -0
  51. data/lib/cocoapods/executable.rb +222 -0
  52. data/lib/cocoapods/external_sources.rb +57 -0
  53. data/lib/cocoapods/external_sources/abstract_external_source.rb +205 -0
  54. data/lib/cocoapods/external_sources/downloader_source.rb +30 -0
  55. data/lib/cocoapods/external_sources/path_source.rb +55 -0
  56. data/lib/cocoapods/external_sources/podspec_source.rb +54 -0
  57. data/lib/cocoapods/gem_version.rb +5 -0
  58. data/lib/cocoapods/generator/acknowledgements.rb +107 -0
  59. data/lib/cocoapods/generator/acknowledgements/markdown.rb +44 -0
  60. data/lib/cocoapods/generator/acknowledgements/plist.rb +94 -0
  61. data/lib/cocoapods/generator/app_target_helper.rb +244 -0
  62. data/lib/cocoapods/generator/bridge_support.rb +22 -0
  63. data/lib/cocoapods/generator/constant.rb +19 -0
  64. data/lib/cocoapods/generator/copy_resources_script.rb +230 -0
  65. data/lib/cocoapods/generator/dummy_source.rb +31 -0
  66. data/lib/cocoapods/generator/embed_frameworks_script.rb +215 -0
  67. data/lib/cocoapods/generator/header.rb +103 -0
  68. data/lib/cocoapods/generator/info_plist_file.rb +116 -0
  69. data/lib/cocoapods/generator/module_map.rb +99 -0
  70. data/lib/cocoapods/generator/prefix_header.rb +60 -0
  71. data/lib/cocoapods/generator/umbrella_header.rb +46 -0
  72. data/lib/cocoapods/hooks_manager.rb +132 -0
  73. data/lib/cocoapods/installer.rb +703 -0
  74. data/lib/cocoapods/installer/analyzer.rb +972 -0
  75. data/lib/cocoapods/installer/analyzer/analysis_result.rb +87 -0
  76. data/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb +98 -0
  77. data/lib/cocoapods/installer/analyzer/pod_variant.rb +67 -0
  78. data/lib/cocoapods/installer/analyzer/pod_variant_set.rb +157 -0
  79. data/lib/cocoapods/installer/analyzer/podfile_dependency_cache.rb +54 -0
  80. data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +240 -0
  81. data/lib/cocoapods/installer/analyzer/specs_state.rb +84 -0
  82. data/lib/cocoapods/installer/analyzer/target_inspection_result.rb +53 -0
  83. data/lib/cocoapods/installer/analyzer/target_inspector.rb +260 -0
  84. data/lib/cocoapods/installer/installation_options.rb +158 -0
  85. data/lib/cocoapods/installer/pod_source_installer.rb +202 -0
  86. data/lib/cocoapods/installer/pod_source_preparer.rb +77 -0
  87. data/lib/cocoapods/installer/podfile_validator.rb +139 -0
  88. data/lib/cocoapods/installer/post_install_hooks_context.rb +132 -0
  89. data/lib/cocoapods/installer/pre_install_hooks_context.rb +51 -0
  90. data/lib/cocoapods/installer/source_provider_hooks_context.rb +34 -0
  91. data/lib/cocoapods/installer/user_project_integrator.rb +250 -0
  92. data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +463 -0
  93. data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +146 -0
  94. data/lib/cocoapods/installer/xcode.rb +8 -0
  95. data/lib/cocoapods/installer/xcode/pods_project_generator.rb +416 -0
  96. data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +181 -0
  97. data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +84 -0
  98. data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +334 -0
  99. data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +777 -0
  100. data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +116 -0
  101. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installation_result.rb +86 -0
  102. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +256 -0
  103. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb +68 -0
  104. data/lib/cocoapods/installer/xcode/target_validator.rb +147 -0
  105. data/lib/cocoapods/open-uri.rb +33 -0
  106. data/lib/cocoapods/project.rb +414 -0
  107. data/lib/cocoapods/resolver.rb +585 -0
  108. data/lib/cocoapods/resolver/lazy_specification.rb +79 -0
  109. data/lib/cocoapods/sandbox.rb +404 -0
  110. data/lib/cocoapods/sandbox/file_accessor.rb +444 -0
  111. data/lib/cocoapods/sandbox/headers_store.rb +146 -0
  112. data/lib/cocoapods/sandbox/path_list.rb +220 -0
  113. data/lib/cocoapods/sandbox/pod_dir_cleaner.rb +85 -0
  114. data/lib/cocoapods/sandbox/podspec_finder.rb +23 -0
  115. data/lib/cocoapods/sources_manager.rb +157 -0
  116. data/lib/cocoapods/target.rb +261 -0
  117. data/lib/cocoapods/target/aggregate_target.rb +338 -0
  118. data/lib/cocoapods/target/build_settings.rb +1075 -0
  119. data/lib/cocoapods/target/pod_target.rb +559 -0
  120. data/lib/cocoapods/user_interface.rb +459 -0
  121. data/lib/cocoapods/user_interface/error_report.rb +187 -0
  122. data/lib/cocoapods/user_interface/inspector_reporter.rb +109 -0
  123. data/lib/cocoapods/validator.rb +981 -0
  124. metadata +533 -0
@@ -0,0 +1,132 @@
1
+ module Pod
2
+ class Installer
3
+ # Context object designed to be used with the HooksManager which describes
4
+ # the context of the installer.
5
+ #
6
+ class PostInstallHooksContext
7
+ # @return [Sandbox] The Sandbox for the project.
8
+ #
9
+ attr_reader :sandbox
10
+
11
+ # @return [String] The path to the sandbox root (`Pods` directory).
12
+ #
13
+ attr_reader :sandbox_root
14
+
15
+ # @return [Xcodeproj::Project] The Pods Xcode project.
16
+ #
17
+ attr_reader :pods_project
18
+
19
+ # @return [Array<UmbrellaTargetDescription>] The list of
20
+ # the CocoaPods umbrella targets generated by the installer.
21
+ #
22
+ attr_reader :umbrella_targets
23
+
24
+ # Initialize a new instance
25
+ #
26
+ # @param [Sandbox] sandbox see #sandbox
27
+ # @param [String] sandbox_root see #sandbox_root
28
+ # @param [Xcodeproj::Project] pods_project see #pods_project
29
+ # @param [Array<UmbrellaTargetDescription>] umbrella_targets see #umbrella_targets
30
+ #
31
+ def initialize(sandbox, sandbox_root, pods_project, umbrella_targets)
32
+ @sandbox = sandbox
33
+ @sandbox_root = sandbox_root
34
+ @pods_project = pods_project
35
+ @umbrella_targets = umbrella_targets
36
+ end
37
+
38
+ # @return [PostInstallHooksContext] Convenience class generator method
39
+ #
40
+ # @param [Sandbox] sandbox
41
+ # The sandbox
42
+ #
43
+ # @param [Array<AggregateTarget>] aggregate_targets
44
+ # The aggregate targets, which will been presented by an adequate
45
+ # {UmbrellaTargetDescription} in the generated context.
46
+ #
47
+ # @return [HooksContext] Convenience class method to generate the
48
+ # static context.
49
+ #
50
+ def self.generate(sandbox, aggregate_targets)
51
+ umbrella_targets_descriptions = aggregate_targets.map do |umbrella|
52
+ user_project = umbrella.user_project
53
+ user_targets = umbrella.user_targets
54
+ specs = umbrella.specs
55
+ platform_name = umbrella.platform.name
56
+ platform_deployment_target = umbrella.platform.deployment_target.to_s
57
+ cocoapods_target_label = umbrella.label
58
+ UmbrellaTargetDescription.new(user_project, user_targets, specs, platform_name, platform_deployment_target, cocoapods_target_label)
59
+ end
60
+
61
+ new(sandbox, sandbox.root.to_s, sandbox.project, umbrella_targets_descriptions)
62
+ end
63
+
64
+ # Pure data class which describes and umbrella target.
65
+ #
66
+ class UmbrellaTargetDescription
67
+ # @return [Xcodeproj::Project] The user project into which this target
68
+ # is integrated.
69
+ #
70
+ attr_reader :user_project
71
+
72
+ # @return [Array<PBXNativeTarget>]
73
+ # The list of user targets integrated by this umbrella target.
74
+ #
75
+ attr_reader :user_targets
76
+
77
+ # @return [Array<Specification>] The list of the
78
+ # specifications of the target.
79
+ #
80
+ attr_reader :specs
81
+
82
+ # @return [Symbol] The platform (either `:ios`, `:watchos`, `:tvos`, or `:osx`).
83
+ #
84
+ attr_reader :platform_name
85
+
86
+ # @return [String] The deployment target.
87
+ #
88
+ attr_reader :platform_deployment_target
89
+
90
+ # @return [String] The label for the target.
91
+ #
92
+ attr_reader :cocoapods_target_label
93
+
94
+ # Initialize a new instance
95
+ #
96
+ # @param [Xcodeproj::Project] user_project see #user_project
97
+ # @param [Array<PBXNativeTarget>] user_targets see #user_targets
98
+ # @param [Array<Specification>] specs see #specs
99
+ # @param [Symbol] platform_name see #platform_name
100
+ # @param [String] platform_deployment_target see #platform_deployment_target
101
+ # @param [String] cocoapods_target_label see #cocoapods_target_label
102
+ #
103
+ def initialize(user_project, user_targets, specs, platform_name, platform_deployment_target, cocoapods_target_label)
104
+ @user_project = user_project
105
+ @user_targets = user_targets
106
+ @specs = specs
107
+ @platform_name = platform_name
108
+ @platform_deployment_target = platform_deployment_target
109
+ @cocoapods_target_label = cocoapods_target_label
110
+ end
111
+
112
+ # @return [String] The path of the user project
113
+ # integrated by this target.
114
+ #
115
+ def user_project_path
116
+ user_project.path if user_project
117
+ end
118
+
119
+ # @return [Array<String>] The list of the UUIDs of the
120
+ # user targets integrated by this umbrella
121
+ # target. They can be used to find the
122
+ # targets opening the project They can be used
123
+ # to find the targets opening the project with
124
+ # Xcodeproj.
125
+ #
126
+ def user_target_uuids
127
+ user_targets.map(&:uuid)
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,51 @@
1
+ module Pod
2
+ class Installer
3
+ # Context object designed to be used with the HooksManager which describes
4
+ # the context of the installer before analysis has been completed.
5
+ #
6
+ class PreInstallHooksContext
7
+ # @return [Podfile] The Podfile for the project.
8
+ #
9
+ attr_reader :podfile
10
+
11
+ # @return [Sandbox] The Sandbox for the project.
12
+ #
13
+ attr_reader :sandbox
14
+
15
+ # @return [String] The path to the sandbox root (`Pods` directory).
16
+ #
17
+ attr_reader :sandbox_root
18
+
19
+ # @return [Lockfile] The Lockfile for the project.
20
+ #
21
+ attr_reader :lockfile
22
+
23
+ # Initialize a new instance
24
+ #
25
+ # @param [Sandbox] sandbox see #sandbox
26
+ # @param [String] sandbox_root see #sandbox_root
27
+ # @param [Podfile] podfile see #podfile
28
+ # @param [Lockfile] lockfile see #lockfile
29
+ #
30
+ def initialize(podfile, sandbox, sandbox_root, lockfile)
31
+ @podfile = podfile
32
+ @sandbox = sandbox
33
+ @sandbox_root = sandbox_root
34
+ @lockfile = lockfile
35
+ end
36
+
37
+ # @param [Sandbox] sandbox see {#sandbox}
38
+ #
39
+ # @param [Podfile] podfile see {#podfile}
40
+ #
41
+ # @param [Lockfile] lockfile see {#lockfile}
42
+ #
43
+ # @return [PreInstallHooksContext] Convenience class method to generate the
44
+ # static context.
45
+ #
46
+ def self.generate(sandbox, podfile, lockfile)
47
+ new(podfile, sandbox, sandbox.root.to_s, lockfile)
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,34 @@
1
+ module Pod
2
+ class Installer
3
+ # Context object designed to be used with the HooksManager which describes
4
+ # the context of the installer before spec sources have been created
5
+ #
6
+ class SourceProviderHooksContext
7
+ # @return [Array<Source>] The source objects to send to the installer
8
+ #
9
+ attr_reader :sources
10
+
11
+ # @return [SourceProviderHooksContext] Convenience class method to generate the
12
+ # static context.
13
+ #
14
+ def self.generate
15
+ result = new
16
+ result
17
+ end
18
+
19
+ def initialize
20
+ @sources = []
21
+ end
22
+
23
+ # @param [Source] source object to be added to the installer
24
+ #
25
+ # @return [void]
26
+ #
27
+ def add_source(source)
28
+ unless source.nil?
29
+ @sources << source
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,250 @@
1
+ require 'xcodeproj/workspace'
2
+ require 'xcodeproj/project'
3
+
4
+ require 'active_support/core_ext/string/inflections'
5
+ require 'active_support/core_ext/array/conversions'
6
+
7
+ module Pod
8
+ class Installer
9
+ # The {UserProjectIntegrator} integrates the libraries generated by
10
+ # TargetDefinitions of the {Podfile} with their correspondent user
11
+ # projects.
12
+ #
13
+ class UserProjectIntegrator
14
+ autoload :TargetIntegrator, 'cocoapods/installer/user_project_integrator/target_integrator'
15
+
16
+ # @return [Podfile] the podfile that should be integrated with the user
17
+ # projects.
18
+ #
19
+ attr_reader :podfile
20
+
21
+ # @return [Project] the pods project which contains the libraries to
22
+ # integrate.
23
+ #
24
+ # attr_reader :pods_project
25
+
26
+ attr_reader :sandbox
27
+
28
+ # @return [Pathname] the path of the installation.
29
+ #
30
+ # @todo This is only used to compute the workspace path in case that it
31
+ # should be inferred by the project. If the workspace should be in
32
+ # the same dir of the project, this could be removed.
33
+ #
34
+ attr_reader :installation_root
35
+
36
+ # @return [Array<AggregateTarget>] the targets represented in the Podfile.
37
+ #
38
+ attr_reader :targets
39
+
40
+ # Init a new UserProjectIntegrator
41
+ #
42
+ # @param [Podfile] podfile @see #podfile
43
+ # @param [Sandbox] sandbox @see #sandbox
44
+ # @param [Pathname] installation_root @see #installation_root
45
+ # @param [Array<AggregateTarget>] targets @see #targets
46
+ #
47
+ def initialize(podfile, sandbox, installation_root, targets)
48
+ @podfile = podfile
49
+ @sandbox = sandbox
50
+ @installation_root = installation_root
51
+ @targets = targets
52
+ end
53
+
54
+ # Integrates the user projects associated with the {TargetDefinitions}
55
+ # with the Pods project and its products.
56
+ #
57
+ # @return [void]
58
+ #
59
+ def integrate!
60
+ create_workspace
61
+ integrate_user_targets
62
+ warn_about_xcconfig_overrides
63
+ save_projects
64
+ end
65
+
66
+ #-----------------------------------------------------------------------#
67
+
68
+ private
69
+
70
+ # @!group Integration steps
71
+
72
+ # Creates and saved the workspace containing the Pods project and the
73
+ # user projects, if needed.
74
+ #
75
+ # @note If the workspace already contains the projects it is not saved
76
+ # to avoid Xcode from displaying the revert dialog: `Do you want to
77
+ # keep the Xcode version or revert to the version on disk?`
78
+ #
79
+ # @return [void]
80
+ #
81
+ def create_workspace
82
+ all_projects = user_project_paths.sort.push(sandbox.project_path).uniq
83
+ file_references = all_projects.map do |path|
84
+ relative_path = path.relative_path_from(workspace_path.dirname).to_s
85
+ Xcodeproj::Workspace::FileReference.new(relative_path, 'group')
86
+ end
87
+
88
+ if workspace_path.exist?
89
+ workspace = Xcodeproj::Workspace.new_from_xcworkspace(workspace_path)
90
+ new_file_references = file_references - workspace.file_references
91
+ unless new_file_references.empty?
92
+ new_file_references.each { |fr| workspace << fr }
93
+ workspace.save_as(workspace_path)
94
+ end
95
+
96
+ else
97
+ UI.notice "Please close any current Xcode sessions and use `#{workspace_path.basename}` for this project from now on."
98
+ workspace = Xcodeproj::Workspace.new(*file_references)
99
+ workspace.save_as(workspace_path)
100
+ end
101
+ end
102
+
103
+ # Integrates the targets of the user projects with the libraries
104
+ # generated from the {Podfile}.
105
+ #
106
+ # @note {TargetDefinition} without dependencies are skipped prevent
107
+ # creating empty libraries for targets definitions which are only
108
+ # wrappers for others.
109
+ #
110
+ # @return [void]
111
+ #
112
+ def integrate_user_targets
113
+ target_integrators = targets_to_integrate.sort_by(&:name).map do |target|
114
+ TargetIntegrator.new(target)
115
+ end
116
+
117
+ Config.instance.with_changes(:silent => true) do
118
+ deintegrator = Deintegrator.new
119
+ all_project_targets = user_projects.flat_map(&:native_targets).uniq
120
+ all_native_targets = targets_to_integrate.flat_map(&:user_targets).uniq
121
+ targets_to_deintegrate = all_project_targets - all_native_targets
122
+ targets_to_deintegrate.each do |target|
123
+ deintegrator.deintegrate_target(target)
124
+ end
125
+ end
126
+
127
+ target_integrators.each(&:integrate!)
128
+ end
129
+
130
+ # Save all user projects.
131
+ #
132
+ # @return [void]
133
+ #
134
+ def save_projects
135
+ user_projects.each do |project|
136
+ if project.dirty?
137
+ project.save
138
+ else
139
+ # There is a bug in Xcode where the process of deleting and
140
+ # re-creating the xcconfig files used in the build
141
+ # configuration cause building the user project to fail until
142
+ # Xcode is relaunched.
143
+ #
144
+ # Touching/saving the project causes Xcode to reload these.
145
+ #
146
+ # https://github.com/CocoaPods/CocoaPods/issues/2665
147
+ FileUtils.touch(project.path + 'project.pbxproj')
148
+ end
149
+ end
150
+ end
151
+
152
+ IGNORED_KEYS = %w(CODE_SIGN_IDENTITY).freeze
153
+ INHERITED_FLAGS = %w($(inherited) ${inherited}).freeze
154
+
155
+ # Checks whether the settings of the CocoaPods generated xcconfig are
156
+ # overridden by the build configuration of a target and prints a
157
+ # warning to inform the user if needed.
158
+ #
159
+ def warn_about_xcconfig_overrides
160
+ targets.each do |aggregate_target|
161
+ aggregate_target.user_targets.each do |user_target|
162
+ user_target.build_configurations.each do |config|
163
+ xcconfig = aggregate_target.xcconfigs[config.name]
164
+ if xcconfig
165
+ (xcconfig.to_hash.keys - IGNORED_KEYS).each do |key|
166
+ target_values = config.build_settings[key]
167
+ if target_values &&
168
+ !INHERITED_FLAGS.any? { |flag| target_values.include?(flag) }
169
+ print_override_warning(aggregate_target, user_target, config, key)
170
+ end
171
+ end
172
+ end
173
+ end
174
+ end
175
+ end
176
+ end
177
+
178
+ private
179
+
180
+ # @!group Private Helpers
181
+ #-----------------------------------------------------------------------#
182
+
183
+ # @return [Pathname] the path where the workspace containing the Pods
184
+ # project and the user projects should be saved.
185
+ #
186
+ def workspace_path
187
+ if podfile.workspace_path
188
+ declared_path = podfile.workspace_path
189
+ path_with_ext = File.extname(declared_path) == '.xcworkspace' ? declared_path : "#{declared_path}.xcworkspace"
190
+ podfile_dir = File.dirname(podfile.defined_in_file || '')
191
+ absolute_path = File.expand_path(path_with_ext, podfile_dir)
192
+ Pathname.new(absolute_path)
193
+ elsif user_project_paths.count == 1
194
+ project = user_project_paths.first.basename('.xcodeproj')
195
+ installation_root + "#{project}.xcworkspace"
196
+ else
197
+ raise Informative, 'Could not automatically select an Xcode ' \
198
+ "workspace. Specify one in your Podfile like so:\n\n" \
199
+ " workspace 'path/to/Workspace.xcworkspace'\n"
200
+ end
201
+ end
202
+
203
+ # @return [Array<Pathname>] the paths of all the user projects referenced
204
+ # by the target definitions.
205
+ #
206
+ # @note Empty target definitions are ignored.
207
+ #
208
+ def user_project_paths
209
+ targets.map(&:user_project_path).compact.uniq
210
+ end
211
+
212
+ def user_projects
213
+ targets.map(&:user_project).compact.uniq
214
+ end
215
+
216
+ def targets_to_integrate
217
+ targets
218
+ end
219
+
220
+ # Prints a warning informing the user that a build configuration of
221
+ # the integrated target is overriding the CocoaPods build settings.
222
+ #
223
+ # @param [Target::AggregateTarget] aggregate_target
224
+ # The umbrella target.
225
+ #
226
+ # @param [XcodeProj::PBXNativeTarget] user_target
227
+ # The native target.
228
+ #
229
+ # @param [Xcodeproj::XCBuildConfiguration] config
230
+ # The build configuration.
231
+ #
232
+ # @param [String] key
233
+ # The key of the overridden build setting.
234
+ #
235
+ def print_override_warning(aggregate_target, user_target, config, key)
236
+ actions = [
237
+ 'Use the `$(inherited)` flag, or',
238
+ 'Remove the build settings from the target.',
239
+ ]
240
+ message = "The `#{user_target.name} [#{config.name}]` " \
241
+ "target overrides the `#{key}` build setting defined in " \
242
+ "`#{aggregate_target.xcconfig_relative_path(config.name)}'. " \
243
+ 'This can lead to problems with the CocoaPods installation'
244
+ UI.warn(message, actions)
245
+ end
246
+
247
+ #-----------------------------------------------------------------------#
248
+ end
249
+ end
250
+ end