require ‘rake’ require ‘rswift’
DERIVED_DATA_PATH = ‘build’ DEFAULT_DEVICE_NAME = ‘iPhone 6s’ DEVICE_NAME_ENV_KEY = ‘device_name’ DEBUG_ENV_KEY = ‘debug’
device_name = ENV device_name ||= DEFAULT_DEVICE_NAME debug = ENV debug ||= ‘0’
workspace = RSwift::WorkspaceProvider.workspace project = Xcodeproj::Project.open(Dir.glob(‘*.xcodeproj’).first) device_udid = RSwift::DeviceProvider.udid_for_device(device_name, :ios)
task :default => :simulator
desc ‘Run the test/spec suite on the simulator’ task :spec do
exec "xcodebuild test -workspace #{workspace} -scheme #{project.app_scheme_name} -destination 'platform=iphonesimulator,id=#{device_udid}' -derivedDataPath #{DERIVED_DATA_PATH} | xcpretty -tc"
end
desc ‘Run the simulator’ task :simulator => :‘simulator:build’ do
system "xcrun instruments -w #{device_udid}" system "xcrun simctl install booted #{DERIVED_DATA_PATH}/Build/Products/#{project.debug_build_configuration.name}-iphonesimulator/#{project.app_target.product_name}.app" system "xcrun simctl launch booted #{project.app_target.debug_product_bundle_identifier}" if debug.to_i.nonzero? exec "lldb -n #{project.app_target.product_name}" else exec "tail -f ~/Library/Logs/CoreSimulator/#{device_udid}/system.log" end
end
namespace :simulator do
desc 'Build for simulator' task :build do output = "" IO.popen("xcodebuild -workspace #{workspace} -scheme #{project.app_scheme_name} -destination 'platform=iphonesimulator,id=#{device_udid}' -derivedDataPath #{DERIVED_DATA_PATH} | xcpretty").each do |line| puts line.chomp output = line.chomp end success = output.include? "Build Succeeded" abort unless success end desc 'Clean all simulators' task :clean do system 'killall Simulator' system 'xcrun simctl erase all' end
end
desc ‘Deploy on the device’ task :device => :‘device:build’ do
if debug.to_i.nonzero? exec "node_modules/.bin/ios-deploy --debug --bundle #{DERIVED_DATA_PATH}/Build/Products/#{project.debug_build_configuration.name}-iphoneos/#{project.app_scheme_name}.app" else exec "node_modules/.bin/ios-deploy --justlaunch --bundle #{DERIVED_DATA_PATH}/Build/Products/#{project.debug_build_configuration.name}-iphoneos/#{project.app_scheme_name}.app" end
end
namespace :device do
desc 'Build for device' task :build do output = "" IO.popen("xcodebuild -workspace #{workspace} -scheme #{project.app_scheme_name} -destination 'generic/platform=iphoneos' -derivedDataPath '#{DERIVED_DATA_PATH}' | xcpretty").each do |line| puts line.chomp output = line.chomp end success = output.include? "Build Succeeded" abort unless success end
end