module Xcode

Main methods

Public Instance Methods

archive(setup_name = YAML_DEFAULT_SETUP_NAME, build_dir = BUILD_DIR) click to toggle source
# File lib/modules/xcode.rb, line 36
def archive(setup_name = YAML_DEFAULT_SETUP_NAME, build_dir = BUILD_DIR)
      config = BuildConfiguration.load(setup_name)
      base_command = xcodebuild_base_command(config)
      execute_xcodebuild "#{base_command} archive", config.use_xcpretty, config.xcpretty_flags, build_dir
end
archive_and_export_ipa(setup_name = YAML_DEFAULT_SETUP_NAME, build_dir = BUILD_DIR, export_options_path = DEFAULT_EXPORT_OPTIONS_PLIST_PATH) click to toggle source
# File lib/modules/xcode.rb, line 42
def archive_and_export_ipa(setup_name = YAML_DEFAULT_SETUP_NAME, build_dir = BUILD_DIR, export_options_path = DEFAULT_EXPORT_OPTIONS_PLIST_PATH)
      config = BuildConfiguration.load(setup_name)
      file_name = config.release_configuration.product_name ? config.release_configuration.product_name : config.scheme
      archive_folder = File.join(Dir.pwd, build_dir)
      archive_name = file_name + ".xcarchive"
      archive_path = File.join(archive_folder, archive_name)
      sdk_option = config.sdk.nil? ? '' : "-sdk #{config.sdk}"
      execute_xcodebuild "#{xcodebuild_path()} #{config.project_load} \"#{config.project}\" -scheme \"#{config.scheme}\" #{sdk_option} -configuration #{config.configuration} archive -archivePath \"#{archive_path}\"", config.use_xcpretty, config.xcpretty_flags, build_dir
      execute_xcodebuild "#{xcodebuild_path()} -exportArchive -archivePath \"#{archive_path}\" -exportPath \"#{build_dir}\" -exportOptionsPlist \"#{export_options_path}\"", config.use_xcpretty, config.xcpretty_flags, build_dir
      Zip.compress("#{archive_path}")
end
build(setup_name = YAML_DEFAULT_SETUP_NAME, build_dir = BUILD_DIR) click to toggle source
# File lib/modules/xcode.rb, line 30
def build(setup_name = YAML_DEFAULT_SETUP_NAME, build_dir = BUILD_DIR)
      config = BuildConfiguration.load(setup_name)
      base_command = xcodebuild_base_command(config)
      execute_xcodebuild "#{base_command}", config.use_xcpretty, config.xcpretty_flags, build_dir
end
build_universal_framework(setup_name = YAML_DEFAULT_SETUP_NAME, build_dir = BUILD_DIR) click to toggle source
# File lib/modules/xcode.rb, line 54
def build_universal_framework(setup_name = YAML_DEFAULT_SETUP_NAME, build_dir = BUILD_DIR)
      config = BuildConfiguration.load(setup_name)
      device = device_with_sdk(config.sdk)
      execute_xcodebuild "#{xcodebuild_path()} #{config.project_load} \"#{config.project}\" -scheme \"#{config.scheme}\" -sdk #{device}os -configuration #{config.configuration} clean archive PLATFORM_NAME=#{device}os", config.use_xcpretty, config.xcpretty_flags, build_dir
      execute_xcodebuild "#{xcodebuild_path()} #{config.project_load} \"#{config.project}\" -scheme \"#{config.scheme}\" -sdk #{device}simulator -configuration #{config.configuration} clean build PLATFORM_NAME=#{device}simulator", config.use_xcpretty, config.xcpretty_flags, build_dir
      lipo_universal_framework(setup_name, build_dir, device)
end
clean(setup_name = YAML_DEFAULT_SETUP_NAME) click to toggle source
# File lib/modules/xcode.rb, line 15
def clean(setup_name = YAML_DEFAULT_SETUP_NAME)
      config = BuildConfiguration.load(setup_name)
      execute_xcodebuild "xcodebuild #{config.project_load} #{config.project} -scheme \"#{config.scheme}\" -sdk #{config.sdk} -configuration #{config.configuration} clean", config.use_xcpretty, config.xcpretty_flags
      derived_data_path = Dir.glob(ENV['HOME']+"/Library/Developer/Xcode/DerivedData/#{config.project}*")
      FileUtils.rm_rf(derived_data_path)
end
test(setup_name = YAML_DEFAULT_SETUP_NAME) click to toggle source
# File lib/modules/xcode.rb, line 22
def test(setup_name = YAML_DEFAULT_SETUP_NAME)
      config = BuildConfiguration.load(setup_name)
      xcpretty_flags = xcpretty_flag_with_output_path(config.xcpretty_flags, test_report_output_path(config))
      test_destination = config.test_destination.build_destination_string
      base_command = xcodebuild_base_command(config)
      execute_xcodebuild "#{base_command} test -destination '#{test_destination}'", config.use_xcpretty, xcpretty_flags
end

Private Instance Methods

device_with_sdk(sdk) click to toggle source
# File lib/modules/xcode.rb, line 121
def device_with_sdk(sdk)
      device = sdk
      device.slice! "os"
      device.slice! "simulator"
      return device
end
execute_xcodebuild(xcodebuild_command, use_xcpretty = true, xcpretty_flags = '-c', build_dir = BUILD_DIR) click to toggle source
# File lib/modules/xcode.rb, line 63
def execute_xcodebuild(xcodebuild_command, use_xcpretty = true, xcpretty_flags = '-c', build_dir = BUILD_DIR)
      command = 'xcrun '
      if rvm_installed()
              command += 'rvm system do '
      end
      command += xcodebuild_command
      if !build_dir.nil? && build_dir.length > 0
              full_build_dir = File.join(Dir.pwd, build_dir)
              command += " BUILD_DIR=\"#{full_build_dir}\""
      end
      if use_xcpretty
              command += " | xcpretty"
              if xcpretty_flags.length > 0
                      command += " #{xcpretty_flags}"
              end
              command += " && exit ${PIPESTATUS[0]}"
      end
      system(command) or raise "*** BUILD FAILED ***"
end
lipo_universal_framework(setup_name = YAML_DEFAULT_SETUP_NAME, build_dir = BUILD_DIR, device) click to toggle source
# File lib/modules/xcode.rb, line 94
def lipo_universal_framework(setup_name = YAML_DEFAULT_SETUP_NAME, build_dir = BUILD_DIR, device)
      config = BuildConfiguration.load(setup_name)
      framework_name = config.release_configuration.product_name
      device_framework = File.join(build_dir, "#{config.configuration}-#{device}os", "#{framework_name}.framework")
      simulator_framework = File.join(build_dir, "#{config.configuration}-#{device}simulator", "#{framework_name}.framework")
      universal_framework = File.join(build_dir, "#{framework_name}.framework")
      modules_subpath = "Modules/#{framework_name}.swiftmodule"

      if File.directory?(universal_framework)
              FileUtils.rm_rf(universal_framework)
      end
      unless File.directory?(build_dir)
              FileUtils.mkdir_p(build_dir)
      end
      FileUtils.cp_r(device_framework, build_dir)
      simulator_modules = File.join(simulator_framework, modules_subpath)
      universal_modules = File.join(universal_framework, modules_subpath)
      Dir.glob(File.join(simulator_modules, "*")) { |r|
              FileUtils.cp_r(r, universal_modules)
      }
      device_binary = File.join(device_framework, framework_name)
      simulator_binary = File.join(simulator_framework, framework_name)
      universal_binary = File.join(universal_framework, framework_name)
      `xcrun lipo -create #{device_binary} #{simulator_binary} -o #{universal_binary}`
end
rvm_installed() click to toggle source
# File lib/modules/xcode.rb, line 139
def rvm_installed()
      return File.file?(File.join(ENV['HOME'], '.rvm', 'scripts', 'rvm'))
end
test_report_output_path(config) click to toggle source
# File lib/modules/xcode.rb, line 129
def test_report_output_path(config)
      return "#{Dir.pwd}/#{TEST_REPORT_DIR}/#{config.scheme}.xml"
end
xcodebuild_base_command(config) click to toggle source
# File lib/modules/xcode.rb, line 89
def xcodebuild_base_command(config)
      return "#{xcodebuild_path()} #{config.project_load} \"#{config.project}\" -scheme \"#{config.scheme}\" -sdk #{config.sdk} -configuration #{config.configuration}"
end
xcodebuild_path() click to toggle source
# File lib/modules/xcode.rb, line 84
def xcodebuild_path()
  return "#{XCODEBUILD_SAFE_PATH}"
end
xcpretty_flag_with_output_path(xcpretty_flags, path) click to toggle source
# File lib/modules/xcode.rb, line 134
def xcpretty_flag_with_output_path(xcpretty_flags, path)
      return xcpretty_flags + " --output #{path}"
end