Commit 36fb8038 authored by Kyle Fuller's avatar Kyle Fuller

Merge pull request #3048 from CocoaPods/check-extension

Configure as extension only for app extensions
parents 3ff7d920 b549aef2
...@@ -16,6 +16,10 @@ To install release candidates run `[sudo] gem install cocoapods --pre` ...@@ -16,6 +16,10 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
##### Enhancements ##### Enhancements
* Set the APPLICATION_EXTENSION_API_ONLY build setting if integrating with an app extension target.
[Boris Bügling](https://github.com/neonichu)
[#2980](https://github.com/CocoaPods/CocoaPods/issues/2980)
* Xcodebuild warnings will now be reported as `warning` during linting * Xcodebuild warnings will now be reported as `warning` during linting
instead of `note`. instead of `note`.
[Hugo Tunius](https://github.com/K0nserv) [Hugo Tunius](https://github.com/K0nserv)
......
...@@ -467,6 +467,9 @@ module Pod ...@@ -467,6 +467,9 @@ module Pod
def set_target_dependencies def set_target_dependencies
frameworks_group = pods_project.frameworks_group frameworks_group = pods_project.frameworks_group
aggregate_targets.each do |aggregate_target| aggregate_targets.each do |aggregate_target|
is_app_extension = aggregate_target.user_targets.map(&:symbol_type).include?(:app_extension)
configure_app_extension_api_only_for_target(aggregate_target) if is_app_extension
aggregate_target.pod_targets.each do |pod_target| aggregate_target.pod_targets.each do |pod_target|
unless pod_target.should_build? unless pod_target.should_build?
pod_target.resource_bundle_targets.each do |resource_bundle_target| pod_target.resource_bundle_targets.each do |resource_bundle_target|
...@@ -477,6 +480,8 @@ module Pod ...@@ -477,6 +480,8 @@ module Pod
end end
aggregate_target.native_target.add_dependency(pod_target.native_target) aggregate_target.native_target.add_dependency(pod_target.native_target)
configure_app_extension_api_only_for_target(pod_target) if is_app_extension
pod_target.dependencies.each do |dep| pod_target.dependencies.each do |dep|
unless dep == pod_target.pod_name unless dep == pod_target.pod_name
pod_dependency_target = aggregate_target.pod_targets.find { |target| target.pod_name == dep } pod_dependency_target = aggregate_target.pod_targets.find { |target| target.pod_name == dep }
...@@ -487,6 +492,7 @@ module Pod ...@@ -487,6 +492,7 @@ module Pod
next unless pod_dependency_target.should_build? next unless pod_dependency_target.should_build?
pod_target.native_target.add_dependency(pod_dependency_target.native_target) pod_target.native_target.add_dependency(pod_dependency_target.native_target)
configure_app_extension_api_only_for_target(pod_dependency_target) if is_app_extension
if pod_target.requires_frameworks? if pod_target.requires_frameworks?
product_ref = frameworks_group.files.find { |f| f.path == pod_dependency_target.product_name } || product_ref = frameworks_group.files.find { |f| f.path == pod_dependency_target.product_name } ||
...@@ -694,6 +700,15 @@ module Pod ...@@ -694,6 +700,15 @@ module Pod
analysis_result.sandbox_state analysis_result.sandbox_state
end end
# Sets the APPLICATION_EXTENSION_API_ONLY build setting to YES for all
# configurations of the given target
#
def configure_app_extension_api_only_for_target(target)
target.native_target.build_configurations.each do |config|
config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'YES'
end
end
#-------------------------------------------------------------------------# #-------------------------------------------------------------------------#
end end
end end
...@@ -55,6 +55,7 @@ module Pod ...@@ -55,6 +55,7 @@ module Pod
# will be integrated by this target. # will be integrated by this target.
# #
def user_targets(project = nil) def user_targets(project = nil)
return [] unless user_project_path
project ||= Xcodeproj::Project.open(user_project_path) project ||= Xcodeproj::Project.open(user_project_path)
user_target_uuids.map do |uuid| user_target_uuids.map do |uuid|
native_target = project.objects_by_uuid[uuid] native_target = project.objects_by_uuid[uuid]
......
...@@ -418,26 +418,44 @@ module Pod ...@@ -418,26 +418,44 @@ module Pod
#--------------------------------------# #--------------------------------------#
describe '#set_target_dependencies' do describe '#set_target_dependencies' do
it 'sets resource bundles for not build pods as target dependencies of the user target' do before do
spec = fixture_spec('banana-lib/BananaLib.podspec') spec = fixture_spec('banana-lib/BananaLib.podspec')
target_definition = Podfile::TargetDefinition.new(:default, @installer.podfile) target_definition = Podfile::TargetDefinition.new(:default, @installer.podfile)
pod_target = PodTarget.new([spec], target_definition, config.sandbox) @pod_target = PodTarget.new([spec], target_definition, config.sandbox)
pod_target.stubs(:resource_bundle_targets).returns(['dummy']) @target = AggregateTarget.new(target_definition, config.sandbox)
pod_target.stubs(:should_build? => false)
target = AggregateTarget.new(target_definition, config.sandbox)
mock_target = mock('PodNativeTarget') @mock_target = mock('PodNativeTarget')
mock_target.expects(:add_dependency).with('dummy')
mock_project = mock('PodsProject', :frameworks_group => mock('FrameworksGroup')) mock_project = mock('PodsProject', :frameworks_group => mock('FrameworksGroup'))
@installer.stubs(:pods_project).returns(mock_project) @installer.stubs(:pods_project).returns(mock_project)
target.stubs(:native_target).returns(mock_target) @target.stubs(:native_target).returns(@mock_target)
target.stubs(:pod_targets).returns([pod_target]) @target.stubs(:pod_targets).returns([@pod_target])
@installer.stubs(:aggregate_targets).returns([target]) @installer.stubs(:aggregate_targets).returns([@target])
end
it 'sets resource bundles for not build pods as target dependencies of the user target' do
@pod_target.stubs(:resource_bundle_targets).returns(['dummy'])
@pod_target.stubs(:should_build? => false)
@mock_target.expects(:add_dependency).with('dummy')
@installer.send(:set_target_dependencies) @installer.send(:set_target_dependencies)
end end
it 'configures APPLICATION_EXTENSION_API_ONLY for app extension targets' do
mock_user_target = mock('UserTarget', :symbol_type => :app_extension)
@target.stubs(:user_targets).returns([mock_user_target])
build_settings = {}
mock_configuration = mock('BuildConfiguration', :build_settings => build_settings)
@mock_target.stubs(:build_configurations).returns([mock_configuration])
@installer.send(:set_target_dependencies)
build_settings.should == { 'APPLICATION_EXTENSION_API_ONLY' => 'YES' }
end
xit 'sets the pod targets as dependencies of the aggregate target' do xit 'sets the pod targets as dependencies of the aggregate target' do
end end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment