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
402d214a
Commit
402d214a
authored
Sep 11, 2013
by
Fabio Pelosin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[SupportFilesGenerator] Bring in path logic from Target subclasses
parent
70578126
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
287 additions
and
400 deletions
+287
-400
Gemfile.lock
Gemfile.lock
+3
-3
aggregate_xcconfig.rb
lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb
+15
-1
analyzer.rb
lib/cocoapods/installer/analyzer.rb
+0
-2
support_files_generator.rb
...staller/pods_project_generator/support_files_generator.rb
+41
-11
target_integrator.rb
...ds/installer/user_project_integrator/target_integrator.rb
+70
-53
target.rb
lib/cocoapods/target.rb
+21
-34
aggregate_target.rb
lib/cocoapods/target/aggregate_target.rb
+9
-68
pod_target.rb
lib/cocoapods/target/pod_target.rb
+2
-0
aggregate_xcconfig_spec.rb
spec/unit/generator/xcconfig/aggregate_xcconfig_spec.rb
+8
-4
library_representation_spec.rb
spec/unit/hooks/library_representation_spec.rb
+2
-0
analyzer_spec.rb
spec/unit/installer/analyzer_spec.rb
+0
-3
support_files_generator_spec.rb
...er/pods_project_generator/support_files_generator_spec.rb
+4
-5
target_integrator_spec.rb
...staller/user_project_integrator/target_integrator_spec.rb
+90
-75
user_project_integrator_spec.rb
spec/unit/installer/user_project_integrator_spec.rb
+2
-1
library_spec.rb
spec/unit/library_spec.rb
+0
-74
aggregate_target_spec.rb
spec/unit/target/aggregate_target_spec.rb
+0
-43
pod_target_spec.rb
spec/unit/target/pod_target_spec.rb
+0
-23
target_spec.rb
spec/unit/target_spec.rb
+20
-0
No files found.
Gemfile.lock
View file @
402d214a
...
...
@@ -17,7 +17,7 @@ GIT
GIT
remote: https://github.com/CocoaPods/Xcodeproj.git
revision:
2c25c6712b9ac2472f3e8fd34d0744166af8f7ff
revision:
d7bacd932526540b6d447dcb4358cec2822a68f9
branch: master
specs:
xcodeproj (0.10.1)
...
...
@@ -49,7 +49,7 @@ GIT
GIT
remote: https://github.com/lemurheavy/coveralls-ruby.git
revision: 2
576b7d37545c6f28f0ad43f56cddc09ca2740f4
revision: 2
a7d3f86f1353a97734cc7df476b898e92d89708
specs:
coveralls (0.6.7)
multi_json (~> 1.3)
...
...
@@ -99,7 +99,7 @@ GEM
metaclass (~> 0.0.1)
mocha-on-bacon (0.2.2)
mocha (>= 0.13.0)
multi_json (1.
7.9
)
multi_json (1.
8.0
)
nap (0.5.1)
open4 (1.3.0)
posix-spawn (0.3.6)
...
...
lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb
View file @
402d214a
...
...
@@ -47,7 +47,7 @@ module Pod
@xcconfig
=
Xcodeproj
::
Config
.
new
({
'OTHER_LDFLAGS'
=>
XCConfigHelper
.
default_ld_flags
(
target
),
'HEADER_SEARCH_PATHS'
=>
XCConfigHelper
.
quote
(
target
.
sandbox
.
public_headers
.
search_paths
),
'PODS_ROOT'
=>
target
.
relative_pods_root
,
'PODS_ROOT'
=>
relative_pods_root
,
'GCC_PREPROCESSOR_DEFINITIONS'
=>
'$(inherited) COCOAPODS=1'
,
})
...
...
@@ -72,6 +72,20 @@ module Pod
@xcconfig
end
# @return [String] The xcconfig path of the root from the `$(SRCROOT)`
# variable of the user's project.
#
# TODO: return the root of the sandbox
# The pods root is used by the copy resources script
#
def
relative_pods_root
if
target
.
user_project_path
"${SRCROOT}/
#{
target
.
support_files_root
.
relative_path_from
(
target
.
user_project_path
.
dirname
)
}
"
else
target
.
support_files_root
.
to_s
end
end
#-----------------------------------------------------------------------#
end
...
...
lib/cocoapods/installer/analyzer.rb
View file @
402d214a
...
...
@@ -173,11 +173,9 @@ module Pod
native_targets
=
compute_user_project_targets
(
target_definition
,
user_project
)
target
.
user_project_path
=
project_path
target
.
client_root
=
project_path
.
dirname
target
.
user_target_uuids
=
native_targets
.
map
(
&
:uuid
)
target
.
user_build_configurations
=
compute_user_build_configurations
(
target_definition
,
native_targets
)
else
target
.
client_root
=
config
.
installation_root
target
.
user_target_uuids
=
[]
target
.
user_build_configurations
=
{}
end
...
...
lib/cocoapods/installer/pods_project_generator/support_files_generator.rb
View file @
402d214a
...
...
@@ -53,11 +53,12 @@ module Pod
# @return [void]
#
def
create_xcconfig_file_aggregate
path
=
target
.
xcconfig_path
path
=
file_path
(
:public_xcconfig
)
gen
=
Generator
::
XCConfig
::
AggregateXCConfig
.
new
(
target
)
gen
.
save_as
(
path
)
target
.
xcconfig
=
gen
.
xcconfig
xcconfig_file_ref
=
add_file_to_support_group
(
path
)
target
.
xcconfig_path
=
path
target
.
target
.
build_configurations
.
each
do
|
c
|
c
.
base_configuration_reference
=
xcconfig_file_ref
...
...
@@ -71,11 +72,12 @@ module Pod
#
def
create_xcconfig_file_pods
public_gen
=
Generator
::
XCConfig
::
PublicPodXCConfig
.
new
(
target
)
path
=
target
.
xcconfig_path
path
=
file_path
(
:public_xcconfig
)
public_gen
.
save_as
(
path
)
add_file_to_support_group
(
path
)
target
.
xcconfig_path
=
path
path
=
target
.
xcconfig_private_path
path
=
file_path
(
:private_xcconfig
)
private_gen
=
Generator
::
XCConfig
::
PrivatePodXCConfig
.
new
(
target
,
public_gen
.
xcconfig
)
private_gen
.
save_as
(
path
)
xcconfig_file_ref
=
add_file_to_support_group
(
path
)
...
...
@@ -90,7 +92,7 @@ module Pod
# pods and the installed specifications of a pod.
#
def
create_target_environment_header
path
=
target
.
target_environment_header_path
path
=
file_path
(
:environment_header
)
generator
=
Generator
::
TargetEnvironmentHeader
.
new
(
target
.
pod_targets
.
map
{
|
l
|
l
.
specs
}.
flatten
)
generator
.
save_as
(
path
)
add_file_to_support_group
(
path
)
...
...
@@ -106,7 +108,7 @@ module Pod
#
def
create_bridge_support_file
if
target
.
target_definition
.
podfile
.
generate_bridge_support?
path
=
target
.
bridge_support_path
path
=
file_path
(
:bridge_support
)
headers
=
target
.
target
.
headers_build_phase
.
files
.
map
{
|
bf
|
bf
.
file_ref
.
real_path
}
generator
=
Generator
::
BridgeSupport
.
new
(
headers
)
generator
.
save_as
(
path
)
...
...
@@ -121,7 +123,7 @@ module Pod
#
def
create_acknowledgements
Generator
::
Acknowledgements
.
generators
.
each
do
|
generator_class
|
basepath
=
target
.
acknowledgements_basepath
basepath
=
file_path
(
:acknowledgements
)
path
=
generator_class
.
path_from_basepath
(
basepath
)
file_accessors
=
target
.
pod_targets
.
map
(
&
:file_accessors
).
flatten
generator
=
generator_class
.
new
(
file_accessors
)
...
...
@@ -139,7 +141,7 @@ module Pod
# @return [void]
#
def
create_copy_resources_script
path
=
target
.
copy_resources_script_path
path
=
file_path
(
:copy_resources_script
)
file_accessors
=
target
.
pod_targets
.
map
(
&
:file_accessors
).
flatten
resource_paths
=
file_accessors
.
map
{
|
accessor
|
accessor
.
resources
.
flatten
.
map
{
|
res
|
res
.
relative_path_from
(
path
.
dirname
)
}}.
flatten
resource_bundles
=
file_accessors
.
map
{
|
accessor
|
accessor
.
resource_bundles
.
keys
.
map
{
|
name
|
"${BUILT_PRODUCTS_DIR}/
#{
name
}
.bundle"
}
}.
flatten
...
...
@@ -150,6 +152,7 @@ module Pod
generator
=
Generator
::
CopyResourcesScript
.
new
(
resources
,
target
.
platform
)
generator
.
save_as
(
path
)
add_file_to_support_group
(
path
)
target
.
copy_resources_script_path
=
path
end
# Creates a prefix header file which imports `UIKit` or `Cocoa` according
...
...
@@ -159,11 +162,12 @@ module Pod
# @return [void]
#
def
create_prefix_header
path
=
target
.
prefix_header_path
path
=
file_path
(
:prefix_header
)
generator
=
Generator
::
PrefixHeader
.
new
(
target
.
file_accessors
,
target
.
platform
)
generator
.
imports
<<
target
.
target_environment_header_path
.
basename
generator
.
imports
<<
file_path
(
:environment_header
)
.
basename
generator
.
save_as
(
path
)
add_file_to_support_group
(
path
)
target
.
prefix_header_path
=
path
target
.
target
.
build_configurations
.
each
do
|
c
|
relative_path
=
path
.
relative_path_from
(
project
.
path
.
dirname
)
...
...
@@ -178,7 +182,7 @@ module Pod
# @return [void]
#
def
create_dummy_source
path
=
target
.
dummy_source_path
path
=
file_path
(
:dummy_source
)
generator
=
Generator
::
DummySource
.
new
(
target
.
label
)
generator
.
save_as
(
path
)
file_reference
=
add_file_to_support_group
(
path
)
...
...
@@ -189,11 +193,37 @@ module Pod
end
private
# @!group Paths
#---------------------------------------------------------------------#
# @return [Hash{Symbol=>String}] The name of the support files by key.
#
SUPPORT_FILES_NAMES
=
{
:acknowledgements
=>
"acknowledgements"
,
:bridge_support
=>
"metadata.bridgesupport"
,
:copy_resources_script
=>
"resources.sh"
,
:dummy_source
=>
"dummy.m"
,
:environment_header
=>
"environment.h"
,
:prefix_header
=>
"prefix.pch"
,
:private_xcconfig
=>
"private.xcconfig"
,
:public_xcconfig
=>
"public.xcconfig"
,
}
# @return [Pathname] The absolute path of the support file with the
# given extension.
#
def
file_path
(
key
)
file_name
=
SUPPORT_FILES_NAMES
[
key
]
raise
"Unrecognized key `
#{
key
}
`"
unless
file_name
target
.
support_files_root
+
"
#{
target
.
label
}
-
#{
file_name
}
"
end
private
# @!group Private helpers
.
# @!group Private helpers
#---------------------------------------------------------------------#
# @return [PBXGroup] the group where the file references to the support
...
...
lib/cocoapods/installer/user_project_integrator/target_integrator.rb
View file @
402d214a
...
...
@@ -26,9 +26,10 @@ module Pod
# @return [void]
#
def
integrate!
validate
return
if
native_targets
.
empty?
UI
.
section
(
integration_message
)
do
add_xcconfig_base_configuration
set_xcconfig
add_pods_library
add_copy_resources_script_phase
add_check_manifest_lock_script_phase
...
...
@@ -36,57 +37,28 @@ module Pod
end
end
# @return [Array<PBXNativeTarget>] the user targets for integration.
#
def
native_targets
unless
@native_targets
target_uuids
=
target
.
user_target_uuids
native_targets
=
target_uuids
.
map
do
|
uuid
|
native_target
=
user_project
.
objects_by_uuid
[
uuid
]
unless
native_target
raise
Informative
,
"[Bug] Unable to find the target with "
\
"the `
#{
uuid
}
` UUID for the `
#{
target
}
` integration library"
end
native_target
end
non_integrated
=
native_targets
.
reject
do
|
native_target
|
native_target
.
frameworks_build_phase
.
files
.
any?
do
|
build_file
|
file_ref
=
build_file
.
file_ref
file_ref
&&
file_ref
.
isa
==
'PBXFileReference'
&&
file_ref
.
display_name
==
target
.
product_name
end
end
@native_targets
=
non_integrated
end
@native_targets
end
# Read the project from the disk to ensure that it is up to date as
# other TargetIntegrators might have modified it.
#
def
user_project
@user_project
||=
Xcodeproj
::
Project
.
open
(
target
.
user_project_path
)
end
# Read the pods project from the disk to ensure that it is up to date as
# other TargetIntegrators might have modified it.
#
def
pods_project
@pods_project
||=
Xcodeproj
::
Project
.
open
(
target
.
sandbox
.
project_path
)
end
# @return [String] a string representation suitable for debugging.
#
def
inspect
"#<
#{
self
.
class
}
for target `
#{
target
.
label
}
'>"
end
#---------------------------------------------------------------------#
private
# @!group Integration steps
#---------------------------------------------------------------------#
private
# Validates the inputs provided to the integrator.
#
# @returns [void]
#
def
validate
raise
"Empty user UUIDs for target `
#{
target
}
`"
if
target
.
user_target_uuids
.
empty?
raise
"Missing project path for target `
#{
target
}
`"
unless
target
.
user_project_path
raise
"Missing xcconfig path for target `
#{
target
}
`"
unless
target
.
xcconfig_path
raise
"Missing copy resources script path for target `
#{
target
}
`"
unless
target
.
copy_resources_script_path
end
# @return [Specification::Consumer] the consumer for the specifications.
#
...
...
@@ -107,9 +79,9 @@ module Pod
#
# @return [void]
#
def
add_xcconfig_base_configuration
xcconfig
=
user_project
.
files
.
select
{
|
f
|
f
.
path
==
target
.
xcconfig_relative_path
}.
first
||
user_project
.
new_file
(
target
.
xcconfig_relative_path
)
def
set_xcconfig
xcconfig
=
user_project
.
files
.
select
{
|
f
|
f
.
path
==
xcconfig_relative_path
}.
first
||
user_project
.
new_file
(
xcconfig_relative_path
)
native_targets
.
each
do
|
native_target
|
check_overridden_build_settings
(
target
.
xcconfig
,
native_target
)
native_target
.
build_configurations
.
each
do
|
config
|
...
...
@@ -129,9 +101,9 @@ module Pod
frameworks
=
user_project
.
frameworks_group
native_targets
.
each
do
|
native_target
|
library
=
frameworks
.
files
.
select
{
|
f
|
f
.
path
==
target
.
product_name
}.
first
||
frameworks
.
new_static_library
(
target
.
name
)
frameworks
.
new_static_library
(
target
.
name
)
unless
native_target
.
frameworks_build_phase
.
files_references
.
include?
(
library
)
native_target
.
frameworks_build_phase
.
add_file_reference
(
library
)
native_target
.
frameworks_build_phase
.
add_file_reference
(
library
)
end
end
end
...
...
@@ -146,8 +118,8 @@ module Pod
phase_name
=
"Copy Pods Resources"
native_targets
.
each
do
|
native_target
|
phase
=
native_target
.
shell_script_build_phases
.
select
{
|
bp
|
bp
.
name
==
phase_name
}.
first
||
native_target
.
new_shell_script_build_phase
(
phase_name
)
path
=
target
.
copy_resources_script_relative_path
native_target
.
new_shell_script_build_phase
(
phase_name
)
path
=
"${SRCROOT}/
#{
copy_resources_script_path
}
"
phase
.
shell_script
=
%{"#{path}"\n}
phase
.
show_env_vars_in_log
=
'0'
end
...
...
@@ -182,11 +154,56 @@ module Pod
end
end
#---------------------------------------------------------------------#
private
# @!group Private helpers.
#---------------------------------------------------------------------#
private
# @return [Array<PBXNativeTarget>] the user targets for integration.
#
def
native_targets
unless
@native_targets
target_uuids
=
target
.
user_target_uuids
native_targets
=
target_uuids
.
map
do
|
uuid
|
native_target
=
user_project
.
objects_by_uuid
[
uuid
]
unless
native_target
raise
Informative
,
"[Bug] Unable to find the target with "
\
"the `
#{
uuid
}
` UUID for the `
#{
target
}
` integration library"
end
native_target
end
non_integrated
=
native_targets
.
reject
do
|
native_target
|
native_target
.
frameworks_build_phase
.
files
.
any?
do
|
build_file
|
file_ref
=
build_file
.
file_ref
file_ref
&&
file_ref
.
isa
==
'PBXFileReference'
&&
file_ref
.
display_name
==
target
.
product_name
end
end
@native_targets
=
non_integrated
end
@native_targets
end
# Read the project from the disk to ensure that it is up to date as
# other TargetIntegrators might have modified it.
#
def
user_project
@user_project
||=
Xcodeproj
::
Project
.
open
(
target
.
user_project_path
)
end
# @return [Pathname]
#
def
xcconfig_relative_path
target
.
xcconfig_path
.
relative_path_from
(
user_project
.
path
.
dirname
)
end
# @return [Pathname]
#
def
copy_resources_script_path
target
.
copy_resources_script_path
.
relative_path_from
(
user_project
.
path
.
dirname
)
end
# Informs the user about any build setting of the target which might
# override the given xcconfig file.
...
...
@@ -214,7 +231,7 @@ module Pod
"Remove the build settings from the target."
]
UI
.
warn
(
"The target `
#{
name
}
` overrides the `
#{
key
}
` build "
\
"setting defined in `
#{
target
.
xcconfig_relative_path
}
'."
,
"setting defined in `
#{
xcconfig_relative_path
}
'."
,
actions
)
end
end
...
...
lib/cocoapods/target.rb
View file @
402d214a
...
...
@@ -72,52 +72,39 @@ module Pod
@platform
||=
target_definition
.
platform
end
#-------------------------------------------------------------------------#
# @!group Support files
# @return [Pathname] the folder where to store the support files of this
# library.
# @return [Xcodeproj::Config] The configuration file of the target.
#
def
support_files_root
@sandbox
.
library_support_files_dir
(
name
)
end
# @return [Pathname] the absolute path of the xcconfig file.
# @note The configuration is generated by the {TargetInstaller} and
# used by {UserProjectIntegrator} to check for any overridden
# values.
#
def
xcconfig_path
support_files_root
+
"
#{
label
}
.xcconfig"
end
attr_accessor
:xcconfig
# @return [Pathname] the absolute path of the private xcconfig file.
# @return [Pathname] The path of the xcconfig file relative to the root of
# the user project.
#
def
xcconfig_private_path
support_files_root
+
"
#{
label
}
-Private.xcconfig"
end
attr_accessor
:xcconfig_path
# @return [Pathname]
the absolute path of the header file which contains
#
the information about the installed pods
.
# @return [Pathname]
The path of the copy resources script relative to the
#
root of the user project
.
#
def
target_environment_header_path
support_files_root
+
"
#{
target_definition
.
label
.
to_s
}
-environment.h"
end
attr_accessor
:copy_resources_script_path
# @return [Pathname] the absolute path of the prefix header file.
#
def
prefix_header_path
support_files_root
+
"
#{
label
}
-prefix.pch"
end
# @return [Pathname]
the absolute path of the bridge support file.
# @return [Pathname]
#
def
bridge_support_path
support_files_root
+
"
#{
label
}
.bridgesupport"
end
attr_accessor
:prefix_header_path
# @return [Pathname] the path of the dummy source generated by CocoaPods
#-------------------------------------------------------------------------#
# @!group Support files
# @return [Pathname] the folder where to store the support files of this
# library.
#
def
dummy_source_path
support_files_root
+
"
#{
label
}
-dummy.m"
def
support_files_root
@sandbox
.
library_support_files_dir
(
name
)
end
#-------------------------------------------------------------------------#
...
...
lib/cocoapods/target/aggregate_target.rb
View file @
402d214a
...
...
@@ -26,12 +26,7 @@ module Pod
target_definition
.
label
.
to_s
end
# @return [Pathname] the folder where the client is stored used for
# computing the relative paths. If integrating it should be the
# folder where the user project is stored, otherwise it should
# be the installation root.
#
attr_accessor
:client_root
#-------------------------------------------------------------------------#
# @return [Pathname] the path of the user project that this target will
# integrate as identified by the analyzer.
...
...
@@ -42,20 +37,20 @@ module Pod
attr_accessor
:user_project_path
# @return [String] the list of the UUIDs of the user targets that will be
# integrated by this target as identified by the anal
i
zer.
# integrated by this target as identified by the anal
y
zer.
#
# @note The target instances are not stored to prevent editing different
# instances.
#
attr_accessor
:user_target_uuids
# @return [Xcodeproj::Config] The configuration file of the target.
#
# @note The configuration is generated by the {TargetInstaller} and
# used by {UserProjectIntegrator} to check for any overridden
# values.
#
attr_accessor
:xcconfig
public
#
@!group Pod targets
#-------------------------------------------------------------------------#
# @return [Array<PodTarget>] The dependencies for this target.
#
...
...
@@ -73,60 +68,6 @@ module Pod
specs
.
map
{
|
spec
|
spec
.
consumer
(
platform
)
}
end
# @return [Pathname] The absolute path of acknowledgements file.
#
# @note The acknowledgements generators add the extension according to
# the file type.
#
def
acknowledgements_basepath
support_files_root
+
"
#{
label
}
-acknowledgements"
end
# @return [Pathname] The absolute path of the copy resources script.
#
def
copy_resources_script_path
support_files_root
+
"
#{
label
}
-resources.sh"
end
# @return [String] The xcconfig path of the root from the `$(SRCROOT)`
# variable of the user's project.
#
def
relative_pods_root
"${SRCROOT}/
#{
support_files_root
.
relative_path_from
(
client_root
)
}
"
end
# @return [String] The path of the xcconfig file relative to the root of
# the user project.
#
def
xcconfig_relative_path
relative_to_srcroot
(
xcconfig_path
).
to_s
end
# @return [String] The path of the copy resources script relative to the
# root of the user project.
#
def
copy_resources_script_relative_path
"${SRCROOT}/
#{
relative_to_srcroot
(
copy_resources_script_path
)
}
"
end
#-------------------------------------------------------------------------#
# @!group Private Helpers
private
# Computes the relative path of a sandboxed file from the `$(SRCROOT)`
# variable of the user's project.
#
# @param [Pathname] path
# A relative path from the root of the sandbox.
#
# @return [String] The computed path.
#
def
relative_to_srcroot
(
path
)
path
.
relative_path_from
(
client_root
).
to_s
end
#-------------------------------------------------------------------------#
end
...
...
lib/cocoapods/target/pod_target.rb
View file @
402d214a
...
...
@@ -65,6 +65,8 @@ module Pod
end
.
flatten
.
reject
{
|
dep
|
dep
==
pod_name
}
end
#-------------------------------------------------------------------------#
def
inhibits_warnings?
@inhibits_warnings
||=
target_definition
.
inhibits_warnings_for_pod?
(
pod_name
)
end
...
...
spec/unit/generator/xcconfig/aggregate_xcconfig_spec.rb
View file @
402d214a
...
...
@@ -10,7 +10,7 @@ module Pod
@consumer
=
@spec
.
consumer
(
:ios
)
target_definition
=
Podfile
::
TargetDefinition
.
new
(
'Pods'
,
nil
)
@target
=
AggregateTarget
.
new
(
target_definition
,
config
.
sandbox
)
@target
.
client_root
=
config
.
sandbox
.
root
.
dirname
@target
.
user_project_path
=
config
.
sandbox
.
root
.
dirname
+
'Project.xcodeproj'
@target
.
stubs
(
:platform
).
returns
(
:ios
)
@pod_target
=
PodTarget
.
new
([
@spec
],
target_definition
,
config
.
sandbox
)
@pod_target
.
stubs
(
:platform
).
returns
(
:ios
)
...
...
@@ -19,9 +19,7 @@ module Pod
@generator
=
AggregateXCConfig
.
new
(
@target
)
end
it
"returns the path of the pods root relative to the user project"
do
@generator
.
target
.
relative_pods_root
.
should
==
'${SRCROOT}/Pods'
end
#-----------------------------------------------------------------------#
...
...
@@ -80,6 +78,12 @@ module Pod
generated
.
class
.
should
==
Xcodeproj
::
Config
end
#-----------------------------------------------------------------------#
it
"returns the path of the pods root relative to the user project"
do
@generator
.
send
(
:relative_pods_root
).
should
==
'${SRCROOT}/Pods'
end
end
end
end
...
...
spec/unit/hooks/library_representation_spec.rb
View file @
402d214a
...
...
@@ -29,10 +29,12 @@ module Pod
end
it
"returns the path of the prefix header"
do
@lib
.
prefix_header_path
=
temporary_directory
+
'Pods/Pods-MyApp-prefix.pch'
@rep
.
prefix_header_path
.
should
==
temporary_directory
+
'Pods/Pods-MyApp-prefix.pch'
end
it
"returns the path of the copy resources script"
do
@lib
.
copy_resources_script_path
=
temporary_directory
+
'Pods/Pods-MyApp-resources.sh'
@rep
.
copy_resources_script_path
.
should
==
temporary_directory
+
'Pods/Pods-MyApp-resources.sh'
end
...
...
spec/unit/installer/analyzer_spec.rb
View file @
402d214a
...
...
@@ -85,7 +85,6 @@ module Pod
target
.
support_files_root
.
should
==
config
.
sandbox
.
root
target
.
user_project_path
.
to_s
.
should
.
include
'SampleProject/SampleProject'
target
.
client_root
.
to_s
.
should
.
include
'SampleProject'
target
.
user_target_uuids
.
should
==
[
"A346496C14F9BE9A0080D870"
]
user_proj
=
Xcodeproj
::
Project
.
open
(
target
.
user_project_path
)
user_proj
.
objects_by_uuid
[
target
.
user_target_uuids
.
first
].
name
.
should
==
'SampleProject'
...
...
@@ -96,8 +95,6 @@ module Pod
it
"generates the integration library appropriately if the installation will not integrate"
do
config
.
integrate_targets
=
false
target
=
@analyzer
.
analyze
.
targets
.
first
target
.
client_root
.
should
==
config
.
installation_root
target
.
user_target_uuids
.
should
==
[]
target
.
user_build_configurations
.
should
==
{}
target
.
platform
.
to_s
.
should
==
'iOS 6.0'
...
...
spec/unit/installer/pods_project_generator/support_files_generator_spec.rb
View file @
402d214a
...
...
@@ -17,7 +17,6 @@ module Pod
@target
.
stubs
(
:label
).
returns
(
'Pods'
)
@target
.
stubs
(
:platform
).
returns
(
Platform
.
new
(
:ios
,
'6.0'
))
@target
.
user_project_path
=
config
.
sandbox
.
root
+
'../user_project.xcodeproj'
@target
.
client_root
=
config
.
sandbox
.
root
.
dirname
@target
.
user_build_configurations
=
{
'Debug'
=>
:debug
,
'Release'
=>
:release
,
'AppStore'
=>
:release
,
'Test'
=>
:debug
}
@target
.
target
=
native_target
...
...
@@ -41,15 +40,15 @@ module Pod
"Pods-acknowledgements.plist"
,
"Pods-dummy.m"
,
"Pods-environment.h"
,
"Pods-public.xcconfig"
,
"Pods-resources.sh"
,
"Pods.xcconfig"
]
end
it
"creates the xcconfig file"
do
@sut
.
generate!
file
=
config
.
sandbox
.
root
+
@target
.
xcconfig_path
file
=
@sut
.
send
(
:file_path
,
:public_xcconfig
)
xcconfig
=
Xcodeproj
::
Config
.
new
(
file
)
xcconfig
.
to_hash
[
'PODS_ROOT'
].
should
==
'${SRCROOT}/Pods'
end
...
...
@@ -131,12 +130,12 @@ module Pod
it
"creates the xcconfig file"
do
@sut
.
generate!
file
=
config
.
sandbox
.
root
+
@target
.
xcconfig_private_path
file
=
@sut
.
send
(
:file_path
,
:private_xcconfig
)
xcconfig
=
Xcodeproj
::
Config
.
new
(
file
)
xcconfig
.
to_hash
[
'PODS_ROOT'
].
should
==
'${SRCROOT}'
end
it
"creates a prefix header, including the contents of the specification's prefix header"
do
x
it
"creates a prefix header, including the contents of the specification's prefix header"
do
@sut
.
generate!
prefix_header
=
config
.
sandbox
.
root
+
'Pods-BananaLib-prefix.pch'
generated
=
prefix_header
.
read
...
...
spec/unit/installer/user_project_integrator/target_integrator_spec.rb
View file @
402d214a
...
...
@@ -6,90 +6,55 @@ module Pod
describe
"In general"
do
# The project contains a `PBXReferenceProxy` in the build files of the
# frameworks build phase which implicitly checks for the robustness of
# the detection of the target.
#
before
do
sample_
project_path
=
SpecHelper
.
create_sample_app_copy_from_fixture
(
'SampleProject'
)
@
sample_project
=
Xcodeproj
::
Project
.
open
(
sample_
project_path
)
project_path
=
SpecHelper
.
create_sample_app_copy_from_fixture
(
'SampleProject'
)
@
project
=
Xcodeproj
::
Project
.
open
(
project_path
)
Xcodeproj
::
Project
.
new
(
config
.
sandbox
.
project_path
).
save
@
target
=
@sample_
project
.
targets
.
first
@
native_target
=
@
project
.
targets
.
first
target_definition
=
Podfile
::
TargetDefinition
.
new
(
'Pods'
,
nil
)
target_definition
.
link_with_first_target
=
true
@lib
=
AggregateTarget
.
new
(
target_definition
,
config
.
sandbox
)
@lib
.
user_project_path
=
sample_project_path
@lib
.
client_root
=
sample_project_path
.
dirname
@lib
.
user_target_uuids
=
[
@target
.
uuid
]
@target_integrator
=
TargetIntegrator
.
new
(
@lib
)
@target
=
AggregateTarget
.
new
(
target_definition
,
config
.
sandbox
)
@target
.
user_project_path
=
project_path
@target
.
user_target_uuids
=
[
@native_target
.
uuid
]
@target
.
xcconfig_path
=
config
.
sandbox
.
root
+
'Pods.xcconfig'
@target
.
copy_resources_script_path
=
config
.
sandbox
.
root
+
'Pods-resources.sh'
@sut
=
TargetIntegrator
.
new
(
@target
)
end
it
'returns the targets that need to be integrated'
do
@target_integrator
.
native_targets
.
map
(
&
:name
).
should
==
%w[ SampleProject ]
end
#-----------------------------------------------------------------------#
it
'returns the targets that need to be integrated'
do
pods_library
=
@sample_project
.
frameworks_group
.
new_static_library
(
'Pods'
)
@target
.
frameworks_build_phase
.
add_file_reference
(
pods_library
)
@target_integrator
.
stubs
(
:user_project
).
returns
(
@sample_project
)
@target_integrator
.
native_targets
.
map
(
&
:name
).
should
.
be
.
empty?
end
describe
"#integrate!"
do
it
'is robust against other types of references in the build files of the frameworks build phase'
do
build_file
=
@sample_project
.
new
(
Xcodeproj
::
Project
::
PBXBuildFile
)
build_file
.
file_ref
=
@sample_project
.
new
(
Xcodeproj
::
Project
::
PBXVariantGroup
)
@target_integrator
.
stubs
(
:user_project
).
returns
(
@sample_project
)
@target
.
frameworks_build_phase
.
files
<<
build_file
@target_integrator
.
native_targets
.
map
(
&
:name
).
should
==
%w[ SampleProject ]
end
it
'is robust against build files with missing file references'
do
build_file
=
@sample_project
.
new
(
Xcodeproj
::
Project
::
PBXBuildFile
)
build_file
.
file_ref
=
nil
@target_integrator
.
stubs
(
:user_project
).
returns
(
@sample_project
)
@target
.
frameworks_build_phase
.
files
<<
build_file
@target_integrator
.
native_targets
.
map
(
&
:name
).
should
==
%w[ SampleProject ]
end
it
'does not perform the integration if there are no targets to integrate'
do
@target_integrator
.
stubs
(
:native_targets
).
returns
([])
@target_integrator
.
expects
(
:add_xcconfig_base_configuration
).
never
@target_integrator
.
expects
(
:add_pods_library
).
never
@target_integrator
.
expects
(
:add_copy_resources_script_phase
).
never
@target_integrator
.
expects
(
:save_user_project
).
never
@target_integrator
.
integrate!
end
before
do
@target_integrator
.
integrate!
end
before
do
@sut
.
integrate!
end
it
'sets the Pods xcconfig as the base config for each build configuration'
do
xcconfig_file
=
@sample_project
.
files
.
find
{
|
f
|
f
.
path
==
@lib
.
xcconfig_relative_path
}
@target
.
build_configurations
.
each
do
|
config
|
config
.
base_configuration_reference
.
should
==
xcconfig_file
it
'sets the Pods xcconfig as the base config for each build configuration'
do
xcconfig_file
=
@project
.
files
.
find
{
|
f
|
f
.
real_path
==
@target
.
xcconfig_path
}
@native_target
.
build_configurations
.
each
do
|
config
|
config
.
base_configuration_reference
.
should
==
xcconfig_file
end
end
end
it
'adds references to the Pods static libraries to the Frameworks group'
do
@target_integrator
.
user_project
[
"Frameworks/libPods.a"
].
should
.
not
==
nil
end
it
'adds references to the Pods static libraries to the Frameworks group'
do
@sut
.
send
(
:user_project
)
[
"Frameworks/libPods.a"
].
should
.
not
==
nil
end
it
'adds the libPods static library to the "Link binary with libraries" build phase of each target'
do
target
=
@target_integrator
.
native_targets
.
first
target
.
frameworks_build_phase
.
files
.
find
{
|
f
|
f
.
file_ref
.
path
==
'libPods.a'
}.
should
.
not
==
nil
end
it
'adds the libPods static library to the "Link binary with libraries" build phase of each target'
do
target
=
@sut
.
send
(
:native_targets
)
.
first
target
.
frameworks_build_phase
.
files
.
find
{
|
f
|
f
.
file_ref
.
path
==
'libPods.a'
}.
should
.
not
==
nil
end
it
'adds a Copy Pods Resources build phase to each target'
do
target
=
@target_integrator
.
native_targets
.
first
phase
=
target
.
shell_script_build_phases
.
find
{
|
bp
|
bp
.
name
==
"Copy Pods Resources"
}
phase
.
shell_script
.
strip
.
should
==
"
\"
${SRCROOT}/../Pods/Pods-resources.sh
\"
"
end
it
'adds a Copy Pods Resources build phase to each target'
do
target
=
@sut
.
send
(
:native_targets
)
.
first
phase
=
target
.
shell_script_build_phases
.
find
{
|
bp
|
bp
.
name
==
"Copy Pods Resources"
}
phase
.
shell_script
.
strip
.
should
==
'"${SRCROOT}/../Pods/Pods-resources.sh"'
end
it
'adds a Check Manifest.lock build phase to each target'
do
target
=
@target_integrator
.
native_targets
.
first
phase
=
target
.
shell_script_build_phases
.
find
{
|
bp
|
bp
.
name
==
"Check Pods Manifest.lock"
}
phase
.
shell_script
.
should
==
<<-
EOS
.
strip_heredoc
it
'adds a Check Manifest.lock build phase to each target'
do
target
=
@sut
.
send
(
:native_targets
)
.
first
phase
=
target
.
shell_script_build_phases
.
find
{
|
bp
|
bp
.
name
==
"Check Pods Manifest.lock"
}
phase
.
shell_script
.
should
==
<<-
EOS
.
strip_heredoc
diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null
if [[ $? != 0 ]] ; then
cat << EOM
...
...
@@ -97,15 +62,65 @@ module Pod
EOM
exit 1
fi
EOS
EOS
end
it
'adds the Check Manifest.lock build phase as the first build phase'
do
target
=
@sut
.
send
(
:native_targets
).
first
phase
=
target
.
build_phases
.
find
{
|
bp
|
bp
.
name
==
"Check Pods Manifest.lock"
}
target
.
build_phases
.
first
.
should
.
equal?
phase
end
end
it
'adds the Check Manifest.lock build phase as the first build phase'
do
target
=
@target_integrator
.
native_targets
.
first
phase
=
target
.
build_phases
.
find
{
|
bp
|
bp
.
name
==
"Check Pods Manifest.lock"
}
target
.
build_phases
.
first
.
should
.
equal?
phase
#-----------------------------------------------------------------------#
describe
"Private helpers"
do
describe
"#native_targets"
do
it
'returns the targets that need to be integrated'
do
@sut
.
send
(
:native_targets
).
map
(
&
:name
).
should
==
%w[ SampleProject ]
end
it
'returns the targets that need to be integrated'
do
pods_library
=
@project
.
frameworks_group
.
new_static_library
(
'Pods'
)
@native_target
.
frameworks_build_phase
.
add_file_reference
(
pods_library
)
@sut
.
stubs
(
:user_project
).
returns
(
@project
)
@sut
.
send
(
:native_targets
).
map
(
&
:name
).
should
.
be
.
empty?
end
it
'is robust against other types of references in the build files of the frameworks build phase'
do
build_file
=
@project
.
new
(
Xcodeproj
::
Project
::
PBXBuildFile
)
build_file
.
file_ref
=
@project
.
new
(
Xcodeproj
::
Project
::
PBXVariantGroup
)
@sut
.
stubs
(
:user_project
).
returns
(
@project
)
@native_target
.
frameworks_build_phase
.
files
<<
build_file
@sut
.
send
(
:native_targets
).
map
(
&
:name
).
should
==
%w[ SampleProject ]
end
it
'is robust against build files with missing file references'
do
build_file
=
@project
.
new
(
Xcodeproj
::
Project
::
PBXBuildFile
)
build_file
.
file_ref
=
nil
@sut
.
stubs
(
:user_project
).
returns
(
@project
)
@native_target
.
frameworks_build_phase
.
files
<<
build_file
@sut
.
send
(
:native_targets
).
map
(
&
:name
).
should
==
%w[ SampleProject ]
end
end
it
'does not perform the integration if there are no targets to integrate'
do
@sut
.
stubs
(
:native_targets
).
returns
([])
@sut
.
expects
(
:set_xcconfig
).
never
@sut
.
expects
(
:add_pods_library
).
never
@sut
.
expects
(
:add_copy_resources_script_phase
).
never
@sut
.
expects
(
:save_user_project
).
never
@sut
.
integrate!
end
end
#-----------------------------------------------------------------------#
end
end
end
spec/unit/installer/user_project_integrator_spec.rb
View file @
402d214a
...
...
@@ -19,9 +19,10 @@ module Pod
config
.
sandbox
.
project
=
Project
.
new
(
config
.
sandbox
.
project_path
)
Xcodeproj
::
Project
.
new
(
config
.
sandbox
.
project_path
).
save
@library
=
AggregateTarget
.
new
(
@podfile
.
target_definitions
[
'Pods'
],
config
.
sandbox
)
@library
.
client_root
=
sample_project_path
.
dirname
@library
.
user_project_path
=
sample_project_path
@library
.
user_target_uuids
=
[
'A346496C14F9BE9A0080D870'
]
@library
.
xcconfig_path
=
config
.
sandbox
.
root
+
'Pods.xcconfig'
@library
.
copy_resources_script_path
=
config
.
sandbox
.
root
+
'Pods-resources.sh'
empty_library
=
AggregateTarget
.
new
(
@podfile
.
target_definitions
[
:empty
],
config
.
sandbox
)
@integrator
=
Installer
::
UserProjectIntegrator
.
new
(
@podfile
,
config
.
sandbox
,
temporary_directory
,
[
@library
,
empty_library
])
end
...
...
spec/unit/library_spec.rb
deleted
100644 → 0
View file @
70578126
require
File
.
expand_path
(
'../../spec_helper'
,
__FILE__
)
module
Pod
describe
Pod
::
AggregateTarget
do
describe
"In general"
do
before
do
@target_definition
=
Podfile
::
TargetDefinition
.
new
(
'Pods'
,
nil
)
@target_definition
.
link_with_first_target
=
true
@lib
=
AggregateTarget
.
new
(
@target_definition
,
config
.
sandbox
)
end
it
"returns the target_definition that generated it"
do
@lib
.
target_definition
.
should
==
@target_definition
end
it
"returns the label of the target definition"
do
@lib
.
label
.
should
==
'Pods'
end
it
"returns its name"
do
@lib
.
name
.
should
==
'Pods'
end
it
"returns the name of its product"
do
@lib
.
product_name
.
should
==
'libPods.a'
end
end
describe
"Support files"
do
before
do
@target_definition
=
Podfile
::
TargetDefinition
.
new
(
'Pods'
,
nil
)
@target_definition
.
link_with_first_target
=
true
@lib
=
AggregateTarget
.
new
(
@target_definition
,
config
.
sandbox
)
@lib
.
client_root
=
config
.
sandbox
.
root
.
dirname
end
it
"returns the absolute path of the xcconfig file"
do
@lib
.
xcconfig_path
.
to_s
.
should
.
include?
(
'Pods/Pods.xcconfig'
)
end
it
"returns the absolute path of the resources script"
do
@lib
.
copy_resources_script_path
.
to_s
.
should
.
include?
(
'Pods/Pods-resources.sh'
)
end
it
"returns the absolute path of the target header file"
do
@lib
.
target_environment_header_path
.
to_s
.
should
.
include?
(
'Pods/Pods-environment.h'
)
end
it
"returns the absolute path of the prefix header file"
do
@lib
.
prefix_header_path
.
to_s
.
should
.
include?
(
'Pods/Pods-prefix.pch'
)
end
it
"returns the absolute path of the bridge support file"
do
@lib
.
bridge_support_path
.
to_s
.
should
.
include?
(
'Pods/Pods.bridgesupport'
)
end
it
"returns the absolute path of the acknowledgements files without extension"
do
@lib
.
acknowledgements_basepath
.
to_s
.
should
.
include?
(
'Pods/Pods-acknowledgements'
)
end
#--------------------------------------#
it
"returns the path of the resources script relative to the user project"
do
@lib
.
copy_resources_script_relative_path
.
should
==
'${SRCROOT}/Pods/Pods-resources.sh'
end
it
"returns the path of the xcconfig file relative to the user project"
do
@lib
.
xcconfig_relative_path
.
should
==
'Pods/Pods.xcconfig'
end
end
end
end
spec/unit/target/aggregate_target_spec.rb
View file @
402d214a
...
...
@@ -26,49 +26,6 @@ module Pod
end
end
describe
"Support files"
do
before
do
@target_definition
=
Podfile
::
TargetDefinition
.
new
(
'Pods'
,
nil
)
@target_definition
.
link_with_first_target
=
true
@target
=
AggregateTarget
.
new
(
@target_definition
,
config
.
sandbox
)
@target
.
client_root
=
config
.
sandbox
.
root
.
dirname
end
it
"returns the absolute path of the xcconfig file"
do
@target
.
xcconfig_path
.
to_s
.
should
.
include?
(
'Pods/Pods.xcconfig'
)
end
it
"returns the absolute path of the resources script"
do
@target
.
copy_resources_script_path
.
to_s
.
should
.
include?
(
'Pods/Pods-resources.sh'
)
end
it
"returns the absolute path of the target header file"
do
@target
.
target_environment_header_path
.
to_s
.
should
.
include?
(
'Pods/Pods-environment.h'
)
end
it
"returns the absolute path of the prefix header file"
do
@target
.
prefix_header_path
.
to_s
.
should
.
include?
(
'Pods/Pods-prefix.pch'
)
end
it
"returns the absolute path of the bridge support file"
do
@target
.
bridge_support_path
.
to_s
.
should
.
include?
(
'Pods/Pods.bridgesupport'
)
end
it
"returns the absolute path of the acknowledgements files without extension"
do
@target
.
acknowledgements_basepath
.
to_s
.
should
.
include?
(
'Pods/Pods-acknowledgements'
)
end
#--------------------------------------#
it
"returns the path of the resources script relative to the user project"
do
@target
.
copy_resources_script_relative_path
.
should
==
'${SRCROOT}/Pods/Pods-resources.sh'
end
it
"returns the path of the xcconfig file relative to the user project"
do
@target
.
xcconfig_relative_path
.
should
==
'Pods/Pods.xcconfig'
end
end
describe
"Pod targets"
do
before
do
spec
=
fixture_spec
(
'banana-lib/BananaLib.podspec'
)
...
...
spec/unit/target/pod_target_spec.rb
View file @
402d214a
...
...
@@ -51,28 +51,5 @@ module Pod
end
end
describe
"Support files"
do
it
"returns the absolute path of the xcconfig file"
do
@pod_target
.
xcconfig_path
.
to_s
.
should
.
include
'Pods/Pods-BananaLib.xcconfig'
end
it
"returns the absolute path of the target header file"
do
@pod_target
.
target_environment_header_path
.
to_s
.
should
.
include
'Pods/Pods-environment.h'
end
it
"returns the absolute path of the prefix header file"
do
@pod_target
.
prefix_header_path
.
to_s
.
should
.
include
'Pods/Pods-BananaLib-prefix.pch'
end
it
"returns the absolute path of the bridge support file"
do
@pod_target
.
bridge_support_path
.
to_s
.
should
.
include
'Pods/Pods-BananaLib.bridgesupport'
end
it
"returns the absolute path of the public and private xcconfig files"
do
@pod_target
.
xcconfig_path
.
to_s
.
should
.
include
'Pods/Pods-BananaLib.xcconfig'
@pod_target
.
xcconfig_private_path
.
to_s
.
should
.
include
'Pods/Pods-BananaLib-Private.xcconfig'
end
end
end
end
spec/unit/target_spec.rb
View file @
402d214a
...
...
@@ -2,6 +2,26 @@ require File.expand_path('../../spec_helper', __FILE__)
module
Pod
describe
Target
do
before
do
@target_definition
=
Podfile
::
TargetDefinition
.
new
(
'Pods'
,
nil
)
@target_definition
.
link_with_first_target
=
true
@lib
=
AggregateTarget
.
new
(
@target_definition
,
config
.
sandbox
)
end
it
"returns the target_definition that generated it"
do
@lib
.
target_definition
.
should
==
@target_definition
end
it
"returns the label of the target definition"
do
@lib
.
label
.
should
==
'Pods'
end
it
"returns its name"
do
@lib
.
name
.
should
==
'Pods'
end
it
"returns the name of its product"
do
@lib
.
product_name
.
should
==
'libPods.a'
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