Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
C
cocoapods
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gengmeiios
cocoapods
Commits
b7764e4a
Commit
b7764e4a
authored
Apr 19, 2018
by
Samuel Giddins
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[BuildSettings] Group & document methods
parent
d89751bd
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
471 additions
and
172 deletions
+471
-172
build_settings.rb
lib/cocoapods/target/build_settings.rb
+469
-170
aggregate_spec.rb
spec/unit/target/build_settings/aggregate_spec.rb
+1
-1
pod_spec.rb
spec/unit/target/build_settings/pod_spec.rb
+1
-1
No files found.
lib/cocoapods/target/build_settings.rb
View file @
b7764e4a
...
@@ -2,8 +2,14 @@
...
@@ -2,8 +2,14 @@
module
Pod
module
Pod
class
Target
class
Target
# @since 1.5.0
class
BuildSettings
class
BuildSettings
PLURAL_SETTINGS
=
Set
.
new
%w(
#-------------------------------------------------------------------------#
# @!group Constants
# @return [Set<String>] The build settings that should be treated as arrays, rather than strings.
PLURAL_SETTINGS
=
%w(
ALTERNATE_PERMISSIONS_FILES
ALTERNATE_PERMISSIONS_FILES
ARCHS
ARCHS
BUILD_VARIANTS
BUILD_VARIANTS
...
@@ -25,15 +31,57 @@ module Pod
...
@@ -25,15 +31,57 @@ module Pod
SWIFT_INCLUDE_PATHS
SWIFT_INCLUDE_PATHS
WARNING_CFLAGS
WARNING_CFLAGS
WARNING_LDFLAGS
WARNING_LDFLAGS
)
)
.
to_set
.
freeze
# @return [String] The variable for the configuration build directory used when
# building pod targets.
CONFIGURATION_BUILD_DIR_VARIABLE
=
'${PODS_CONFIGURATION_BUILD_DIR}'
.
freeze
CONFIGURATION_BUILD_DIR_VARIABLE
=
'${PODS_CONFIGURATION_BUILD_DIR}'
.
freeze
# Creates a method that calculates a part of the build settings for the #target.
#-------------------------------------------------------------------------#
# @!group DSL
# Creates a method that calculates a part of the build settings for the {#target}.
#
# @!visibility private
#
# @param [Symbol,String] method_name
# The name of the method to define
#
# @param [Boolean] build_setting
# Whether the method name should be added (upcased) to {.build_setting_names}
#
# @param [Boolean] memoized
# Whether the method should be memoized
#
# @param [Boolean] sorted
# Whether the return value should be sorted
#
# @param [Boolean] uniqued
# Whether the return value should be uniqued
#
# @param [Boolean] compacted
# Whether the return value should be compacted
#
# @param [Boolean] frozen
# Whether the return value should be frozen
#
# @param [Boolean, Symbol] from_search_paths_aggregate_targets
# If truthy, the method from {Aggregate} that should be used to concatenate build settings from
# {::Pod::AggregateTarget#search_paths_aggregate_target}
#
# @param [Symbol] from_pod_targets_to_link
# If truthy, the `_to_import` values from `BuildSettings#pod_targets_to_link` will be concatenated
#
#
# @macro [attach]
# @param [Block] implementation
#
# @macro [attach] define_build_settings_method
# @!method $1
# @!method $1
#
#
# The `$1` build setting for the {#target}.
#
# The return value from this method will be: `${1--1}`.
#
def
self
.
define_build_settings_method
(
method_name
,
build_setting:
false
,
def
self
.
define_build_settings_method
(
method_name
,
build_setting:
false
,
memoized:
false
,
sorted:
false
,
uniqued:
false
,
compacted:
false
,
frozen:
true
,
memoized:
false
,
sorted:
false
,
uniqued:
false
,
compacted:
false
,
frozen:
true
,
from_search_paths_aggregate_targets:
false
,
from_pod_targets_to_link:
false
,
from_search_paths_aggregate_targets:
false
,
from_pod_targets_to_link:
false
,
...
@@ -73,97 +121,172 @@ module Pod
...
@@ -73,97 +121,172 @@ module Pod
retval
retval
end
end
end
end
private_class_method
:define_build_settings_method
def
__clear__
@__memoized
=
nil
end
class
<<
self
class
<<
self
#-------------------------------------------------------------------------#
# @!group Public API
# @return [Set<String>] a set of all the build settings names that will be present in the #xcconfig
attr_reader
:build_settings_names
attr_reader
:build_settings_names
end
end
#-------------------------------------------------------------------------#
# @!group Public API
# @return [Target] The target this
attr_reader
:target
attr_reader
:target
# @param [Target] target @see #target
def
initialize
(
target
)
def
initialize
(
target
)
@target
=
target
@target
=
target
end
end
define_build_settings_method
:gcc_preprocessor_definitions
,
:build_setting
=>
true
do
# @return [Xcodeproj::Config]
%w( COCOAPODS=1 )
define_build_settings_method
:xcconfig
,
:memoized
=>
true
do
settings
=
add_inherited_to_plural
(
to_h
)
Xcodeproj
::
Config
.
new
(
settings
)
end
end
define_build_settings_method
:framework_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
do
# @return [Xcodeproj::Config]
framework_search_paths_to_import_developer_frameworks
(
frameworks
)
#
# @!visibility private
# @see #__clear__
# @see #xcconfig
def
generate
__clear__
xcconfig
end
end
def
framework_search_paths_to_import_developer_frameworks
(
frameworks
)
# @return [Xcodeproj::Config]
if
frameworks
.
include?
(
'XCTest'
)
||
frameworks
.
include?
(
'SenTestingKit'
)
#
%w[ $(PLATFORM_DIR)/Developer/Library/Frameworks ]
# @see #xcconfig
else
#
[]
# @param [String,Pathname] path
end
def
save_as
(
path
)
xcconfig
.
save_as
(
path
)
end
end
define_build_settings_method
:other_cflags
,
:build_setting
=>
true
,
:memoized
=>
true
do
#-------------------------------------------------------------------------#
module_map_files
.
map
{
|
f
|
"-fmodule-map-file=
#{
f
}
"
}
# @!group Paths
# @return [String]
define_build_settings_method
:pods_build_dir
,
:build_setting
=>
true
do
'${BUILD_DIR}'
end
end
define_build_settings_method
:module_map_files
do
# @return [String]
[]
define_build_settings_method
:pods_configuration_build_dir
,
:build_setting
=>
true
do
'${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)'
end
end
#-------------------------------------------------------------------------#
# @!group Code Signing
# @return [String]
define_build_settings_method
:code_sign_identity
,
:build_setting
=>
true
do
return
unless
target
.
requires_frameworks?
return
unless
target
.
platform
.
to_sym
==
:osx
''
end
#-------------------------------------------------------------------------#
# @!group Frameworks
# @return [Array<String>]
define_build_settings_method
:frameworks
do
define_build_settings_method
:frameworks
do
[]
[]
end
end
# @return [Array<String>]
define_build_settings_method
:weak_frameworks
do
define_build_settings_method
:weak_frameworks
do
[]
[]
end
end
# @return [Array<String>]
define_build_settings_method
:framework_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
do
framework_search_paths_to_import_developer_frameworks
(
frameworks
)
end
# @param [Array<String>] frameworks
# The list of framework names
#
# @return [Array<String>]
# the `FRAMEWORK_SEARCH_PATHS` needed to import developer frameworks
def
framework_search_paths_to_import_developer_frameworks
(
frameworks
)
if
frameworks
.
include?
(
'XCTest'
)
||
frameworks
.
include?
(
'SenTestingKit'
)
%w[ $(PLATFORM_DIR)/Developer/Library/Frameworks ]
else
[]
end
end
#-------------------------------------------------------------------------#
# @!group Libraries
# @return [Array<String>]
define_build_settings_method
:libraries
do
define_build_settings_method
:libraries
do
[]
[]
end
end
define_build_settings_method
:requires_objc_linker_flag?
do
#-------------------------------------------------------------------------#
false
# @!group Clang
# @return [Array<String>]
define_build_settings_method
:gcc_preprocessor_definitions
,
:build_setting
=>
true
do
%w( COCOAPODS=1 )
end
end
define_build_settings_method
:requires_fobjc_arc?
do
# @return [Array<String>]
false
define_build_settings_method
:other_cflags
,
:build_setting
=>
true
,
:memoized
=>
true
do
module_map_files
.
map
{
|
f
|
"-fmodule-map-file=
#{
f
}
"
}
end
end
define_build_settings_method
:other_ldflags
,
:build_setting
=>
true
,
:memoized
=>
true
do
# @return [Array<String>]
ld_flags
=
[]
define_build_settings_method
:module_map_files
do
ld_flags
<<
'-ObjC'
if
requires_objc_linker_flag?
[]
if
requires_fobjc_arc?
ld_flags
<<
'-fobjc-arc'
end
libraries
.
each
{
|
l
|
ld_flags
<<
%(-l"#{l}")
}
frameworks
.
each
{
|
f
|
ld_flags
<<
'-framework'
<<
%("#{f}")
}
weak_frameworks
.
each
{
|
f
|
ld_flags
<<
'-weak_framework'
<<
%("#{f}")
}
ld_flags
end
end
#-------------------------------------------------------------------------#
# @!group Swift
# @return [Array<String>]
define_build_settings_method
:other_swift_flags
,
:build_setting
=>
true
,
:memoized
=>
true
do
define_build_settings_method
:other_swift_flags
,
:build_setting
=>
true
,
:memoized
=>
true
do
return
unless
target
.
uses_swift?
return
unless
target
.
uses_swift?
flags
=
%w(-D COCOAPODS)
flags
=
%w(-D COCOAPODS)
flags
.
concat
module_map_files
.
flat_map
{
|
f
|
[
'-Xcc'
,
"-fmodule-map-file=
#{
f
}
"
]
}
flags
.
concat
module_map_files
.
flat_map
{
|
f
|
[
'-Xcc'
,
"-fmodule-map-file=
#{
f
}
"
]
}
flags
end
end
define_build_settings_method
:pods_build_dir
,
:build_setting
=>
true
do
#-------------------------------------------------------------------------#
'${BUILD_DIR}'
end
define_build_settings_method
:code_sign_identity
,
:build_setting
=>
true
do
# @!group Linking
return
unless
target
.
requires_frameworks?
return
unless
target
.
platform
.
to_sym
==
:osx
# @return [Boolean]
''
define_build_settings_method
:requires_objc_linker_flag?
do
false
end
end
define_build_settings_method
:pods_configuration_build_dir
,
:build_setting
=>
true
do
# @return [Boolean]
'${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)'
define_build_settings_method
:requires_fobjc_arc?
do
false
end
end
# @return [Array<String>]
# the `LD_RUNPATH_SEARCH_PATHS` needed for dynamically linking the {#target}
#
# @param [Boolean] requires_host_target
#
# @param [Boolean] test_bundle
#
def
_ld_runpath_search_paths
(
requires_host_target:
false
,
test_bundle:
false
)
def
_ld_runpath_search_paths
(
requires_host_target:
false
,
test_bundle:
false
)
if
target
.
platform
.
symbolic_name
==
:osx
if
target
.
platform
.
symbolic_name
==
:osx
[
"'@executable_path/../Frameworks'"
,
[
"'@executable_path/../Frameworks'"
,
...
@@ -177,21 +300,35 @@ module Pod
...
@@ -177,21 +300,35 @@ module Pod
paths
paths
end
end
end
end
private
:_ld_runpath_search_paths
define_build_settings_method
:xcconfig
,
:memoized
=>
true
do
# @return [Array<String>]
settings
=
add_inherited_to_plural
(
to_h
)
define_build_settings_method
:other_ldflags
,
:build_setting
=>
true
,
:memoized
=>
true
do
Xcodeproj
::
Config
.
new
(
settings
)
ld_flags
=
[]
ld_flags
<<
'-ObjC'
if
requires_objc_linker_flag?
if
requires_fobjc_arc?
ld_flags
<<
'-fobjc-arc'
end
libraries
.
each
{
|
l
|
ld_flags
<<
%(-l"#{l}")
}
frameworks
.
each
{
|
f
|
ld_flags
<<
'-framework'
<<
%("#{f}")
}
weak_frameworks
.
each
{
|
f
|
ld_flags
<<
'-weak_framework'
<<
%("#{f}")
}
ld_flags
end
end
def
generate
#-------------------------------------------------------------------------#
__clear__
xcconfig
end
def
save_as
(
path
)
# @!group Private Methods
xcconfig
.
save_as
(
path
)
# Clears all memoized settings.
# @!visibility private
# @return [Void]
def
__clear__
@__memoized
=
nil
end
end
private
# @return [Hash<String => String|Array<String>>]
def
to_h
def
to_h
hash
=
{}
hash
=
{}
self
.
class
.
build_settings_names
.
sort
.
each
do
|
setting
|
self
.
class
.
build_settings_names
.
sort
.
each
do
|
setting
|
...
@@ -200,6 +337,7 @@ module Pod
...
@@ -200,6 +337,7 @@ module Pod
hash
hash
end
end
# @return [Hash<String => String>]
def
add_inherited_to_plural
(
hash
)
def
add_inherited_to_plural
(
hash
)
Hash
[
hash
.
map
do
|
key
,
value
|
Hash
[
hash
.
map
do
|
key
,
value
|
next
[
key
,
'$(inherited)'
]
if
value
.
nil?
next
[
key
,
'$(inherited)'
]
if
value
.
nil?
...
@@ -215,6 +353,10 @@ module Pod
...
@@ -215,6 +353,10 @@ module Pod
end
]
end
]
end
end
# @return [Array<String>]
#
# @param [Array<String>] array
#
def
quote_array
(
array
)
def
quote_array
(
array
)
array
.
map
do
|
element
|
array
.
map
do
|
element
|
case
element
case
element
...
@@ -231,28 +373,62 @@ module Pod
...
@@ -231,28 +373,62 @@ module Pod
end
.
join
(
' '
)
end
.
join
(
' '
)
end
end
# A subclass that generates build settings for a {PodTarget}
class
Pod
<
BuildSettings
class
Pod
<
BuildSettings
#-------------------------------------------------------------------------#
# @!group Public API
# @see BuildSettings.build_settings_names
def
self
.
build_settings_names
def
self
.
build_settings_names
@build_settings_names
|
BuildSettings
.
build_settings_names
@build_settings_names
|
BuildSettings
.
build_settings_names
end
end
# @return [Boolean]
# whether settings are being generated for a test bundle
#
attr_reader
:test_xcconfig
attr_reader
:test_xcconfig
alias
test_xcconfig?
test_xcconfig
alias
test_xcconfig?
test_xcconfig
# @param [PodTarget] target @see #target
#
# @param [Boolean] test_xcconfig @see #test_xcconfig?
#
def
initialize
(
target
,
test_xcconfig
)
def
initialize
(
target
,
test_xcconfig
)
super
(
target
)
super
(
target
)
@test_xcconfig
=
test_xcconfig
@test_xcconfig
=
test_xcconfig
end
end
def
__clear__
# @return [Xcodeproj::Xconfig]
super
define_build_settings_method
:xcconfig
,
:memoized
=>
true
do
dependent_targets
.
each
{
|
pt
|
pt
.
build_settings
.
__clear__
}
xcconfig
=
super
()
xcconfig
.
merge
(
pod_target_xcconfig
)
end
#-------------------------------------------------------------------------#
# @!group Paths
# @return [String]
define_build_settings_method
:pods_root
,
:build_setting
=>
true
do
'${SRCROOT}'
end
end
# @return [String]
define_build_settings_method
:pods_target_srcroot
,
:build_setting
=>
true
do
target
.
pod_target_srcroot
end
#-------------------------------------------------------------------------#
# @!group Frameworks
# @return [Array<String>]
define_build_settings_method
:consumer_frameworks
,
:memoized
=>
true
do
define_build_settings_method
:consumer_frameworks
,
:memoized
=>
true
do
spec_consumers
.
flat_map
(
&
:frameworks
)
spec_consumers
.
flat_map
(
&
:frameworks
)
end
end
# @return [Array<String>]
define_build_settings_method
:frameworks
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
define_build_settings_method
:frameworks
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
return
[]
if
(
!
target
.
requires_frameworks?
||
target
.
static_framework?
)
&&
!
test_xcconfig?
return
[]
if
(
!
target
.
requires_frameworks?
||
target
.
static_framework?
)
&&
!
test_xcconfig?
...
@@ -263,12 +439,14 @@ module Pod
...
@@ -263,12 +439,14 @@ module Pod
frameworks
frameworks
end
end
# @return [Array<String>]
define_build_settings_method
:static_frameworks_to_import
,
:memoized
=>
true
do
define_build_settings_method
:static_frameworks_to_import
,
:memoized
=>
true
do
static_frameworks_to_import
=
vendored_static_frameworks
.
map
{
|
f
|
File
.
basename
(
f
,
'.framework'
)
}
static_frameworks_to_import
=
vendored_static_frameworks
.
map
{
|
f
|
File
.
basename
(
f
,
'.framework'
)
}
static_frameworks_to_import
<<
target
.
product_basename
if
target
.
should_build?
&&
target
.
requires_frameworks?
&&
target
.
static_framework?
static_frameworks_to_import
<<
target
.
product_basename
if
target
.
should_build?
&&
target
.
requires_frameworks?
&&
target
.
static_framework?
static_frameworks_to_import
static_frameworks_to_import
end
end
# @return [Array<String>]
define_build_settings_method
:dynamic_frameworks_to_import
,
:memoized
=>
true
do
define_build_settings_method
:dynamic_frameworks_to_import
,
:memoized
=>
true
do
dynamic_frameworks_to_import
=
vendored_dynamic_frameworks
.
map
{
|
f
|
File
.
basename
(
f
,
'.framework'
)
}
dynamic_frameworks_to_import
=
vendored_dynamic_frameworks
.
map
{
|
f
|
File
.
basename
(
f
,
'.framework'
)
}
dynamic_frameworks_to_import
<<
target
.
product_basename
if
target
.
should_build?
&&
target
.
requires_frameworks?
&&
!
target
.
static_framework?
dynamic_frameworks_to_import
<<
target
.
product_basename
if
target
.
should_build?
&&
target
.
requires_frameworks?
&&
!
target
.
static_framework?
...
@@ -276,6 +454,7 @@ module Pod
...
@@ -276,6 +454,7 @@ module Pod
dynamic_frameworks_to_import
dynamic_frameworks_to_import
end
end
# @return [Array<String>]
define_build_settings_method
:weak_frameworks
,
:memoized
=>
true
do
define_build_settings_method
:weak_frameworks
,
:memoized
=>
true
do
return
[]
if
(
!
target
.
requires_frameworks?
||
target
.
static_framework?
)
&&
!
test_xcconfig?
return
[]
if
(
!
target
.
requires_frameworks?
||
target
.
static_framework?
)
&&
!
test_xcconfig?
...
@@ -284,6 +463,54 @@ module Pod
...
@@ -284,6 +463,54 @@ module Pod
weak_frameworks
weak_frameworks
end
end
# @return [Array<String>]
define_build_settings_method
:frameworks_to_import
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
static_frameworks_to_import
+
dynamic_frameworks_to_import
end
# @return [Array<String>]
define_build_settings_method
:weak_frameworks_to_import
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
[]
end
# @return [Array<String>]
define_build_settings_method
:framework_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
paths
=
super
().
dup
paths
.
concat
dependent_targets
.
flat_map
{
|
t
|
t
.
build_settings
.
framework_search_paths_to_import
}
paths
.
concat
framework_search_paths_to_import
paths
.
delete
(
target
.
configuration_build_dir
(
CONFIGURATION_BUILD_DIR_VARIABLE
))
unless
test_xcconfig?
paths
end
# @return [Array<String>]
define_build_settings_method
:vendored_framework_search_paths
,
:memoized
=>
true
do
file_accessors
.
flat_map
(
&
:vendored_frameworks
).
map
{
|
f
|
File
.
join
'${PODS_ROOT}'
,
f
.
dirname
.
relative_path_from
(
target
.
sandbox
.
root
)
}
end
# @return [Array<String>]
define_build_settings_method
:framework_search_paths_to_import
,
:memoized
=>
true
do
paths
=
framework_search_paths_to_import_developer_frameworks
(
consumer_frameworks
)
paths
.
concat
vendored_framework_search_paths
return
paths
unless
target
.
requires_frameworks?
&&
target
.
should_build?
paths
+
[
target
.
configuration_build_dir
(
CONFIGURATION_BUILD_DIR_VARIABLE
)]
end
# @return [Array<String>]
define_build_settings_method
:vendored_static_frameworks
,
:memoized
=>
true
do
file_accessors
.
flat_map
(
&
:vendored_static_frameworks
)
end
# @return [Array<String>]
define_build_settings_method
:vendored_dynamic_frameworks
,
:memoized
=>
true
do
file_accessors
.
flat_map
(
&
:vendored_dynamic_frameworks
)
end
#-------------------------------------------------------------------------#
# @!group Libraries
# @return [Array<String>]
define_build_settings_method
:libraries
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
define_build_settings_method
:libraries
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
return
[]
if
(
!
target
.
requires_frameworks?
||
target
.
static_framework?
)
&&
!
test_xcconfig?
return
[]
if
(
!
target
.
requires_frameworks?
||
target
.
static_framework?
)
&&
!
test_xcconfig?
...
@@ -294,62 +521,25 @@ module Pod
...
@@ -294,62 +521,25 @@ module Pod
libraries
libraries
end
end
# @return [Array<String>]
define_build_settings_method
:static_libraries_to_import
,
:memoized
=>
true
do
define_build_settings_method
:static_libraries_to_import
,
:memoized
=>
true
do
static_libraries_to_import
=
vendored_static_libraries
.
map
{
|
l
|
File
.
basename
(
l
,
l
.
extname
).
sub
(
/\Alib/
,
''
)
}
static_libraries_to_import
=
vendored_static_libraries
.
map
{
|
l
|
File
.
basename
(
l
,
l
.
extname
).
sub
(
/\Alib/
,
''
)
}
static_libraries_to_import
<<
target
.
product_basename
if
target
.
should_build?
&&
!
target
.
requires_frameworks?
static_libraries_to_import
<<
target
.
product_basename
if
target
.
should_build?
&&
!
target
.
requires_frameworks?
static_libraries_to_import
static_libraries_to_import
end
end
# @return [Array<String>]
define_build_settings_method
:dynamic_libraries_to_import
,
:memoized
=>
true
do
define_build_settings_method
:dynamic_libraries_to_import
,
:memoized
=>
true
do
vendored_dynamic_libraries
.
map
{
|
l
|
File
.
basename
(
l
,
l
.
extname
).
sub
(
/\Alib/
,
''
)
}
+
vendored_dynamic_libraries
.
map
{
|
l
|
File
.
basename
(
l
,
l
.
extname
).
sub
(
/\Alib/
,
''
)
}
+
spec_consumers
.
flat_map
(
&
:libraries
)
spec_consumers
.
flat_map
(
&
:libraries
)
end
end
define_build_settings_method
:module_map_files
,
:memoized
=>
true
do
# @return [Array<String>]
dependent_targets
.
map
{
|
t
|
t
.
build_settings
.
module_map_file_to_import
}.
compact
.
sort
end
define_build_settings_method
:module_map_file_to_import
,
:memoized
=>
true
do
return
if
target
.
requires_frameworks?
return
unless
target
.
defines_module?
if
target
.
uses_swift?
# for swift, we have a custom build phase that copies in the module map, appending the .Swift module
"${PODS_CONFIGURATION_BUILD_DIR}/
#{
target
.
label
}
/
#{
target
.
product_module_name
}
.modulemap"
else
"${PODS_ROOT}/
#{
target
.
module_map_path
.
relative_path_from
(
target
.
sandbox
.
root
)
}
"
end
end
define_build_settings_method
:spec_consumers
,
:memoized
=>
true
do
target
.
spec_consumers
.
select
{
|
c
|
c
.
spec
.
test_specification?
==
test_xcconfig?
}
end
define_build_settings_method
:pods_root
,
:build_setting
=>
true
do
'${SRCROOT}'
end
define_build_settings_method
:libraries_to_import
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
define_build_settings_method
:libraries_to_import
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
static_libraries_to_import
+
dynamic_libraries_to_import
static_libraries_to_import
+
dynamic_libraries_to_import
end
end
define_build_settings_method
:frameworks_to_import
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
# @return [Array<String>]
static_frameworks_to_import
+
dynamic_frameworks_to_import
end
define_build_settings_method
:weak_frameworks_to_import
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
[]
end
define_build_settings_method
:header_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
do
target
.
header_search_paths
(
test_xcconfig?
)
end
define_build_settings_method
:xcconfig
,
:memoized
=>
true
do
xcconfig
=
super
()
xcconfig
.
merge
(
pod_target_xcconfig
)
end
define_build_settings_method
:library_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
define_build_settings_method
:library_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
vendored
=
vendored_dynamic_library_search_paths
.
dup
vendored
=
vendored_dynamic_library_search_paths
.
dup
vendored
.
concat
dependent_targets
.
flat_map
{
|
t
|
t
.
build_settings
.
vendored_dynamic_library_search_paths
}
vendored
.
concat
dependent_targets
.
flat_map
{
|
t
|
t
.
build_settings
.
vendored_dynamic_library_search_paths
}
...
@@ -361,30 +551,27 @@ module Pod
...
@@ -361,30 +551,27 @@ module Pod
vendored
vendored
end
end
# @return [Array<String>]
define_build_settings_method
:vendored_static_libraries
,
:memoized
=>
true
do
define_build_settings_method
:vendored_static_libraries
,
:memoized
=>
true
do
file_accessors
.
flat_map
(
&
:vendored_static_libraries
)
file_accessors
.
flat_map
(
&
:vendored_static_libraries
)
end
end
# @return [Array<String>]
define_build_settings_method
:vendored_dynamic_libraries
,
:memoized
=>
true
do
define_build_settings_method
:vendored_dynamic_libraries
,
:memoized
=>
true
do
file_accessors
.
flat_map
(
&
:vendored_dynamic_libraries
)
file_accessors
.
flat_map
(
&
:vendored_dynamic_libraries
)
end
end
define_build_settings_method
:vendored_static_frameworks
,
:memoized
=>
true
do
# @return [Array<String>]
file_accessors
.
flat_map
(
&
:vendored_static_frameworks
)
end
define_build_settings_method
:vendored_dynamic_frameworks
,
:memoized
=>
true
do
file_accessors
.
flat_map
(
&
:vendored_dynamic_frameworks
)
end
define_build_settings_method
:vendored_static_library_search_paths
,
:memoized
=>
true
do
define_build_settings_method
:vendored_static_library_search_paths
,
:memoized
=>
true
do
vendored_static_libraries
.
map
{
|
f
|
File
.
join
'${PODS_ROOT}'
,
f
.
dirname
.
relative_path_from
(
target
.
sandbox
.
root
)
}
vendored_static_libraries
.
map
{
|
f
|
File
.
join
'${PODS_ROOT}'
,
f
.
dirname
.
relative_path_from
(
target
.
sandbox
.
root
)
}
end
end
# @return [Array<String>]
define_build_settings_method
:vendored_dynamic_library_search_paths
,
:memoized
=>
true
do
define_build_settings_method
:vendored_dynamic_library_search_paths
,
:memoized
=>
true
do
vendored_dynamic_libraries
.
map
{
|
f
|
File
.
join
'${PODS_ROOT}'
,
f
.
dirname
.
relative_path_from
(
target
.
sandbox
.
root
)
}
vendored_dynamic_libraries
.
map
{
|
f
|
File
.
join
'${PODS_ROOT}'
,
f
.
dirname
.
relative_path_from
(
target
.
sandbox
.
root
)
}
end
end
# @return [Array<String>]
define_build_settings_method
:library_search_paths_to_import
,
:memoized
=>
true
do
define_build_settings_method
:library_search_paths_to_import
,
:memoized
=>
true
do
vendored_library_search_paths
=
vendored_static_library_search_paths
+
vendored_dynamic_library_search_paths
vendored_library_search_paths
=
vendored_static_library_search_paths
+
vendored_dynamic_library_search_paths
return
vendored_library_search_paths
if
target
.
requires_frameworks?
||
!
target
.
should_build?
return
vendored_library_search_paths
if
target
.
requires_frameworks?
||
!
target
.
should_build?
...
@@ -392,26 +579,38 @@ module Pod
...
@@ -392,26 +579,38 @@ module Pod
vendored_library_search_paths
<<
target
.
configuration_build_dir
(
CONFIGURATION_BUILD_DIR_VARIABLE
)
vendored_library_search_paths
<<
target
.
configuration_build_dir
(
CONFIGURATION_BUILD_DIR_VARIABLE
)
end
end
define_build_settings_method
:framework_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
#-------------------------------------------------------------------------#
paths
=
super
().
dup
paths
.
concat
dependent_targets
.
flat_map
{
|
t
|
t
.
build_settings
.
framework_search_paths_to_import
}
paths
.
concat
framework_search_paths_to_import
paths
.
delete
(
target
.
configuration_build_dir
(
CONFIGURATION_BUILD_DIR_VARIABLE
))
unless
test_xcconfig?
paths
end
define_build_settings_method
:vendored_framework_search_paths
,
:memoized
=>
true
do
# @!group Clang
file_accessors
.
flat_map
(
&
:vendored_frameworks
).
map
{
|
f
|
File
.
join
'${PODS_ROOT}'
,
f
.
dirname
.
relative_path_from
(
target
.
sandbox
.
root
)
}
# @return [Array<String>]
define_build_settings_method
:module_map_files
,
:memoized
=>
true
do
dependent_targets
.
map
{
|
t
|
t
.
build_settings
.
module_map_file_to_import
}.
compact
.
sort
end
end
define_build_settings_method
:framework_search_paths_to_import
,
:memoized
=>
true
do
# @return [Array<String>]
paths
=
framework_search_paths_to_import_developer_frameworks
(
consumer_frameworks
)
define_build_settings_method
:module_map_file_to_import
,
:memoized
=>
true
do
paths
.
concat
vendored_framework_search_paths
return
if
target
.
requires_frameworks?
return
paths
unless
target
.
requires_frameworks?
&&
target
.
should_build
?
return
unless
target
.
defines_module
?
paths
+
[
target
.
configuration_build_dir
(
CONFIGURATION_BUILD_DIR_VARIABLE
)]
if
target
.
uses_swift?
# for swift, we have a custom build phase that copies in the module map, appending the .Swift module
"${PODS_CONFIGURATION_BUILD_DIR}/
#{
target
.
label
}
/
#{
target
.
product_module_name
}
.modulemap"
else
"${PODS_ROOT}/
#{
target
.
module_map_path
.
relative_path_from
(
target
.
sandbox
.
root
)
}
"
end
end
# @return [Array<String>]
define_build_settings_method
:header_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
do
target
.
header_search_paths
(
test_xcconfig?
)
end
end
#-------------------------------------------------------------------------#
# @!group Swift
# @return [Array<String>]
define_build_settings_method
:other_swift_flags
,
:build_setting
=>
true
,
:memoized
=>
true
do
define_build_settings_method
:other_swift_flags
,
:build_setting
=>
true
,
:memoized
=>
true
do
return
unless
target
.
uses_swift?
return
unless
target
.
uses_swift?
flags
=
super
()
flags
=
super
()
...
@@ -422,44 +621,70 @@ module Pod
...
@@ -422,44 +621,70 @@ module Pod
flags
flags
end
end
# @return [Array<String>]
define_build_settings_method
:swift_include_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
define_build_settings_method
:swift_include_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
paths
=
dependent_targets
.
flat_map
{
|
t
|
t
.
build_settings
.
swift_include_paths_to_import
}
paths
=
dependent_targets
.
flat_map
{
|
t
|
t
.
build_settings
.
swift_include_paths_to_import
}
paths
.
concat
swift_include_paths_to_import
if
test_xcconfig?
paths
.
concat
swift_include_paths_to_import
if
test_xcconfig?
paths
paths
end
end
# @return [Array<String>]
define_build_settings_method
:swift_include_paths_to_import
,
:memoized
=>
true
do
define_build_settings_method
:swift_include_paths_to_import
,
:memoized
=>
true
do
return
[]
unless
target
.
uses_swift?
&&
!
target
.
requires_frameworks?
return
[]
unless
target
.
uses_swift?
&&
!
target
.
requires_frameworks?
[
target
.
configuration_build_dir
(
CONFIGURATION_BUILD_DIR_VARIABLE
)]
[
target
.
configuration_build_dir
(
CONFIGURATION_BUILD_DIR_VARIABLE
)]
end
end
define_build_settings_method
:pods_target_srcroot
,
:build_setting
=>
true
do
#-------------------------------------------------------------------------#
target
.
pod_target_srcroot
end
define_build_settings_method
:skip_install
,
:build_setting
=>
true
do
# @!group Linking
'YES'
end
# @return [Boolean] whether the `-ObjC` linker flag is required.
#
# @note this is only true when generating build settings for a test bundle
#
def
requires_objc_linker_flag?
def
requires_objc_linker_flag?
test_xcconfig?
test_xcconfig?
end
end
# @return [Boolean] whether the `-fobjc-arc` linker flag is required.
#
define_build_settings_method
:requires_fobjc_arc?
,
:memoized
=>
true
do
define_build_settings_method
:requires_fobjc_arc?
,
:memoized
=>
true
do
target
.
podfile
.
set_arc_compatibility_flag?
&&
target
.
podfile
.
set_arc_compatibility_flag?
&&
file_accessors
.
any?
{
|
fa
|
fa
.
spec_consumer
.
requires_arc?
}
file_accessors
.
any?
{
|
fa
|
fa
.
spec_consumer
.
requires_arc?
}
end
end
# @return [Array<String>]
define_build_settings_method
:ld_runpath_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
do
return
unless
test_xcconfig?
_ld_runpath_search_paths
(
:test_bundle
=>
true
)
end
#-------------------------------------------------------------------------#
# @!group Packaging
# @return [String]
define_build_settings_method
:skip_install
,
:build_setting
=>
true
do
'YES'
end
# @return [String]
define_build_settings_method
:product_bundle_identifier
,
:build_setting
=>
true
do
define_build_settings_method
:product_bundle_identifier
,
:build_setting
=>
true
do
'org.cocoapods.${PRODUCT_NAME:rfc1034identifier}'
'org.cocoapods.${PRODUCT_NAME:rfc1034identifier}'
end
end
# @return [String]
define_build_settings_method
:configuration_build_dir
,
:build_setting
=>
true
,
:memoized
=>
true
do
define_build_settings_method
:configuration_build_dir
,
:build_setting
=>
true
,
:memoized
=>
true
do
return
if
test_xcconfig?
return
if
test_xcconfig?
target
.
configuration_build_dir
(
CONFIGURATION_BUILD_DIR_VARIABLE
)
target
.
configuration_build_dir
(
CONFIGURATION_BUILD_DIR_VARIABLE
)
end
end
#-------------------------------------------------------------------------#
# @!group Target Properties
# @return [Array<PodTarget>]
define_build_settings_method
:dependent_targets
,
:memoized
=>
true
do
define_build_settings_method
:dependent_targets
,
:memoized
=>
true
do
if
test_xcconfig?
if
test_xcconfig?
target
.
all_dependent_targets
target
.
all_dependent_targets
...
@@ -468,6 +693,7 @@ module Pod
...
@@ -468,6 +693,7 @@ module Pod
end
end
end
end
# @return [Hash<String => String>]
define_build_settings_method
:pod_target_xcconfig
,
:memoized
=>
true
do
define_build_settings_method
:pod_target_xcconfig
,
:memoized
=>
true
do
config
=
{}
config
=
{}
...
@@ -478,63 +704,106 @@ module Pod
...
@@ -478,63 +704,106 @@ module Pod
config
config
end
end
# @return [Array<Sandbox::FileAccessor>]
define_build_settings_method
:file_accessors
,
:memoized
=>
true
do
define_build_settings_method
:file_accessors
,
:memoized
=>
true
do
target
.
file_accessors
.
select
{
|
fa
|
fa
.
spec
.
test_specification?
==
test_xcconfig?
}
target
.
file_accessors
.
select
{
|
fa
|
fa
.
spec
.
test_specification?
==
test_xcconfig?
}
end
end
define_build_settings_method
:ld_runpath_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
do
# @return [Array<Specification::Consumer>]
return
unless
test_xcconfig?
define_build_settings_method
:spec_consumers
,
:memoized
=>
true
do
_ld_runpath_search_paths
(
:test_bundle
=>
true
)
target
.
spec_consumers
.
select
{
|
c
|
c
.
spec
.
test_specification?
==
test_xcconfig?
}
end
#-------------------------------------------------------------------------#
# @!group Private Methods
def
__clear__
super
dependent_targets
.
each
{
|
pt
|
pt
.
build_settings
.
__clear__
}
end
end
end
end
# A subclass that generates build settings for a `PodTarget`
class
Aggregate
<
BuildSettings
class
Aggregate
<
BuildSettings
#-------------------------------------------------------------------------#
# @!group Public API
# @see BuildSettings.build_settings_names
def
self
.
build_settings_names
def
self
.
build_settings_names
@build_settings_names
|
BuildSettings
.
build_settings_names
@build_settings_names
|
BuildSettings
.
build_settings_names
end
end
# @return [String]
# The build configuration these settings will be used for
attr_reader
:configuration_name
attr_reader
:configuration_name
# @param [AggregateTarget] target @see #target
# @param [String] configuration_name @see #configuration_name
def
initialize
(
target
,
configuration_name
)
def
initialize
(
target
,
configuration_name
)
super
(
target
)
super
(
target
)
@configuration_name
=
configuration_name
@configuration_name
=
configuration_name
end
end
# @return [Xcodeproj::Config] xcconfig
define_build_settings_method
:xcconfig
,
:memoized
=>
true
do
define_build_settings_method
:xcconfig
,
:memoized
=>
true
do
xcconfig
=
super
()
xcconfig
=
super
()
xcconfig
.
merge
(
merged_user_target_xcconfigs
)
xcconfig
.
merge
(
merged_user_target_xcconfigs
)
end
end
def
__clear__
#-------------------------------------------------------------------------#
super
pod_targets
.
each
{
|
pt
|
pt
.
build_settings
.
__clear__
}
target
.
search_paths_aggregate_targets
.
each
{
|
at
|
at
.
build_settings
(
configuration_name
).
__clear__
}
end
define_build_settings_method
:libraries
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
,
:from_pod_targets_to_link
=>
true
,
:from_search_paths_aggregate_targets
=>
:dynamic_libraries_to_import
do
# @!group Paths
[]
# @return [String]
define_build_settings_method
:pods_podfile_dir_path
,
:build_setting
=>
true
,
:memoized
=>
true
do
target
.
podfile_dir_relative_path
end
end
define_build_settings_method
:library_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
,
:from_pod_targets_to_link
=>
true
,
:from_search_paths_aggregate_targets
=>
:vendored_dynamic_library_search_paths
do
# @return [String]
[]
define_build_settings_method
:pods_root
,
:build_setting
=>
true
,
:memoized
=>
true
do
target
.
relative_pods_root
end
end
#-------------------------------------------------------------------------#
# @!group Frameworks
# @return [Array<String>]
define_build_settings_method
:frameworks
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
,
:from_pod_targets_to_link
=>
true
,
:from_search_paths_aggregate_targets
=>
:dynamic_frameworks_to_import
do
define_build_settings_method
:frameworks
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
,
:from_pod_targets_to_link
=>
true
,
:from_search_paths_aggregate_targets
=>
:dynamic_frameworks_to_import
do
[]
[]
end
end
# @return [Array<String>]
define_build_settings_method
:weak_frameworks
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
,
:from_pod_targets_to_link
=>
true
,
:from_search_paths_aggregate_targets
=>
:weak_frameworks
do
define_build_settings_method
:weak_frameworks
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
,
:from_pod_targets_to_link
=>
true
,
:from_search_paths_aggregate_targets
=>
:weak_frameworks
do
[]
[]
end
end
# @return [Array<String>]
define_build_settings_method
:framework_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
,
:from_pod_targets_to_link
=>
true
,
:from_search_paths_aggregate_targets
=>
:framework_search_paths_to_import
do
define_build_settings_method
:framework_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
,
:from_pod_targets_to_link
=>
true
,
:from_search_paths_aggregate_targets
=>
:framework_search_paths_to_import
do
[]
[]
end
end
define_build_settings_method
:swift_include_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
,
:from_pod_targets_to_link
=>
true
,
:from_search_paths_aggregate_targets
=>
:swift_include_paths_to_import
do
#-------------------------------------------------------------------------#
# @!group Libraries
# @return [Array<String>]
define_build_settings_method
:libraries
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
,
:from_pod_targets_to_link
=>
true
,
:from_search_paths_aggregate_targets
=>
:dynamic_libraries_to_import
do
[]
[]
end
end
# @return [Array<String>]
define_build_settings_method
:library_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
,
:from_pod_targets_to_link
=>
true
,
:from_search_paths_aggregate_targets
=>
:vendored_dynamic_library_search_paths
do
[]
end
#-------------------------------------------------------------------------#
# @!group Clang
# @return [Array<String>]
define_build_settings_method
:header_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
define_build_settings_method
:header_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
paths
=
[]
paths
=
[]
...
@@ -547,10 +816,7 @@ module Pod
...
@@ -547,10 +816,7 @@ module Pod
paths
paths
end
end
define_build_settings_method
:pods_podfile_dir_path
,
:build_setting
=>
true
,
:memoized
=>
true
do
# @return [Array<String>]
target
.
podfile_dir_relative_path
end
define_build_settings_method
:other_cflags
,
:build_setting
=>
true
,
:memoized
=>
true
do
define_build_settings_method
:other_cflags
,
:build_setting
=>
true
,
:memoized
=>
true
do
flags
=
super
()
flags
=
super
()
flags
+
flags
+
...
@@ -558,6 +824,7 @@ module Pod
...
@@ -558,6 +824,7 @@ module Pod
framework_header_paths_for_iquote
.
flat_map
{
|
p
|
[
'-iquote'
,
p
]
}
framework_header_paths_for_iquote
.
flat_map
{
|
p
|
[
'-iquote'
,
p
]
}
end
end
# @return [Array<String>]
define_build_settings_method
:framework_header_paths_for_iquote
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
define_build_settings_method
:framework_header_paths_for_iquote
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
do
paths
=
pod_targets
.
paths
=
pod_targets
.
select
{
|
pt
|
pt
.
should_build?
&&
pt
.
requires_frameworks?
}.
select
{
|
pt
|
pt
.
should_build?
&&
pt
.
requires_frameworks?
}.
...
@@ -566,10 +833,46 @@ module Pod
...
@@ -566,10 +833,46 @@ module Pod
paths
paths
end
end
define_build_settings_method
:pods_root
,
:build_setting
=>
true
,
:memoized
=>
true
do
# @return [Array<String>]
target
.
relative_pods_root
define_build_settings_method
:module_map_files
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
,
:compacted
=>
true
,
:from_search_paths_aggregate_targets
=>
:module_map_file_to_import
do
pod_targets
.
map
{
|
t
|
t
.
build_settings
.
module_map_file_to_import
}
end
#-------------------------------------------------------------------------#
# @!group Swift
# @return [Array<String>]
define_build_settings_method
:swift_include_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
,
:from_pod_targets_to_link
=>
true
,
:from_search_paths_aggregate_targets
=>
:swift_include_paths_to_import
do
[]
end
# @return [String]
define_build_settings_method
:always_embed_swift_standard_libraries
,
:build_setting
=>
true
,
:memoized
=>
true
do
return
unless
must_embed_swift?
return
if
target_swift_version
<
EMBED_STANDARD_LIBRARIES_MINIMUM_VERSION
'YES'
end
# @return [String]
define_build_settings_method
:embedded_content_contains_swift
,
:build_setting
=>
true
,
:memoized
=>
true
do
return
unless
must_embed_swift?
return
if
target_swift_version
>=
EMBED_STANDARD_LIBRARIES_MINIMUM_VERSION
'YES'
end
end
# @return [Boolean]
define_build_settings_method
:must_embed_swift?
,
:memoized
=>
true
do
!
target
.
requires_host_target?
&&
pod_targets
.
any?
(
&
:uses_swift?
)
end
#-------------------------------------------------------------------------#
# @!group Linking
# @return [Array<String>]
define_build_settings_method
:ld_runpath_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:uniqued
=>
true
do
define_build_settings_method
:ld_runpath_search_paths
,
:build_setting
=>
true
,
:memoized
=>
true
,
:uniqued
=>
true
do
return
unless
target
.
requires_frameworks?
||
any_vendored_dynamic_artifacts?
return
unless
target
.
requires_frameworks?
||
any_vendored_dynamic_artifacts?
symbol_type
=
target
.
user_targets
.
map
(
&
:symbol_type
).
uniq
.
first
symbol_type
=
target
.
user_targets
.
map
(
&
:symbol_type
).
uniq
.
first
...
@@ -577,6 +880,7 @@ module Pod
...
@@ -577,6 +880,7 @@ module Pod
_ld_runpath_search_paths
(
:requires_host_target
=>
target
.
requires_host_target?
,
:test_bundle
=>
test_bundle
)
_ld_runpath_search_paths
(
:requires_host_target
=>
target
.
requires_host_target?
,
:test_bundle
=>
test_bundle
)
end
end
# @return [Boolean]
define_build_settings_method
:any_vendored_dynamic_artifacts?
,
:memoized
=>
true
do
define_build_settings_method
:any_vendored_dynamic_artifacts?
,
:memoized
=>
true
do
pod_targets
.
any?
do
|
pt
|
pod_targets
.
any?
do
|
pt
|
pt
.
file_accessors
.
any?
do
|
fa
|
pt
.
file_accessors
.
any?
do
|
fa
|
...
@@ -585,39 +889,21 @@ module Pod
...
@@ -585,39 +889,21 @@ module Pod
end
end
end
end
# @return [Boolean]
define_build_settings_method
:requires_objc_linker_flag?
,
:memoized
=>
true
do
define_build_settings_method
:requires_objc_linker_flag?
,
:memoized
=>
true
do
includes_static_libs
=
!
target
.
requires_frameworks?
includes_static_libs
=
!
target
.
requires_frameworks?
includes_static_libs
||
pod_targets
.
flat_map
(
&
:file_accessors
).
any?
{
|
fa
|
!
fa
.
vendored_static_artifacts
.
empty?
}
includes_static_libs
||
pod_targets
.
flat_map
(
&
:file_accessors
).
any?
{
|
fa
|
!
fa
.
vendored_static_artifacts
.
empty?
}
end
end
# @return [Boolean]
define_build_settings_method
:requires_fobjc_arc?
,
:memoized
=>
true
do
define_build_settings_method
:requires_fobjc_arc?
,
:memoized
=>
true
do
target
.
podfile
.
set_arc_compatibility_flag?
&&
target
.
podfile
.
set_arc_compatibility_flag?
&&
target
.
spec_consumers
.
any?
(
&
:requires_arc?
)
target
.
spec_consumers
.
any?
(
&
:requires_arc?
)
end
end
define_build_settings_method
:module_map_files
,
:memoized
=>
true
,
:sorted
=>
true
,
:uniqued
=>
true
,
:compacted
=>
true
,
:from_search_paths_aggregate_targets
=>
:module_map_file_to_import
do
#-------------------------------------------------------------------------#
pod_targets
.
map
{
|
t
|
t
.
build_settings
.
module_map_file_to_import
}
end
define_build_settings_method
:always_embed_swift_standard_libraries
,
:build_setting
=>
true
,
:memoized
=>
true
do
return
unless
must_embed_swift?
return
if
target_swift_version
<
EMBED_STANDARD_LIBRARIES_MINIMUM_VERSION
'YES'
end
define_build_settings_method
:embedded_content_contains_swift
,
:build_setting
=>
true
,
:memoized
=>
true
do
return
unless
must_embed_swift?
return
if
target_swift_version
>=
EMBED_STANDARD_LIBRARIES_MINIMUM_VERSION
'YES'
end
define_build_settings_method
:must_embed_swift?
,
:memoized
=>
true
do
!
target
.
requires_host_target?
&&
pod_targets
.
any?
(
&
:uses_swift?
)
end
#
!@group Private Helper
s
#
@!group Target Propertie
s
# @return [Version] the SWIFT_VERSION of the target being integrated
# @return [Version] the SWIFT_VERSION of the target being integrated
#
#
...
@@ -628,6 +914,7 @@ module Pod
...
@@ -628,6 +914,7 @@ module Pod
end
end
EMBED_STANDARD_LIBRARIES_MINIMUM_VERSION
=
Version
.
new
(
'2.3'
)
EMBED_STANDARD_LIBRARIES_MINIMUM_VERSION
=
Version
.
new
(
'2.3'
)
private_constant
:EMBED_STANDARD_LIBRARIES_MINIMUM_VERSION
# Returns the {PodTarget}s which are active for the current
# Returns the {PodTarget}s which are active for the current
# configuration name.
# configuration name.
...
@@ -638,11 +925,13 @@ module Pod
...
@@ -638,11 +925,13 @@ module Pod
target
.
pod_targets_for_build_configuration
(
configuration_name
)
target
.
pod_targets_for_build_configuration
(
configuration_name
)
end
end
# @return [Array<PodTarget>]
define_build_settings_method
:pod_targets_to_link
,
:memoized
=>
true
do
define_build_settings_method
:pod_targets_to_link
,
:memoized
=>
true
do
pod_targets
-
pod_targets
-
target
.
search_paths_aggregate_targets
.
flat_map
{
|
at
|
at
.
build_settings
(
configuration_name
).
pod_targets_to_link
}
target
.
search_paths_aggregate_targets
.
flat_map
{
|
at
|
at
.
build_settings
(
configuration_name
).
pod_targets_to_link
}
end
end
# @return [Array<PodTarget>]
define_build_settings_method
:search_paths_aggregate_target_pod_target_build_settings
,
:memoized
=>
true
,
:uniqued
=>
true
do
define_build_settings_method
:search_paths_aggregate_target_pod_target_build_settings
,
:memoized
=>
true
,
:uniqued
=>
true
do
target
.
search_paths_aggregate_targets
.
flat_map
{
|
at
|
at
.
build_settings
(
configuration_name
).
pod_targets
.
flat_map
(
&
:build_settings
)
}
target
.
search_paths_aggregate_targets
.
flat_map
{
|
at
|
at
.
build_settings
(
configuration_name
).
pod_targets
.
flat_map
(
&
:build_settings
)
}
end
end
...
@@ -662,8 +951,8 @@ module Pod
...
@@ -662,8 +951,8 @@ module Pod
end
end
end
end
# Merges the +user_target_xcconfig+ for all pod targets into
the
# Merges the +user_target_xcconfig+ for all pod targets into
a
#
#xcconfig
and warns on conflicting definitions.
#
single hash
and warns on conflicting definitions.
#
#
# @return [Hash{String, String}]
# @return [Hash{String, String}]
#
#
...
@@ -694,6 +983,16 @@ module Pod
...
@@ -694,6 +983,16 @@ module Pod
end
end
end
end
end
end
#-------------------------------------------------------------------------#
# @!group Private Methods
def
__clear__
super
pod_targets
.
each
{
|
pt
|
pt
.
build_settings
.
__clear__
}
target
.
search_paths_aggregate_targets
.
each
{
|
at
|
at
.
build_settings
(
configuration_name
).
__clear__
}
end
end
end
end
end
end
end
...
...
spec/unit/target/build_settings/aggregate_spec.rb
View file @
b7764e4a
...
@@ -354,7 +354,7 @@ module Pod
...
@@ -354,7 +354,7 @@ module Pod
it
'uses the target definition swift version'
do
it
'uses the target definition swift version'
do
@target_definition
.
stubs
(
:swift_version
).
returns
(
'0.1'
)
@target_definition
.
stubs
(
:swift_version
).
returns
(
'0.1'
)
@generator
.
__clear__
@generator
.
send
:
__clear__
@generator
.
send
(
:target_swift_version
).
should
==
Version
.
new
(
'0.1'
)
@generator
.
send
(
:target_swift_version
).
should
==
Version
.
new
(
'0.1'
)
end
end
...
...
spec/unit/target/build_settings/pod_spec.rb
View file @
b7764e4a
...
@@ -212,7 +212,7 @@ module Pod
...
@@ -212,7 +212,7 @@ module Pod
pod_target
.
stubs
(
:build_settings
=>
Pod
.
new
(
pod_target
,
false
))
pod_target
.
stubs
(
:build_settings
=>
Pod
.
new
(
pod_target
,
false
))
@generator
.
spec_consumers
.
each
{
|
sc
|
sc
.
stubs
(
:frameworks
=>
[])
}
@generator
.
spec_consumers
.
each
{
|
sc
|
sc
.
stubs
(
:frameworks
=>
[])
}
@generator
.
stubs
(
:dependent_targets
=>
[
pod_target
])
@generator
.
stubs
(
:dependent_targets
=>
[
pod_target
])
@generator
.
__clear__
@generator
.
send
:
__clear__
@generator
.
other_ldflags
.
should
.
be
==
%w(-l"VendoredDyld" -l"xml2" -framework "VendoredFramework" -framework "XCTest" -weak_framework "iAd")
@generator
.
other_ldflags
.
should
.
be
==
%w(-l"VendoredDyld" -l"xml2" -framework "VendoredFramework" -framework "XCTest" -weak_framework "iAd")
end
end
end
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment