class Pod::Command::Init
Public Class Methods
new(argv)
click to toggle source
Calls superclass method
Pod::Command::new
# File lib/cocoapods/command/init.rb, line 23 def initialize(argv) @podfile_path = Pathname.pwd + 'Podfile' @project_path = argv.shift_argument @project_paths = Pathname.pwd.children.select { |pn| pn.extname == '.xcodeproj' } super end
Public Instance Methods
run()
click to toggle source
# File lib/cocoapods/command/init.rb, line 44 def run @podfile_path.open('w') { |f| f << podfile_template(@xcode_project) } end
validate!()
click to toggle source
Calls superclass method
# File lib/cocoapods/command/init.rb, line 30 def validate! super raise Informative, 'Existing Podfile found in directory' unless config.podfile_path_in_dir(Pathname.pwd).nil? if @project_path help! "Xcode project at #{@project_path} does not exist" unless File.exist? @project_path project_path = @project_path else raise Informative, 'No Xcode project found, please specify one' unless @project_paths.length > 0 raise Informative, 'Multiple Xcode projects found, please specify one' unless @project_paths.length == 1 project_path = @project_paths.first end @xcode_project = Xcodeproj::Project.open(project_path) end
Private Instance Methods
podfile_template(project)
click to toggle source
@param [Xcodeproj::Project] project
The xcode project to generate a podfile for.
@return [String] the text of the Podfile for the provided project
# File lib/cocoapods/command/init.rb, line 55 def podfile_template(project) podfile = '' podfile << "project '#{@project_path}'\n\n" if @project_path podfile << <<-PLATFORM.strip_heredoc # Uncomment the next line to define a global platform for your project # platform :ios, '9.0' PLATFORM # Split out the targets into app and test targets test_targets, app_targets = project.native_targets. sort_by { |t| t.name.downcase }. partition(&:test_target_type?) app_targets.each do |app_target| test_targets_for_app = test_targets.select do |target| target.name.downcase.start_with?(app_target.name.downcase) end podfile << target_module(app_target, test_targets_for_app) end podfile end
target_module(app, tests)
click to toggle source
@param [[Xcodeproj::PBXTarget]] targets
An array which always has a target as its first item and may optionally contain related test targets
@return [String] the text for the target module
# File lib/cocoapods/command/init.rb, line 84 def target_module(app, tests) target_module = "\ntarget '#{app.name.gsub(/'/, "\\\\\'")}' do\n" target_module << if app.resolved_build_setting('SWIFT_OPTIMIZATION_LEVEL').values.any? <<-RUBY # Comment the next line if you're not using Swift and don't want to use dynamic frameworks use_frameworks! RUBY else <<-RUBY # Uncomment the next line if you're using Swift or would like to use dynamic frameworks # use_frameworks! RUBY end target_module << template_contents(config.default_podfile_path, ' ', "Pods for #{app.name}\n") tests.each do |test| target_module << "\n target '#{test.name.gsub(/'/, "\\\\\'")}' do\n" target_module << " inherit! :search_paths\n" target_module << template_contents(config.default_test_podfile_path, ' ', 'Pods for testing') target_module << "\n end\n" end target_module << "\nend\n" end
template_contents(path, prefix, fallback)
click to toggle source
@param [[Xcodeproj::PBXTarget]] targets
An array which always has a target as its first item and may optionally contain a second target as its test target
@return [String] the text for the target module
# File lib/cocoapods/command/init.rb, line 119 def template_contents(path, prefix, fallback) if path.exist? path.read.chomp.lines.map { |line| "#{prefix}#{line}" }.join("\n") else "#{prefix}# #{fallback}" end end