cocoapods 1.0.1 → 1.1.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +107 -0
- data/lib/cocoapods/command.rb +1 -0
- data/lib/cocoapods/command/repo/push.rb +26 -5
- data/lib/cocoapods/command/setup.rb +2 -1
- data/lib/cocoapods/downloader.rb +20 -0
- data/lib/cocoapods/downloader/cache.rb +1 -0
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/acknowledgements/plist.rb +1 -0
- data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +9 -2
- data/lib/cocoapods/generator/xcconfig/xcconfig_helper.rb +5 -4
- data/lib/cocoapods/installer.rb +41 -205
- data/lib/cocoapods/installer/analyzer.rb +65 -1
- data/lib/cocoapods/installer/analyzer/pod_variant.rb +9 -3
- data/lib/cocoapods/installer/analyzer/target_inspector.rb +24 -0
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +23 -6
- data/lib/cocoapods/installer/xcode.rb +7 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator.rb +265 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +202 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +314 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +397 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +214 -0
- data/lib/cocoapods/resolver.rb +1 -2
- data/lib/cocoapods/target/aggregate_target.rb +19 -0
- data/lib/cocoapods/target/pod_target.rb +15 -2
- data/lib/cocoapods/user_interface.rb +6 -1
- data/lib/cocoapods/user_interface/error_report.rb +7 -0
- data/lib/cocoapods/user_interface/inspector_reporter.rb +109 -0
- data/lib/cocoapods/validator.rb +15 -7
- metadata +42 -19
- data/lib/cocoapods/installer/file_references_installer.rb +0 -310
- data/lib/cocoapods/installer/target_installer.rb +0 -210
- data/lib/cocoapods/installer/target_installer/aggregate_target_installer.rb +0 -191
- data/lib/cocoapods/installer/target_installer/pod_target_installer.rb +0 -389
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 874ef7ca85409e240f67902b93426a61624b351f
|
4
|
+
data.tar.gz: 9ba454d15e64fdaa7fc0902120e93b9fe1fd86ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5bbc9deebcd172a88456e21ee536aedb983383e287acafbf4481949980715139d5e673c0d18ecc10988e1521c59c3c710a7130ade7c405fd4a4a63ec3681fc1
|
7
|
+
data.tar.gz: b9510b26eb4290ececc726cfd68f9fc22a6e6127bd6ae54907e50f6959f82ddef552e85d29007936603f4f2b66b40dd808597fcf93ecd0f76ad501b3fa6dae00
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,113 @@ To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides
|
|
4
4
|
|
5
5
|
To install release candidates run `[sudo] gem install cocoapods --pre`
|
6
6
|
|
7
|
+
## 1.1.0.beta.1 (2016-07-11)
|
8
|
+
|
9
|
+
##### Enhancements
|
10
|
+
|
11
|
+
* Move Pods Project generation to an `Xcode` Namespace.
|
12
|
+
[Daniel Tomlinson](https://github.com/dantoml)
|
13
|
+
[#5480](https://github.com/CocoaPods/CocoaPods/pull/5480)
|
14
|
+
|
15
|
+
* Add the ability to inhibit swift warnings.
|
16
|
+
[Peter Ryszkiewicz](https://github.com/pRizz)
|
17
|
+
[#5414](https://github.com/CocoaPods/CocoaPods/pull/5414)
|
18
|
+
|
19
|
+
* Use `git ls-remote` to skip full clones for branch dependencies.
|
20
|
+
[Juan Civile](https://github.com/champo)
|
21
|
+
[#5376](https://github.com/CocoaPods/CocoaPods/issues/5376)
|
22
|
+
|
23
|
+
* [repo/push] --use-json to convert podspecs to JSON format when pushing.
|
24
|
+
[Mark Schall](https://github.com/maschall)
|
25
|
+
[#5568](https://github.com/CocoaPods/CocoaPods/pull/5568)
|
26
|
+
|
27
|
+
* Set 'Allow app extension API only' for Messages extensions.
|
28
|
+
[Boris Bügling](https://github.com/neonichu)
|
29
|
+
[#5558](https://github.com/CocoaPods/CocoaPods/issues/5558)
|
30
|
+
|
31
|
+
* Accept `pod repo push` with URL instead of only repo name.
|
32
|
+
[Mark Schall](https://github.com/maschall)
|
33
|
+
[#5572](https://github.com/CocoaPods/CocoaPods/pull/5572)
|
34
|
+
|
35
|
+
* [Installer] Set the SWIFT_VERSION for CocoaPods generated targets.
|
36
|
+
[Danielle Tomlinson](https://github.com/DanToml)
|
37
|
+
[#5540](https://github.com/CocoaPods/CocoaPods/pulls/5540)
|
38
|
+
|
39
|
+
* Print message when skipping user project integration.
|
40
|
+
[Danielle Tomlinson](https://github.com/dantoml)
|
41
|
+
[#5517](https://github.com/CocoaPods/CocoaPods/issues/5517)
|
42
|
+
|
43
|
+
* Show GitHub Issues that could be related to exceptions.
|
44
|
+
[Orta Therox](https://github.com/orta)
|
45
|
+
[#4817](https://github.com/CocoaPods/CocoaPods/issues/4817)
|
46
|
+
|
47
|
+
* Improve handling of app extensions, watch os 1 extensions
|
48
|
+
and framework targets.
|
49
|
+
[benasher44](https://github.com/benasher44)
|
50
|
+
[#4203](https://github.com/CocoaPods/CocoaPods/issues/4203)
|
51
|
+
|
52
|
+
* Add a license type to generated acknowledgements file in plist.
|
53
|
+
[Naoto Kaneko](https://github.com/naoty)
|
54
|
+
[#5436](https://github.com/CocoaPods/CocoaPods/pull/5436)
|
55
|
+
|
56
|
+
##### Bug Fixes
|
57
|
+
|
58
|
+
* Fix local pod platform conflict error message.
|
59
|
+
[Muhammed Yavuz Nuzumlalı](https://github.com/manuyavuz)
|
60
|
+
[#5052](https://github.com/CocoaPods/CocoaPods/issues/5052)
|
61
|
+
|
62
|
+
* Avoid use of `activesupport` version 5 to stay compatible with macOS system
|
63
|
+
Ruby.
|
64
|
+
[Boris Bügling](https://github.com/neonichu)
|
65
|
+
[#5602](https://github.com/CocoaPods/CocoaPods/issues/5602)
|
66
|
+
|
67
|
+
* Fix installing pods with `use_frameworks` when deduplication is disabled.
|
68
|
+
[Samuel Giddins](https://github.com/segiddins)
|
69
|
+
[#5481](https://github.com/CocoaPods/CocoaPods/issues/5481)
|
70
|
+
|
71
|
+
* Running `pod setup --silent` will now properly silence git output while
|
72
|
+
updating the repository.
|
73
|
+
[Samuel Giddins](https://github.com/segiddins)
|
74
|
+
|
75
|
+
* Fix linting pods that depend upon `XCTest`.
|
76
|
+
[Samuel Giddins](https://github.com/segiddins)
|
77
|
+
[#5321](https://github.com/CocoaPods/CocoaPods/issues/5321)
|
78
|
+
|
79
|
+
* Use `require` instead of `autoload` to solve an issue with loading
|
80
|
+
`fourflusher`.
|
81
|
+
[Boris Bügling](https://github.com/neonichu)
|
82
|
+
[#5445](https://github.com/CocoaPods/CocoaPods/issues/5445)
|
83
|
+
|
84
|
+
* Resolve cyclic dependencies when creating pod targets.
|
85
|
+
[Juan Civile](https://github.com/champo)
|
86
|
+
[#5362](https://github.com/CocoaPods/CocoaPods/issues/5362)
|
87
|
+
|
88
|
+
* Fix embedding frameworks in UI Testing bundles.
|
89
|
+
[Daniel Tomlinson](https://github.com/dantoml)
|
90
|
+
[#5250](https://github.com/CocoaPods/CocoaPods/issues/5250)
|
91
|
+
|
92
|
+
* Ensure attempting to print a path in the error report doesn't itself error.
|
93
|
+
[Samuel Giddins](https://github.com/)
|
94
|
+
[#5541](https://github.com/CocoaPods/CocoaPods/issues/5541)
|
95
|
+
|
96
|
+
* Fix linting with Xcode 8.
|
97
|
+
[Boris Bügling](https://github.com/neonichu)
|
98
|
+
[#5529](https://github.com/CocoaPods/CocoaPods/issues/5529)
|
99
|
+
|
100
|
+
* Fix linting with Xcode 8 by disabling it entirely.
|
101
|
+
[Boris Bügling](https://github.com/neonichu)
|
102
|
+
[#5528](https://github.com/CocoaPods/CocoaPods/issues/5528)
|
103
|
+
|
104
|
+
* Error during install when there are duplicate library names.
|
105
|
+
[Daniel Tomlinson](https://github.com/dantoml)
|
106
|
+
[#4014](https://github.com/CocoaPods/CocoaPods/issues/4014)
|
107
|
+
|
108
|
+
* Make the `Check Pods Manifest.lock` script write errors to STDERR and improve
|
109
|
+
POSIX shell compatibility.
|
110
|
+
[Simon Warta](https://github.com/webmaster128)
|
111
|
+
[#5595](https://github.com/CocoaPods/CocoaPods/pull/5595)
|
112
|
+
|
113
|
+
|
7
114
|
## 1.0.1 (2016-06-02)
|
8
115
|
|
9
116
|
##### Enhancements
|
data/lib/cocoapods/command.rb
CHANGED
@@ -31,6 +31,7 @@ module Pod
|
|
31
31
|
['--no-private', 'Lint includes checks that apply only to public repos'],
|
32
32
|
['--commit-message="Fix bug in pod"', 'Add custom commit message. ' \
|
33
33
|
'Opens default editor if no commit message is specified.'],
|
34
|
+
['--use-json', 'Push JSON spec to repo'],
|
34
35
|
].concat(super)
|
35
36
|
end
|
36
37
|
|
@@ -38,20 +39,21 @@ module Pod
|
|
38
39
|
@allow_warnings = argv.flag?('allow-warnings')
|
39
40
|
@local_only = argv.flag?('local-only')
|
40
41
|
@repo = argv.shift_argument
|
41
|
-
@source =
|
42
|
+
@source = source_for_repo
|
42
43
|
@source_urls = argv.option('sources', config.sources_manager.all.map(&:url).join(',')).split(',')
|
43
44
|
@podspec = argv.shift_argument
|
44
45
|
@use_frameworks = !argv.flag?('use-libraries')
|
45
46
|
@private = argv.flag?('private', true)
|
46
47
|
@message = argv.option('commit-message')
|
47
48
|
@commit_message = argv.flag?('commit-message', false)
|
49
|
+
@use_json = argv.flag?('use-json')
|
48
50
|
super
|
49
51
|
end
|
50
52
|
|
51
53
|
def validate!
|
52
54
|
super
|
53
|
-
help! 'A spec-repo name is required.' unless @repo
|
54
|
-
unless @source.repo.directory?
|
55
|
+
help! 'A spec-repo name or url is required.' unless @repo
|
56
|
+
unless @source && @source.repo.directory?
|
55
57
|
raise Informative,
|
56
58
|
"Unable to find the `#{@repo}` repo. " \
|
57
59
|
'If it has not yet been cloned, add it via `pod repo add`.'
|
@@ -177,9 +179,16 @@ module Pod
|
|
177
179
|
else
|
178
180
|
message = "[Add] #{spec}"
|
179
181
|
end
|
180
|
-
|
181
182
|
FileUtils.mkdir_p(output_path)
|
182
|
-
|
183
|
+
|
184
|
+
if @use_json
|
185
|
+
json_file_name = "#{spec.name}.podspec.json"
|
186
|
+
json_file = File.join(output_path, json_file_name)
|
187
|
+
File.open(json_file, 'w') { |file| file.write(spec.to_pretty_json) }
|
188
|
+
else
|
189
|
+
FileUtils.cp(spec_file, output_path)
|
190
|
+
end
|
191
|
+
|
183
192
|
Dir.chdir(repo_dir) do
|
184
193
|
# only commit if modified
|
185
194
|
if git!('status', '--porcelain').include?(spec.name)
|
@@ -234,6 +243,18 @@ module Pod
|
|
234
243
|
podspec_files.count
|
235
244
|
end
|
236
245
|
|
246
|
+
# Returns source for @repo
|
247
|
+
#
|
248
|
+
# @note If URL is invalid or repo doesn't exist, validate! will throw the error
|
249
|
+
#
|
250
|
+
# @return [Source]
|
251
|
+
#
|
252
|
+
def source_for_repo
|
253
|
+
config.sources_manager.source_with_name_or_url(@repo) unless @repo.nil?
|
254
|
+
rescue
|
255
|
+
nil
|
256
|
+
end
|
257
|
+
|
237
258
|
#---------------------------------------------------------------------#
|
238
259
|
end
|
239
260
|
end
|
data/lib/cocoapods/downloader.rb
CHANGED
@@ -33,11 +33,16 @@ module Pod
|
|
33
33
|
cache_path: Config.instance.cache_root + 'Pods'
|
34
34
|
)
|
35
35
|
can_cache &&= !Config.instance.skip_download_cache
|
36
|
+
|
37
|
+
request = preprocess_request(request)
|
38
|
+
|
36
39
|
if can_cache
|
37
40
|
raise ArgumentError, 'Must provide a `cache_path` when caching.' unless cache_path
|
38
41
|
cache = Cache.new(cache_path)
|
39
42
|
result = cache.download_pod(request)
|
40
43
|
else
|
44
|
+
raise ArgumentError, 'Must provide a `target` when caching is disabled.' unless target
|
45
|
+
|
41
46
|
require 'cocoapods/installer/pod_source_preparer'
|
42
47
|
result, = download_request(request, target)
|
43
48
|
Installer::PodSourcePreparer.new(result.spec, result.location).prepare!
|
@@ -110,6 +115,21 @@ module Pod
|
|
110
115
|
end
|
111
116
|
end
|
112
117
|
|
118
|
+
# Return a new request after preprocessing by the downloader
|
119
|
+
#
|
120
|
+
# @param [Request] request
|
121
|
+
# the request that needs preprocessing
|
122
|
+
#
|
123
|
+
# @return [Request] the preprocessed request
|
124
|
+
#
|
125
|
+
def self.preprocess_request(request)
|
126
|
+
Request.new(
|
127
|
+
:spec => request.spec,
|
128
|
+
:released => request.released_pod?,
|
129
|
+
:name => request.name,
|
130
|
+
:params => Downloader.preprocess_options(request.params))
|
131
|
+
end
|
132
|
+
|
113
133
|
public
|
114
134
|
|
115
135
|
class DownloaderError; include CLAide::InformativeError; end
|
@@ -4,7 +4,7 @@ module Pod
|
|
4
4
|
# Generates the xcconfigs for the aggregate targets.
|
5
5
|
#
|
6
6
|
class AggregateXCConfig
|
7
|
-
# @return [
|
7
|
+
# @return [AggregateTarget] the target represented by this xcconfig.
|
8
8
|
#
|
9
9
|
attr_reader :target
|
10
10
|
|
@@ -61,7 +61,14 @@ module Pod
|
|
61
61
|
'FRAMEWORK_SEARCH_PATHS' => '$(inherited) ',
|
62
62
|
'LIBRARY_SEARCH_PATHS' => '$(inherited) ',
|
63
63
|
}
|
64
|
-
|
64
|
+
# For embedded targets, which live in a host target, CocoaPods
|
65
|
+
# copies all of the embedded target's pod_targets its host
|
66
|
+
# target. Therefore, this check will properly require the Swift
|
67
|
+
# libs in the host target, if the embedded target has any pod targets
|
68
|
+
# that use Swift. Setting this for the embedded target would
|
69
|
+
# cause an App Store rejection because frameworks cannot be embedded
|
70
|
+
# in embedded targets.
|
71
|
+
if !target.requires_host_target? && pod_targets.any?(&:uses_swift?)
|
65
72
|
config['EMBEDDED_CONTENT_CONTAINS_SWIFT'] = 'YES'
|
66
73
|
end
|
67
74
|
@xcconfig = Xcodeproj::Config.new(config)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'active_support/core_ext/object/try'
|
2
|
+
|
1
3
|
module Pod
|
2
4
|
module Generator
|
3
5
|
module XCConfig
|
@@ -283,9 +285,9 @@ module Pod
|
|
283
285
|
#
|
284
286
|
def self.add_language_specific_settings(target, xcconfig)
|
285
287
|
if target.uses_swift?
|
286
|
-
|
287
|
-
|
288
|
-
}
|
288
|
+
other_swift_flags = ['$(inherited)', quote(%w(-D COCOAPODS))]
|
289
|
+
other_swift_flags << quote(%w(-suppress-warnings)) if target.try(:inhibit_warnings?)
|
290
|
+
build_settings = { 'OTHER_SWIFT_FLAGS' => other_swift_flags.join(' ') }
|
289
291
|
xcconfig.merge!(build_settings)
|
290
292
|
end
|
291
293
|
end
|
@@ -314,7 +316,6 @@ module Pod
|
|
314
316
|
search_paths << search_path
|
315
317
|
end
|
316
318
|
end
|
317
|
-
search_paths
|
318
319
|
end
|
319
320
|
end
|
320
321
|
|
data/lib/cocoapods/installer.rb
CHANGED
@@ -29,9 +29,7 @@ module Pod
|
|
29
29
|
# source control.
|
30
30
|
#
|
31
31
|
class Installer
|
32
|
-
autoload :AggregateTargetInstaller, 'cocoapods/installer/target_installer/aggregate_target_installer'
|
33
32
|
autoload :Analyzer, 'cocoapods/installer/analyzer'
|
34
|
-
autoload :FileReferencesInstaller, 'cocoapods/installer/file_references_installer'
|
35
33
|
autoload :InstallationOptions, 'cocoapods/installer/installation_options'
|
36
34
|
autoload :PostInstallHooksContext, 'cocoapods/installer/post_install_hooks_context'
|
37
35
|
autoload :PreInstallHooksContext, 'cocoapods/installer/pre_install_hooks_context'
|
@@ -40,9 +38,8 @@ module Pod
|
|
40
38
|
autoload :PodfileValidator, 'cocoapods/installer/podfile_validator'
|
41
39
|
autoload :PodSourceInstaller, 'cocoapods/installer/pod_source_installer'
|
42
40
|
autoload :PodSourcePreparer, 'cocoapods/installer/pod_source_preparer'
|
43
|
-
autoload :PodTargetInstaller, 'cocoapods/installer/target_installer/pod_target_installer'
|
44
|
-
autoload :TargetInstaller, 'cocoapods/installer/target_installer'
|
45
41
|
autoload :UserProjectIntegrator, 'cocoapods/installer/user_project_integrator'
|
42
|
+
autoload :Xcode, 'cocoapods/installer/xcode'
|
46
43
|
|
47
44
|
include Config::Mixin
|
48
45
|
include InstallationOptions::Mixin
|
@@ -113,11 +110,15 @@ module Pod
|
|
113
110
|
prepare
|
114
111
|
resolve_dependencies
|
115
112
|
download_dependencies
|
116
|
-
|
113
|
+
verify_no_duplicate_framework_and_library_names
|
117
114
|
verify_no_static_framework_transitive_dependencies
|
118
115
|
verify_framework_usage
|
119
116
|
generate_pods_project
|
120
|
-
|
117
|
+
if installation_options.integrate_targets?
|
118
|
+
integrate_user_project
|
119
|
+
else
|
120
|
+
UI.section 'Skipping User Project Integration'
|
121
|
+
end
|
121
122
|
perform_post_install_actions
|
122
123
|
end
|
123
124
|
|
@@ -163,15 +164,25 @@ module Pod
|
|
163
164
|
end
|
164
165
|
end
|
165
166
|
|
166
|
-
|
167
|
+
#-------------------------------------------------------------------------#
|
168
|
+
|
169
|
+
# @!group Pods Project Generation
|
170
|
+
|
171
|
+
private
|
172
|
+
|
173
|
+
def create_generator
|
174
|
+
Xcode::PodsProjectGenerator.new(aggregate_targets, sandbox, pod_targets, analysis_result, installation_options, config)
|
175
|
+
end
|
176
|
+
|
177
|
+
# Generate the 'Pods/Pods.xcodeproj' project.
|
178
|
+
#
|
179
|
+
def generate_pods_project(generator = create_generator)
|
167
180
|
UI.section 'Generating Pods project' do
|
168
|
-
|
169
|
-
|
170
|
-
install_libraries
|
171
|
-
set_target_dependencies
|
181
|
+
generator.generate!
|
182
|
+
@pods_project = generator.project
|
172
183
|
run_podfile_post_install_hooks
|
173
|
-
|
174
|
-
share_development_pod_schemes
|
184
|
+
generator.write
|
185
|
+
generator.share_development_pod_schemes
|
175
186
|
write_lockfiles
|
176
187
|
end
|
177
188
|
end
|
@@ -382,23 +393,32 @@ module Pod
|
|
382
393
|
end
|
383
394
|
end
|
384
395
|
|
385
|
-
def
|
396
|
+
def verify_no_duplicate_framework_and_library_names
|
386
397
|
aggregate_targets.each do |aggregate_target|
|
387
398
|
aggregate_target.user_build_configurations.keys.each do |config|
|
388
399
|
pod_targets = aggregate_target.pod_targets_for_build_configuration(config)
|
389
|
-
|
390
|
-
|
400
|
+
file_accessors = pod_targets.flat_map(&:file_accessors)
|
401
|
+
|
402
|
+
frameworks = file_accessors.flat_map(&:vendored_frameworks).uniq.map(&:basename)
|
391
403
|
frameworks += pod_targets.select { |pt| pt.should_build? && pt.requires_frameworks? }.map(&:product_module_name)
|
404
|
+
verify_no_duplicate_names(frameworks, aggregate_target.label, 'frameworks')
|
392
405
|
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
"frameworks with conflicting names: #{duplicates.to_sentence}."
|
397
|
-
end
|
406
|
+
libraries = file_accessors.flat_map(&:vendored_libraries).uniq.map(&:basename)
|
407
|
+
libraries += pod_targets.select { |pt| pt.should_build? && !pt.requires_frameworks? }.map(&:product_name)
|
408
|
+
verify_no_duplicate_names(libraries, aggregate_target.label, 'libraries')
|
398
409
|
end
|
399
410
|
end
|
400
411
|
end
|
401
412
|
|
413
|
+
def verify_no_duplicate_names(names, label, type)
|
414
|
+
duplicates = names.map { |n| n.to_s.downcase }.group_by { |f| f }.select { |_, v| v.size > 1 }.keys
|
415
|
+
|
416
|
+
unless duplicates.empty?
|
417
|
+
raise Informative, "The '#{label}' target has " \
|
418
|
+
"#{type} with conflicting names: #{duplicates.to_sentence}."
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
402
422
|
def verify_no_static_framework_transitive_dependencies
|
403
423
|
aggregate_targets.each do |aggregate_target|
|
404
424
|
next unless aggregate_target.requires_frameworks?
|
@@ -551,181 +571,6 @@ module Pod
|
|
551
571
|
end
|
552
572
|
end
|
553
573
|
|
554
|
-
# Creates the Pods project from scratch if it doesn't exists.
|
555
|
-
#
|
556
|
-
# @return [void]
|
557
|
-
#
|
558
|
-
# @todo Clean and modify the project if it exists.
|
559
|
-
#
|
560
|
-
def prepare_pods_project
|
561
|
-
UI.message '- Creating Pods project' do
|
562
|
-
@pods_project = if object_version = aggregate_targets.map(&:user_project).compact.map { |p| p.object_version.to_i }.min
|
563
|
-
Pod::Project.new(sandbox.project_path, false, object_version)
|
564
|
-
else
|
565
|
-
Pod::Project.new(sandbox.project_path)
|
566
|
-
end
|
567
|
-
|
568
|
-
analysis_result.all_user_build_configurations.each do |name, type|
|
569
|
-
@pods_project.add_build_configuration(name, type)
|
570
|
-
end
|
571
|
-
|
572
|
-
pod_names = pod_targets.map(&:pod_name).uniq
|
573
|
-
pod_names.each do |pod_name|
|
574
|
-
local = sandbox.local?(pod_name)
|
575
|
-
path = sandbox.pod_dir(pod_name)
|
576
|
-
was_absolute = sandbox.local_path_was_absolute?(pod_name)
|
577
|
-
@pods_project.add_pod_group(pod_name, path, local, was_absolute)
|
578
|
-
end
|
579
|
-
|
580
|
-
if config.podfile_path
|
581
|
-
@pods_project.add_podfile(config.podfile_path)
|
582
|
-
end
|
583
|
-
|
584
|
-
sandbox.project = @pods_project
|
585
|
-
platforms = aggregate_targets.map(&:platform)
|
586
|
-
osx_deployment_target = platforms.select { |p| p.name == :osx }.map(&:deployment_target).min
|
587
|
-
ios_deployment_target = platforms.select { |p| p.name == :ios }.map(&:deployment_target).min
|
588
|
-
watchos_deployment_target = platforms.select { |p| p.name == :watchos }.map(&:deployment_target).min
|
589
|
-
tvos_deployment_target = platforms.select { |p| p.name == :tvos }.map(&:deployment_target).min
|
590
|
-
@pods_project.build_configurations.each do |build_configuration|
|
591
|
-
build_configuration.build_settings['MACOSX_DEPLOYMENT_TARGET'] = osx_deployment_target.to_s if osx_deployment_target
|
592
|
-
build_configuration.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = ios_deployment_target.to_s if ios_deployment_target
|
593
|
-
build_configuration.build_settings['WATCHOS_DEPLOYMENT_TARGET'] = watchos_deployment_target.to_s if watchos_deployment_target
|
594
|
-
build_configuration.build_settings['TVOS_DEPLOYMENT_TARGET'] = tvos_deployment_target.to_s if tvos_deployment_target
|
595
|
-
build_configuration.build_settings['STRIP_INSTALLED_PRODUCT'] = 'NO'
|
596
|
-
build_configuration.build_settings['CLANG_ENABLE_OBJC_ARC'] = 'YES'
|
597
|
-
end
|
598
|
-
end
|
599
|
-
end
|
600
|
-
|
601
|
-
# Installs the file references in the Pods project. This is done once per
|
602
|
-
# Pod as the same file reference might be shared by multiple aggregate
|
603
|
-
# targets.
|
604
|
-
#
|
605
|
-
# @return [void]
|
606
|
-
#
|
607
|
-
def install_file_references
|
608
|
-
installer = FileReferencesInstaller.new(sandbox, pod_targets, pods_project)
|
609
|
-
installer.install!
|
610
|
-
end
|
611
|
-
|
612
|
-
# Installs the aggregate targets of the Pods projects and generates their
|
613
|
-
# support files.
|
614
|
-
#
|
615
|
-
# @return [void]
|
616
|
-
#
|
617
|
-
def install_libraries
|
618
|
-
UI.message '- Installing targets' do
|
619
|
-
pod_targets.sort_by(&:name).each do |pod_target|
|
620
|
-
target_installer = PodTargetInstaller.new(sandbox, pod_target)
|
621
|
-
target_installer.install!
|
622
|
-
end
|
623
|
-
|
624
|
-
aggregate_targets.sort_by(&:name).each do |target|
|
625
|
-
target_installer = AggregateTargetInstaller.new(sandbox, target)
|
626
|
-
target_installer.install!
|
627
|
-
end
|
628
|
-
|
629
|
-
# TODO: Move and add specs
|
630
|
-
pod_targets.sort_by(&:name).each do |pod_target|
|
631
|
-
pod_target.file_accessors.each do |file_accessor|
|
632
|
-
file_accessor.spec_consumer.frameworks.each do |framework|
|
633
|
-
if pod_target.should_build?
|
634
|
-
pod_target.native_target.add_system_framework(framework)
|
635
|
-
end
|
636
|
-
end
|
637
|
-
end
|
638
|
-
end
|
639
|
-
end
|
640
|
-
end
|
641
|
-
|
642
|
-
# Adds a target dependency for each pod spec to each aggregate target and
|
643
|
-
# links the pod targets among each other.
|
644
|
-
#
|
645
|
-
# @return [void]
|
646
|
-
#
|
647
|
-
def set_target_dependencies
|
648
|
-
frameworks_group = pods_project.frameworks_group
|
649
|
-
aggregate_targets.each do |aggregate_target|
|
650
|
-
is_app_extension = !(aggregate_target.user_targets.map(&:symbol_type) &
|
651
|
-
[:app_extension, :watch_extension, :watch2_extension, :tv_extension]).empty?
|
652
|
-
is_app_extension ||= aggregate_target.user_targets.any? { |ut| ut.common_resolved_build_setting('APPLICATION_EXTENSION_API_ONLY') == 'YES' }
|
653
|
-
|
654
|
-
aggregate_target.pod_targets.each do |pod_target|
|
655
|
-
configure_app_extension_api_only_for_target(aggregate_target) if is_app_extension
|
656
|
-
|
657
|
-
unless pod_target.should_build?
|
658
|
-
pod_target.resource_bundle_targets.each do |resource_bundle_target|
|
659
|
-
aggregate_target.native_target.add_dependency(resource_bundle_target)
|
660
|
-
end
|
661
|
-
|
662
|
-
next
|
663
|
-
end
|
664
|
-
|
665
|
-
aggregate_target.native_target.add_dependency(pod_target.native_target)
|
666
|
-
configure_app_extension_api_only_for_target(pod_target) if is_app_extension
|
667
|
-
|
668
|
-
pod_target.dependent_targets.each do |pod_dependency_target|
|
669
|
-
next unless pod_dependency_target.should_build?
|
670
|
-
pod_target.native_target.add_dependency(pod_dependency_target.native_target)
|
671
|
-
configure_app_extension_api_only_for_target(pod_dependency_target) if is_app_extension
|
672
|
-
|
673
|
-
if pod_target.requires_frameworks?
|
674
|
-
product_ref = frameworks_group.files.find { |f| f.path == pod_dependency_target.product_name } ||
|
675
|
-
frameworks_group.new_product_ref_for_target(pod_dependency_target.product_basename, pod_dependency_target.product_type)
|
676
|
-
pod_target.native_target.frameworks_build_phase.add_file_reference(product_ref, true)
|
677
|
-
end
|
678
|
-
end
|
679
|
-
end
|
680
|
-
end
|
681
|
-
end
|
682
|
-
|
683
|
-
# Writes the Pods project to the disk.
|
684
|
-
#
|
685
|
-
# @return [void]
|
686
|
-
#
|
687
|
-
def write_pod_project
|
688
|
-
UI.message "- Writing Xcode project file to #{UI.path sandbox.project_path}" do
|
689
|
-
pods_project.pods.remove_from_project if pods_project.pods.empty?
|
690
|
-
pods_project.development_pods.remove_from_project if pods_project.development_pods.empty?
|
691
|
-
pods_project.sort(:groups_position => :below)
|
692
|
-
if installation_options.deterministic_uuids?
|
693
|
-
UI.message('- Generating deterministic UUIDs') { pods_project.predictabilize_uuids }
|
694
|
-
end
|
695
|
-
pods_project.recreate_user_schemes(false)
|
696
|
-
pods_project.save
|
697
|
-
end
|
698
|
-
end
|
699
|
-
|
700
|
-
# Shares schemes of development Pods.
|
701
|
-
#
|
702
|
-
# @return [void]
|
703
|
-
#
|
704
|
-
def share_development_pod_schemes
|
705
|
-
development_pod_targets.select(&:should_build?).each do |pod_target|
|
706
|
-
next unless share_scheme_for_development_pod?(pod_target.pod_name)
|
707
|
-
Xcodeproj::XCScheme.share_scheme(pods_project.path, pod_target.label)
|
708
|
-
end
|
709
|
-
end
|
710
|
-
|
711
|
-
# @param [String] pod The root name of the development pod.
|
712
|
-
#
|
713
|
-
# @return [Bool] whether the scheme for the given development pod should be
|
714
|
-
# shared.
|
715
|
-
#
|
716
|
-
def share_scheme_for_development_pod?(pod)
|
717
|
-
case dev_pods_to_share = installation_options.share_schemes_for_development_pods
|
718
|
-
when TrueClass, FalseClass, NilClass
|
719
|
-
dev_pods_to_share
|
720
|
-
when Array
|
721
|
-
dev_pods_to_share.any? { |dev_pod| dev_pod === pod } # rubocop:disable Style/CaseEquality
|
722
|
-
else
|
723
|
-
raise Informative, 'Unable to handle share_schemes_for_development_pods ' \
|
724
|
-
"being set to #{dev_pods_to_share.inspect} -- please set it to true, " \
|
725
|
-
'false, or an array of pods to share schemes for.'
|
726
|
-
end
|
727
|
-
end
|
728
|
-
|
729
574
|
# Writes the Podfile and the lock files.
|
730
575
|
#
|
731
576
|
# @todo Pass the checkout options to the Lockfile.
|
@@ -859,15 +704,6 @@ module Pod
|
|
859
704
|
analysis_result.sandbox_state
|
860
705
|
end
|
861
706
|
|
862
|
-
# Sets the APPLICATION_EXTENSION_API_ONLY build setting to YES for all
|
863
|
-
# configurations of the given target
|
864
|
-
#
|
865
|
-
def configure_app_extension_api_only_for_target(target)
|
866
|
-
target.native_target.build_configurations.each do |config|
|
867
|
-
config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'YES'
|
868
|
-
end
|
869
|
-
end
|
870
|
-
|
871
707
|
#-------------------------------------------------------------------------#
|
872
708
|
end
|
873
709
|
end
|