>ProjectHelper

ProjectHelper

Targets

new_target

new_resources_bundle

System Frameworks

add_system_framework

Private Helpers

configuration_list

common_build_settings

new_targetclass method

Signature

new_target(project, type, name, platform, deployment_target, product_group) #=> PBXNativeTarget 

Parameters

Project project

The project to which the target should be added.

Symbol type

The type of target. Can be :application, :dynamic_library or :static_library.

String name

The name of the static library product.

Symbol platform

The platform of the static library. Can be :ios or :osx.

String deployment_target

The deployment target for the platform.

Returns

PBXNativeTarget The target.

Source

38 def self.new_target(project, type, name, platform, deployment_target, product_group)
39 
40   # Target
41   target = project.new(PBXNativeTarget)
42   project.targets << target
43   target.name = name
44   target.product_name = name
45   target.product_type = Constants::PRODUCT_TYPE_UTI[type]
46   target.build_configuration_list = configuration_list(project, platform, deployment_target)
47 
48   # Product
49   product = product_group.new_static_library(name)
50   target.product_reference = product
51 
52   # Frameworks
53   framework_name = (platform == :ios) ? 'Foundation' : 'Cocoa'
54   framework_ref = project.add_system_framework(framework_name, target)
55 
56   # Build phases
57   target.build_phases << project.new(PBXSourcesBuildPhase)
58   frameworks_phase = project.new(PBXFrameworksBuildPhase)
59   frameworks_phase.add_file_reference(framework_ref)
60   target.build_phases << frameworks_phase
61 
62   target
63 end

Source Files

lib/xcodeproj/project/project_helper.rb:38

spec/project/project_helper_spec.rb

new_resources_bundleclass method

Signature

new_resources_bundle(project, name, platform, product_group) #=> PBXNativeTarget 

Parameters

Project project

The project to which the target should be added.

String name

The name of the resources bundle.

Symbol platform

The platform of the resources bundle. Can be :ios or :osx.

Returns

PBXNativeTarget The target.

Source

 83 def self.new_resources_bundle(project, name, platform, product_group)
 84   # Target
 85   target = project.new(PBXNativeTarget)
 86   project.targets << target
 87   target.name = name
 88   target.product_name = name
 89   target.product_type = Constants::PRODUCT_TYPE_UTI[:bundle]
 90 
 91   # Configuration List
 92   build_settings = {
 93     'PRODUCT_NAME' => '$(TARGET_NAME)',
 94     'WRAPPER_EXTENSION' => 'bundle',
 95     'SKIP_INSTALL' => 'YES'
 96   }
 97 
 98   if platform == :osx
 99     build_settings['COMBINE_HIDPI_IMAGES'] = 'YES'
100     build_settings['SDKROOT'] = 'macosx'
101   else
102     build_settings['SDKROOT'] = 'iphoneos'
103   end
104 
105   cl = project.new(XCConfigurationList)
106   cl.default_configuration_is_visible = '0'
107   cl.default_configuration_name = 'Release'
108   release_conf = project.new(XCBuildConfiguration)
109   release_conf.name = 'Release'
110   release_conf.build_settings = build_settings
111   debug_conf = project.new(XCBuildConfiguration)
112   debug_conf.name = 'Debug'
113   debug_conf.build_settings = build_settings
114   cl.build_configurations << release_conf
115   cl.build_configurations << debug_conf
116   cl
117   target.build_configuration_list = cl
118 
119   # Product
120   product = product_group.new_bundle(name)
121   target.product_reference = product
122 
123   # Build phases
124   target.build_phases << project.new(PBXSourcesBuildPhase)
125   target.build_phases << project.new(PBXFrameworksBuildPhase)
126   target.build_phases << project.new(PBXResourcesBuildPhase)
127 
128   target
129 end

Source Files

lib/xcodeproj/project/project_helper.rb:83

spec/project/project_helper_spec.rb

add_system_frameworkclass method

Signature

