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
c29dc6e7
Commit
c29dc6e7
authored
Dec 05, 2017
by
Dimitris Koutsogiorgas
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Allow installation of a pod with its own Swift version on multiple targets
parent
33a29513
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
41 additions
and
7 deletions
+41
-7
CHANGELOG.md
CHANGELOG.md
+4
-0
target_validator.rb
lib/cocoapods/installer/xcode/target_validator.rb
+1
-0
pod_target.rb
lib/cocoapods/target/pod_target.rb
+7
-1
target_validator_spec.rb
spec/unit/installer/xcode/target_validator_spec.rb
+29
-6
No files found.
CHANGELOG.md
View file @
c29dc6e7
...
@@ -26,6 +26,10 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
...
@@ -26,6 +26,10 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
##### Bug Fixes
##### Bug Fixes
*
Allow installation of a pod with its own Swift version on multiple targets
[
Dimitris Koutsogiorgas
](
https://github.com/dnkoutso
)
[
#7261
](
https://github.com/CocoaPods/CocoaPods/pull/7261
)
*
Quote framework names in OTHER_LDFLAGS
*
Quote framework names in OTHER_LDFLAGS
[
Tyler Stromberg
](
https://github.com/AquaGeek
)
[
Tyler Stromberg
](
https://github.com/AquaGeek
)
[
#7185
](
https://github.com/CocoaPods/CocoaPods/issues/7185
)
[
#7185
](
https://github.com/CocoaPods/CocoaPods/issues/7185
)
...
...
lib/cocoapods/installer/xcode/target_validator.rb
View file @
c29dc6e7
...
@@ -91,6 +91,7 @@ module Pod
...
@@ -91,6 +91,7 @@ module Pod
end
end
swift_pod_targets
=
pod_targets
.
select
(
&
:uses_swift?
)
swift_pod_targets
=
pod_targets
.
select
(
&
:uses_swift?
)
error_messages
=
swift_pod_targets
.
map
do
|
pod_target
|
error_messages
=
swift_pod_targets
.
map
do
|
pod_target
|
next
unless
pod_target
.
spec_swift_version
.
nil?
swift_target_definitions
=
pod_target
.
target_definitions
.
reject
{
|
target
|
target
.
swift_version
.
blank?
}
swift_target_definitions
=
pod_target
.
target_definitions
.
reject
{
|
target
|
target
.
swift_version
.
blank?
}
next
if
swift_target_definitions
.
empty?
||
swift_target_definitions
.
uniq
(
&
:swift_version
).
count
==
1
next
if
swift_target_definitions
.
empty?
||
swift_target_definitions
.
uniq
(
&
:swift_version
).
count
==
1
target_errors
=
swift_target_definitions
.
map
(
&
error_message_for_target
).
join
(
', '
)
target_errors
=
swift_target_definitions
.
map
(
&
error_message_for_target
).
join
(
', '
)
...
...
lib/cocoapods/target/pod_target.rb
View file @
c29dc6e7
...
@@ -100,7 +100,13 @@ module Pod
...
@@ -100,7 +100,13 @@ module Pod
# targets that include this pod target.
# targets that include this pod target.
#
#
def
swift_version
def
swift_version
root_spec
.
swift_version
||
target_definitions
.
map
(
&
:swift_version
).
compact
.
uniq
.
first
spec_swift_version
||
target_definitions
.
map
(
&
:swift_version
).
compact
.
uniq
.
first
end
# @return [String] the Swift version within the root spec. Might be `nil` if none is set.
#
def
spec_swift_version
root_spec
.
swift_version
end
end
# @note The deployment target for the pod target is the maximum of all
# @note The deployment target for the pod target is the maximum of all
...
...
spec/unit/installer/xcode/target_validator_spec.rb
View file @
c29dc6e7
...
@@ -225,8 +225,8 @@ module Pod
...
@@ -225,8 +225,8 @@ module Pod
podfile
.
target_definitions
[
'SampleProject'
].
stubs
(
:swift_version
).
returns
(
'3.0'
)
podfile
.
target_definitions
[
'SampleProject'
].
stubs
(
:swift_version
).
returns
(
'3.0'
)
podfile
.
target_definitions
[
'TestRunner'
].
stubs
(
:swift_version
).
returns
(
'2.3'
)
podfile
.
target_definitions
[
'TestRunner'
].
stubs
(
:swift_version
).
returns
(
'2.3'
)
orangeframework_pod_target
=
stub
(
:name
=>
'OrangeFramework'
,
:uses_swift?
=>
true
,
:target_definitions
=>
[
podfile
.
target_definitions
[
'SampleProject'
],
podfile
.
target_definitions
[
'TestRunner'
]])
orangeframework_pod_target
=
stub
(
:name
=>
'OrangeFramework'
,
:uses_swift?
=>
true
,
:target_definitions
=>
[
podfile
.
target_definitions
[
'SampleProject'
],
podfile
.
target_definitions
[
'TestRunner'
]]
,
:spec_swift_version
=>
nil
)
matryoshka_pod_target
=
stub
(
:name
=>
'matryoshka'
,
:uses_swift?
=>
false
,
:target_definitions
=>
[
podfile
.
target_definitions
[
'SampleProject'
],
podfile
.
target_definitions
[
'TestRunner'
]])
matryoshka_pod_target
=
stub
(
:name
=>
'matryoshka'
,
:uses_swift?
=>
false
,
:target_definitions
=>
[
podfile
.
target_definitions
[
'SampleProject'
],
podfile
.
target_definitions
[
'TestRunner'
]]
,
:spec_swift_version
=>
nil
)
@validator
=
TargetValidator
.
new
([],
[
orangeframework_pod_target
,
matryoshka_pod_target
])
@validator
=
TargetValidator
.
new
([],
[
orangeframework_pod_target
,
matryoshka_pod_target
])
e
=
should
.
raise
Informative
do
e
=
should
.
raise
Informative
do
...
@@ -254,8 +254,8 @@ module Pod
...
@@ -254,8 +254,8 @@ module Pod
# when the swift version is unset at the project level, but set in one target, swift_version is nil
# when the swift version is unset at the project level, but set in one target, swift_version is nil
podfile
.
target_definitions
[
'TestRunner'
].
stubs
(
:swift_version
).
returns
(
nil
)
podfile
.
target_definitions
[
'TestRunner'
].
stubs
(
:swift_version
).
returns
(
nil
)
orangeframework_pod_target
=
stub
(
:name
=>
'OrangeFramework'
,
:uses_swift?
=>
true
,
:target_definitions
=>
[
podfile
.
target_definitions
[
'SampleProject'
],
podfile
.
target_definitions
[
'TestRunner'
]])
orangeframework_pod_target
=
stub
(
:name
=>
'OrangeFramework'
,
:uses_swift?
=>
true
,
:target_definitions
=>
[
podfile
.
target_definitions
[
'SampleProject'
],
podfile
.
target_definitions
[
'TestRunner'
]]
,
:spec_swift_version
=>
nil
)
matryoshka_pod_target
=
stub
(
:name
=>
'matryoshka'
,
:uses_swift?
=>
true
,
:target_definitions
=>
[
podfile
.
target_definitions
[
'SampleProject'
],
podfile
.
target_definitions
[
'TestRunner'
]])
matryoshka_pod_target
=
stub
(
:name
=>
'matryoshka'
,
:uses_swift?
=>
true
,
:target_definitions
=>
[
podfile
.
target_definitions
[
'SampleProject'
],
podfile
.
target_definitions
[
'TestRunner'
]]
,
:spec_swift_version
=>
nil
)
@validator
=
TargetValidator
.
new
([],
[
orangeframework_pod_target
,
matryoshka_pod_target
])
@validator
=
TargetValidator
.
new
([],
[
orangeframework_pod_target
,
matryoshka_pod_target
])
lambda
{
@validator
.
validate!
}.
should
.
not
.
raise
lambda
{
@validator
.
validate!
}.
should
.
not
.
raise
...
@@ -278,8 +278,31 @@ module Pod
...
@@ -278,8 +278,31 @@ module Pod
podfile
.
target_definitions
[
'TestRunner'
].
stubs
(
:swift_version
).
returns
(
'2.3'
)
podfile
.
target_definitions
[
'TestRunner'
].
stubs
(
:swift_version
).
returns
(
'2.3'
)
# Pretend none of the pod targets use swift, even if the target definitions they are linked with do have different Swift versions.
# Pretend none of the pod targets use swift, even if the target definitions they are linked with do have different Swift versions.
orangeframework_pod_target
=
stub
(
:name
=>
'OrangeFramework'
,
:uses_swift?
=>
false
,
:target_definitions
=>
[
podfile
.
target_definitions
[
'SampleProject'
],
podfile
.
target_definitions
[
'TestRunner'
]])
orangeframework_pod_target
=
stub
(
:name
=>
'OrangeFramework'
,
:uses_swift?
=>
false
,
:target_definitions
=>
[
podfile
.
target_definitions
[
'SampleProject'
],
podfile
.
target_definitions
[
'TestRunner'
]],
:spec_swift_version
=>
nil
)
matryoshka_pod_target
=
stub
(
:name
=>
'matryoshka'
,
:uses_swift?
=>
false
,
:target_definitions
=>
[
podfile
.
target_definitions
[
'SampleProject'
],
podfile
.
target_definitions
[
'TestRunner'
]])
matryoshka_pod_target
=
stub
(
:name
=>
'matryoshka'
,
:uses_swift?
=>
false
,
:target_definitions
=>
[
podfile
.
target_definitions
[
'SampleProject'
],
podfile
.
target_definitions
[
'TestRunner'
]],
:spec_swift_version
=>
nil
)
@validator
=
TargetValidator
.
new
([],
[
orangeframework_pod_target
,
matryoshka_pod_target
])
lambda
{
@validator
.
validate!
}.
should
.
not
.
raise
end
it
'does not raise when targets with different Swift versions integrate the same pod that specifies swift version attribute'
do
fixture_path
=
ROOT
+
'spec/fixtures'
config
.
repos_dir
=
fixture_path
+
'spec-repos'
podfile
=
Podfile
.
new
do
project
'SampleProject/SampleProject'
use_frameworks!
platform
:ios
,
'8.0'
pod
'OrangeFramework'
,
:path
=>
(
fixture_path
+
'orange-framework'
).
to_s
pod
'matryoshka'
,
:path
=>
(
fixture_path
+
'matryoshka'
).
to_s
target
'SampleProject'
target
'TestRunner'
end
podfile
.
target_definitions
[
'SampleProject'
].
stubs
(
:swift_version
).
returns
(
'3.0'
)
podfile
.
target_definitions
[
'TestRunner'
].
stubs
(
:swift_version
).
returns
(
'2.3'
)
orangeframework_pod_target
=
stub
(
:name
=>
'OrangeFramework'
,
:uses_swift?
=>
true
,
:target_definitions
=>
[
podfile
.
target_definitions
[
'SampleProject'
],
podfile
.
target_definitions
[
'TestRunner'
]],
:spec_swift_version
=>
'4.0'
)
matryoshka_pod_target
=
stub
(
:name
=>
'matryoshka'
,
:uses_swift?
=>
true
,
:target_definitions
=>
[
podfile
.
target_definitions
[
'SampleProject'
],
podfile
.
target_definitions
[
'TestRunner'
]],
:spec_swift_version
=>
'3.2'
)
@validator
=
TargetValidator
.
new
([],
[
orangeframework_pod_target
,
matryoshka_pod_target
])
@validator
=
TargetValidator
.
new
([],
[
orangeframework_pod_target
,
matryoshka_pod_target
])
lambda
{
@validator
.
validate!
}.
should
.
not
.
raise
lambda
{
@validator
.
validate!
}.
should
.
not
.
raise
...
...
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