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