add_system_framework(project, name, target) #=> PBXFileReference 

Parameters

Project project

The project to which the configuration list should be added.

String name

The name of a framework.

PBXNativeTarget target

The target for which to add the framework.

Returns

PBXFileReference The generated file reference.

Source

154 def self.add_system_framework(project, name, target)
155   sdk = target.sdk
156   raise "Unable to find and SDK for the target `#{target.name}`" unless sdk
157   if sdk.include?('iphoneos')
158     if sdk == 'iphoneos'
159       version = XcodebuildHelper.instance.last_ios_sdk || Constants::LAST_KNOWN_IOS_SDK
160       base_dir = "Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS#{version}.sdk/"
161     else
162       base_dir = "Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS#{sdk.gsub('iphoneos', '')}.sdk/"
163     end
164   elsif sdk.include?('macosx')
165     if sdk == 'macosx'
166       version = XcodebuildHelper.instance.last_osx_sdk || Constants::LAST_KNOWN_OSX_SDK
167       base_dir = "Platforms/MacOSX.platform/Developer/SDKs/MacOSX#{version}.sdk/"
168     else
169       base_dir = "Platforms/MacOSX.platform/Developer/SDKs/MacOSX#{sdk.gsub('macosx', '')}.sdk/"
170     end
171   end
172 
173   path = base_dir + "System/Library/Frameworks/#{name}.framework"
174   if ref = project.frameworks_group.files.find { |f| f.path == path }
175     ref
176   else
177     ref = project.frameworks_group.new_file(path)
178     ref.source_tree = 'DEVELOPER_DIR'
179     ref
180   end
181 end

Source Files

lib/xcodeproj/project/project_helper.rb:154

spec/project/project_helper_spec.rb

configuration_listclass method

Signature

configuration_list(project, platform, deployment_target = nil) #=> XCConfigurationList 

Parameters

Project project

The project to which the configuration list should be added.

Symbol platform

The platform for the configuration list, can be :ios or :osx.

String deployment_target

The deployment target for the platform.

Returns

XCConfigurationList The generated configuration list.

Source

201 def self.configuration_list(project, platform, deployment_target = nil)
202   cl = project.new(XCConfigurationList)
203   cl.default_configuration_is_visible = '0'
204   cl.default_configuration_name = 'Release'
205 
206   release_conf = project.new(XCBuildConfiguration)
207   release_conf.name = 'Release'
208   release_conf.build_settings = common_build_settings(:release, platform, deployment_target)
209 
210   debug_conf = project.new(XCBuildConfiguration)
211   debug_conf.name = 'Debug'
212   debug_conf.build_settings = common_build_settings(:debug, platform, deployment_target)
213 
214   cl.build_configurations << release_conf
215   cl.build_configurations << debug_conf
216   cl
217 end

Source Files

lib/xcodeproj/project/project_helper.rb:201

spec/project/project_helper_spec.rb

common_build_settingsclass method

Signature

common_build_settings(type, platform, deployment_target = nil) #=> Hash 

Parameters

Symbol type

The type of the build configuration, can be :release or :debug.

Symbol platform

The platform for the build settings, can be :ios or :osx.

String deployment_target

The deployment target for the platform.

Returns

Hash The common build settings

Source

234 def self.common_build_settings(type, platform, deployment_target = nil)
235   common_settings = Constants::COMMON_BUILD_SETTINGS
236   settings = common_settings[:all].dup
237   settings.merge!(common_settings[type])
238   settings.merge!(common_settings[platform])
239   settings.merge!(common_settings[[platform, type]])
240   if deployment_target
241     if platform == :ios
242       settings['IPHONEOS_DEPLOYMENT_TARGET'] = deployment_target
243     elsif platform == :osx
244       settings['MACOSX_DEPLOYMENT_TARGET'] = deployment_target
245     end
246   end
247   settings
248 end

Source Files

lib/xcodeproj/project/project_helper.rb:234

spec/project/project_helper_spec.rb