module Pod::Generator::AppTargetHelper
Stores the common logic for creating app targets within projects including generating standard import and main files for app hosts.
Constants
- IOS_APP_HOST_MAIN_CONTENTS
- MACOS_APP_APP_HOST_MAIN_CONTENTS
Public Class Methods
Creates and links a default app host 'main.m' file.
@param [Project] project
the Xcodeproj to generate the target into.
@param [PBXNativeTarget] target
the native target to link the generated main file into.
@param [Symbol] platform
the platform of the target. Can be `:ios` or `:osx`, etc.
@param [String] name
The name to use for the target, defaults to 'App'.
@return [Array<PBXBuildFile>] the created build file references.
# File lib/cocoapods/generator/app_target_helper.rb, line 91 def self.add_app_host_main_file(project, target, platform, name = 'App') source_file = AppTargetHelper.create_app_host_main_file(project, platform, name) source_file_ref = project.new_group(name, name).new_file(source_file) target.add_file_references([source_file_ref]) end
Creates and links an import file for the given pod target and into the given native target.
@param [Project] project
the Xcodeproj to generate the target into.
@param [PBXNativeTarget] target
the native target to link the generated import file into.
@param [PodTarget] pod_target
the pod target to use for when generating the contents of the import file.
@param [Symbol] platform
the platform of the target. Can be `:ios` or `:osx`, etc.
@param [String] name
The name to use for the target, defaults to 'App'.
@return [Array<PBXBuildFile>] the created build file references.
# File lib/cocoapods/generator/app_target_helper.rb, line 46 def self.add_app_project_import(project, target, pod_target, platform, name = 'App') source_file = AppTargetHelper.create_app_import_source_file(project, pod_target, platform, name) group = project[name] || project.new_group(name, name) source_file_ref = group.new_file(source_file) target.add_file_references([source_file_ref]) end
Adds a single app target to the given project with the provided name.
@param [Project] project
the Xcodeproj to generate the target into.
@param [Symbol] platform
the platform of the target. Can be `:ios` or `:osx`, etc.
@param [String] deployment_target
the deployment target for the platform.
@param [String] name
The name to use for the target, defaults to 'App'.
@return [PBXNativeTarget] the new target that was created.
# File lib/cocoapods/generator/app_target_helper.rb, line 23 def self.add_app_target(project, platform, deployment_target, name = 'App') project.new_target(:application, name, platform, deployment_target) end
Creates and links an empty Swift file for the given target.
@param [Project] project
the Xcodeproj to generate the target into.
@param [PBXNativeTarget] target
the native target to link the generated import file into.
@param [String] name
The name to use for the target, defaults to 'App'.
@return [Array<PBXBuildFile>] the created build file references.
# File lib/cocoapods/generator/app_target_helper.rb, line 66 def self.add_empty_swift_file(project, target, name = 'App') swift_file = project.path.dirname.+("#{name}/dummy.swift") swift_file.parent.mkpath File.write(swift_file, '') group = project[name] || project.new_group(name, name) swift_file_ref = group.new_file(swift_file) target.add_file_references([swift_file_ref]) end
Adds the provided swift version into the given target.
@param [PBXNativeTarget] target
the native target to add the swift version into.
@param [String] swift_version
the swift version to set to.
@return [void]
# File lib/cocoapods/generator/app_target_helper.rb, line 121 def self.add_swift_version(target, swift_version) raise 'Cannot set empty Swift version to target.' if swift_version.blank? target.build_configurations.each do |configuration| configuration.build_settings['SWIFT_VERSION'] = swift_version end end
Adds the xctest framework search paths into the given target.
@param [PBXNativeTarget] target
the native target to add XCTest into.
@return [void]
# File lib/cocoapods/generator/app_target_helper.rb, line 104 def self.add_xctest_search_paths(target) target.build_configurations.each do |configuration| search_paths = configuration.build_settings['FRAMEWORK_SEARCH_PATHS'] ||= '$(inherited)' search_paths << ' "$(PLATFORM_DIR)/Developer/Library/Frameworks"' end end
Creates a default app host 'main.m' file.
@param [Project] project
the Xcodeproj to generate the target into.
@param [Symbol] platform
the platform of the target. Can be `:ios` or `:osx`.
@param [String] name
The name of the folder to use and save the generated main file.
@return [Pathname] the new source file that was generated.
# File lib/cocoapods/generator/app_target_helper.rb, line 188 def self.create_app_host_main_file(project, platform, name = 'App') source_file = project.path.dirname.+("#{name}/main.m") source_file.parent.mkpath source_file.open('w') do |f| case platform when :ios, :tvos f << IOS_APP_HOST_MAIN_CONTENTS when :osx f << MACOS_APP_APP_HOST_MAIN_CONTENTS end end source_file end
Creates a default import file for the given pod target.
@param [Project] project
the Xcodeproj to generate the target into.
@param [PodTarget] pod_target
the pod target to use for when generating the contents of the import file.
@param [Symbol] platform
the platform of the target. Can be `:ios` or `:osx`, etc.
@param [String] name
The name of the folder to use and save the generated main file.
@return [Pathname] the new source file that was generated.
# File lib/cocoapods/generator/app_target_helper.rb, line 144 def self.create_app_import_source_file(project, pod_target, platform, name = 'App') language = pod_target.uses_swift? ? :swift : :objc if language == :swift source_file = project.path.dirname.+("#{name}/main.swift") source_file.parent.mkpath import_statement = pod_target.should_build? && pod_target.defines_module? ? "import #{pod_target.product_module_name}\n" : '' source_file.open('w') { |f| f << import_statement } else source_file = project.path.dirname.+("#{name}/main.m") source_file.parent.mkpath import_statement = if pod_target.should_build? && pod_target.defines_module? "@import #{pod_target.product_module_name};\n" else header_name = "#{pod_target.product_module_name}/#{pod_target.product_module_name}.h" if pod_target.sandbox.public_headers.root.+(header_name).file? "#import <#{header_name}>\n" else '' end end source_file.open('w') do |f| f << "@import Foundation;\n" f << "@import UIKit;\n" if platform == :ios || platform == :tvos f << "@import Cocoa;\n" if platform == :osx f << "#{import_statement}int main() {}\n" end end source_file end