class PodAlexandria::XcodeGen

Public Class Methods

cleanupRome() click to toggle source
# File lib/cocoapods-alexandria/xcodegen/xcodegen.rb, line 3
def self.cleanupRome
  FileUtils.remove_dir('build', force: true)
  FileUtils.remove_dir('dSYM', force: true)
  FileUtils.remove_dir('Rome', force: true)
end
clearDependencies(xcodegen_dependencies_file) click to toggle source
# File lib/cocoapods-alexandria/xcodegen/xcodegen.rb, line 9
def self.clearDependencies(xcodegen_dependencies_file)
  File.truncate(xcodegen_dependencies_file, 0)
end
generate() click to toggle source
# File lib/cocoapods-alexandria/xcodegen/xcodegen.rb, line 13
def self.generate
  unless system('which xcodegen > /dev/null')
    abort 'XcodeGen is not installed. Visit https://github.com/yonaskolb/XcodeGen to learn more.'
  end

  system('xcodegen')
end
generate_dependencies(installer_context, options) click to toggle source

Generate the project dependencies file, adding frameworks to the right targets and also checking if they are linked dynamically or not.

# File lib/cocoapods-alexandria/xcodegen/dependencies_generator.rb, line 7
def self.generate_dependencies(installer_context, options)
  targets = installer_context.umbrella_targets.map { |target|
    generate_for_target(installer_context, target, options.environment_configs_for(target.cocoapods_target_label))
  }.to_h

  File.open(options.xcodegen_dependencies_file, 'w') { |file|
    YAML::dump({ 'targets' => targets }, file)
  }
end

Private Class Methods

config_file_for_target(installer_context, target) click to toggle source
# File lib/cocoapods-alexandria/xcodegen/dependencies_generator.rb, line 32
def self.config_file_for_target(installer_context, target)
  Dir["#{installer_context.sandbox_root}/Target Support Files/#{target.cocoapods_target_label}/#{target.cocoapods_target_label}.*.xcconfig"]
    .first
end
generate_for_target(installer_context, target, configurations) click to toggle source
# File lib/cocoapods-alexandria/xcodegen/dependencies_generator.rb, line 19
def self.generate_for_target(installer_context, target, configurations)
  target_name = target.cocoapods_target_label.sub(/^Pods-/, '')
  xcconfig = config_file_for_target(installer_context, target)

  [
    target_name,
    {
      'configFiles' => configurations,
      'dependencies' => get_dependencies_from_xcconfig(xcconfig).map(&:xcodegen_info)
    }
  ]
end
get_dependencies_from_xcconfig(file) click to toggle source
# File lib/cocoapods-alexandria/xcodegen/dependencies_generator.rb, line 37
def self.get_dependencies_from_xcconfig(file)
  File.readlines(file).select { |line| line.start_with?('OTHER_LDFLAGS') }.first
    &.split('=')&.at(1)&.tr('"', '') # get value (and remove quotes)
    &.gsub('-framework ', '-f')&.gsub('-weak_framework ', '-wf') # replace framework with fake linker flag
    &.gsub('-ObjC', '') # remove unneeded flags
    &.split&.drop(1) # remove inherited
    &.map { |d| Dependency.new(d) } || []
end