123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397 |
- require 'xcjobs'
- xcode_version = `xcodebuild -version`.split("\n").first.scan(/\d+/).join('.')
- if xcode_version.start_with?('10')
- def destinations(platform: 'iphonesimulator')
- if platform == 'iphonesimulator'
- [ 'name=iPhone X,OS=12.0'
- ]
- elsif platform == 'watchsimulator'
- [ 'name=Apple Watch Series 4 - 40mm,OS=5.0',
- 'name=Apple Watch Series 4 - 44mm,OS=5.0'
- ]
- elsif platform == 'appletvsimulator'
- [ 'name=Apple TV 4K,OS=12.0'
- ]
- else
- [
- 'platform=OS X,arch=x86_64'
- ]
- end
- end
- elsif xcode_version.start_with?('9.4')
- def destinations(platform: 'iphonesimulator')
- if platform == 'iphonesimulator'
- [ 'name=iPhone 7,OS=11.4',
- 'name=iPhone 8,OS=11.4',
- 'name=iPhone X,OS=11.4'
- ]
- elsif platform == 'watchsimulator'
- [ 'name=Apple Watch - 38mm,OS=4.0',
- 'name=Apple Watch - 42mm,OS=4.0'
- ]
- elsif platform == 'appletvsimulator'
- [ 'name=Apple TV 4K,OS=11.0'
- ]
- else
- [
- 'platform=OS X,arch=x86_64'
- ]
- end
- end
- elsif xcode_version.start_with?('9')
- def destinations(platform: 'iphonesimulator')
- if platform == 'iphonesimulator'
- [ 'name=iPhone 6s Plus,OS=11.0',
- 'name=iPhone SE,OS=11.0',
- 'name=iPhone 7,OS=11.0',
- 'name=iPhone 8,OS=11.0',
- 'name=iPhone X,OS=11.0',
- 'name=iPad Air 2,OS=11.0',
- 'name=iPad Pro (9.7-inch),OS=11.0',
- 'name=iPad Pro (12.9-inch),OS=11.0'
- ]
- elsif platform == 'watchsimulator'
- [ 'name=Apple Watch - 38mm,OS=4.0',
- 'name=Apple Watch - 42mm,OS=4.0'
- ]
- elsif platform == 'appletvsimulator'
- [ 'name=Apple TV 1080p,OS=11.0'
- ]
- else
- [
- 'platform=OS X,arch=x86_64'
- ]
- end
- end
- elsif xcode_version.start_with?('8.3')
- def destinations(platform: 'iphonesimulator')
- if platform == 'iphonesimulator'
- [ 'name=iPhone 5,OS=10.3.1',
- 'name=iPhone 5s,OS=10.3.1',
- 'name=iPhone 6,OS=10.3.1',
- 'name=iPhone 6s Plus,OS=10.3.1',
- 'name=iPhone SE,OS=10.3.1',
- 'name=iPad Air 2,OS=10.3.1',
- 'name=iPad Pro (9.7-inch),OS=10.3.1',
- 'name=iPad Pro (12.9-inch),OS=10.3.1'
- ]
- elsif platform == 'watchsimulator'
- [ 'name=Apple Watch - 38mm,OS=3.0',
- 'name=Apple Watch - 42mm,OS=3.0'
- ]
- elsif platform == 'appletvsimulator'
- [ 'name=Apple TV 1080p,OS=10.0'
- ]
- else
- [
- 'platform=OS X,arch=x86_64'
- ]
- end
- end
- elsif xcode_version.start_with?('8.0')
- def destinations(platform: 'iphonesimulator')
- if platform == 'iphonesimulator'
- [ 'name=iPhone 5,OS=10.0',
- 'name=iPhone 5s,OS=10.0',
- 'name=iPhone 6,OS=10.0',
- 'name=iPhone 6s Plus,OS=10.0',
- 'name=iPhone SE,OS=10.0',
- 'name=iPad Air 2,OS=10.0',
- 'name=iPad Pro (9.7 inch),OS=10.0',
- 'name=iPad Pro (12.9 inch),OS=10.0'
- ]
- elsif platform == 'watchsimulator'
- [ 'name=Apple Watch - 38mm,OS=3.0',
- 'name=Apple Watch - 42mm,OS=3.0'
- ]
- elsif platform == 'appletvsimulator'
- [ 'name=Apple TV 1080p,OS=10.0'
- ]
- else
- [
- 'platform=OS X,arch=x86_64'
- ]
- end
- end
- elsif xcode_version.start_with?('7.3') || xcode_version.start_with?('7.2')
- def destinations(platform: 'iphonesimulator')
- if platform == 'iphonesimulator'
- [ 'name=iPad 2,OS=8.1',
- 'name=iPad Air,OS=8.1',
- 'name=iPhone 4s,OS=8.1',
- 'name=iPhone 4s,OS=8.3',
- 'name=iPhone 4s,OS=8.4',
- 'name=iPhone 4s,OS=9.0',
- 'name=iPhone 4s,OS=9.2',
- 'name=iPhone 5,OS=8.1',
- 'name=iPhone 5s,OS=8.1',
- 'name=iPhone 6,OS=8.1',
- 'name=iPhone 6,OS=8.2',
- 'name=iPhone 6,OS=8.3',
- 'name=iPhone 6,OS=8.4',
- 'name=iPhone 6,OS=9.0',
- 'name=iPhone 6,OS=9.2',
- 'name=iPhone 6 Plus,OS=8.1',
- 'name=iPhone 6 Plus,OS=8.2',
- 'name=iPhone 6 Plus,OS=8.3',
- 'name=iPhone 6 Plus,OS=8.4',
- 'name=iPhone 6 Plus,OS=9.0',
- 'name=iPhone 6 Plus,OS=9.2'
- ]
- elsif platform == 'watchsimulator'
- [ 'name=Apple Watch - 38mm,OS=2.0',
- 'name=Apple Watch - 42mm,OS=2.0',
- 'name=Apple Watch - 38mm,OS=2.1',
- 'name=Apple Watch - 42mm,OS=2.1',
- ]
- elsif platform == 'appletvsimulator'
- [ 'name=Apple TV 1080p,OS=9.0',
- 'name=Apple TV 1080p,OS=9.1',
- ]
- else
- [
- 'platform=OS X,arch=x86_64'
- ]
- end
- end
- elsif xcode_version.start_with?('7.1')
- def destinations(platform: 'iphonesimulator')
- if platform == 'iphonesimulator'
- [ 'name=iPad 2,OS=8.1',
- 'name=iPad Air,OS=8.1',
- 'name=iPhone 4s,OS=8.1',
- 'name=iPhone 4s,OS=8.3',
- 'name=iPhone 4s,OS=8.4',
- 'name=iPhone 4s,OS=9.0',
- 'name=iPhone 4s,OS=9.1',
- 'name=iPhone 5,OS=8.1',
- 'name=iPhone 5s,OS=8.1',
- 'name=iPhone 6,OS=8.1',
- 'name=iPhone 6,OS=8.2',
- 'name=iPhone 6,OS=8.3',
- 'name=iPhone 6,OS=8.4',
- 'name=iPhone 6,OS=9.0',
- 'name=iPhone 6,OS=9.1',
- 'name=iPhone 6 Plus,OS=8.1',
- 'name=iPhone 6 Plus,OS=8.2',
- 'name=iPhone 6 Plus,OS=8.3',
- 'name=iPhone 6 Plus,OS=8.4',
- 'name=iPhone 6 Plus,OS=9.0',
- 'name=iPhone 6 Plus,OS=9.1'
- ]
- elsif platform == 'watchsimulator'
- [ 'name=Apple Watch - 38mm,OS=2.0',
- 'name=Apple Watch - 42mm,OS=2.0',
- ]
- elsif platform == 'appletvsimulator'
- [ 'name=Apple TV 1080p,OS=9.0',
- ]
- else
- [
- 'platform=OS X,arch=x86_64'
- ]
- end
- end
- elsif xcode_version.start_with?('7.0')
- def destinations(platform: 'iphonesimulator')
- if platform == 'iphonesimulator'
- [ 'name=iPad 2,OS=8.1',
- 'name=iPad Air,OS=8.1',
- 'name=iPhone 4s,OS=8.1',
- 'name=iPhone 4s,OS=8.3',
- 'name=iPhone 4s,OS=8.4',
- 'name=iPhone 4s,OS=9.0',
- 'name=iPhone 5,OS=8.1',
- 'name=iPhone 5s,OS=8.1',
- 'name=iPhone 6,OS=8.1',
- 'name=iPhone 6,OS=8.2',
- 'name=iPhone 6,OS=8.3',
- 'name=iPhone 6,OS=8.4',
- 'name=iPhone 6,OS=9.0',
- 'name=iPhone 6 Plus,OS=8.1',
- 'name=iPhone 6 Plus,OS=8.2',
- 'name=iPhone 6 Plus,OS=8.3',
- 'name=iPhone 6 Plus,OS=8.4',
- 'name=iPhone 6 Plus,OS=9.0',
- ]
- elsif platform == 'watchsimulator'
- [ 'name=Apple Watch - 38mm,OS=2.0',
- 'name=Apple Watch - 42mm,OS=2.0',
- ]
- else
- [
- 'platform=OS X,arch=x86_64'
- ]
- end
- end
- else
- def destinations(platform: 'iphonesimulator')
- if platform == 'iphonesimulator'
- [ 'name=iPad 2,OS=8.1',
- 'name=iPad Air,OS=8.1',
- 'name=iPhone 4s,OS=8.1',
- 'name=iPhone 4s,OS=8.4',
- 'name=iPhone 5,OS=8.1',
- 'name=iPhone 5s,OS=8.1',
- 'name=iPhone 6,OS=8.1',
- 'name=iPhone 6,OS=8.2',
- 'name=iPhone 6,OS=8.4',
- 'name=iPhone 6 Plus,OS=8.1',
- 'name=iPhone 6 Plus,OS=8.2',
- 'name=iPhone 6 Plus,OS=8.4',
- ]
- elsif platform == 'watchsimulator'
- [ 'name=Apple Watch - 38mm,OS=2.0',
- 'name=Apple Watch - 42mm,OS=2.0',
- ]
- else
- [
- 'platform=OS X,arch=x86_64'
- ]
- end
- end
- end
- def schemes
- ['UICKeyChainStore', 'libUICKeyChainStore']
- end
- if xcode_version.start_with?('7.0')
- def supportedPlatforms
- ['macosx', 'iphoneos', 'iphonesimulator', 'watchos', 'watchsimulator']
- end
- elsif xcode_version.start_with?('6')
- def supportedPlatforms
- ['macosx', 'iphoneos', 'iphonesimulator']
- end
- else
- def supportedPlatforms
- ['macosx', 'iphoneos', 'iphonesimulator', 'watchos', 'watchsimulator', 'appletvos', 'appletvsimulator']
- end
- end
- def configurations
- ['Debug', 'Release']
- end
- desc "build for all platforms"
- task :build do |t|
- supportedPlatforms
- .product(configurations)
- .map { |platform, configuration| Rake::Task["build:#{platform}:#{configuration.downcase}"] }
- .map(&:invoke)
- end
- namespace :build do
- schemes.each do |scheme|
- supportedPlatforms.product(configurations).each do |platform, configuration|
- XCJobs::Build.new("#{platform}:#{configuration.downcase}") do |t|
- t.project = 'UICKeyChainStore'
- t.scheme = scheme
- t.sdk = platform
- t.configuration = configuration
- if xcode_version.start_with?('10')
- if platform == 'iphonesimulator'
- t.add_destination('name=iPhone X,OS=12.0')
- elsif platform == 'watchsimulator'
- t.add_destination('name=Apple Watch Series 4 - 44mm,OS=5.0')
- elsif platform == 'appletvsimulator'
- t.add_destination('name=Apple TV 4K,OS=12.0')
- end
- elsif xcode_version.start_with?('9.4')
- if platform == 'iphonesimulator'
- t.add_destination('name=iPhone 7,OS=11.4')
- elsif platform == 'watchsimulator'
- t.add_destination('name=Apple Watch - 42mm,OS=3.2')
- elsif platform == 'appletvsimulator'
- t.add_destination('name=Apple TV 4K,OS=11.0')
- end
- elsif xcode_version.start_with?('9.0')
- if platform == 'iphonesimulator'
- t.add_destination('name=iPhone 6,OS=11.0')
- elsif platform == 'watchsimulator'
- t.add_destination('name=Apple Watch - 42mm,OS=3.1')
- elsif platform == 'appletvsimulator'
- t.add_destination('name=Apple TV 1080p,OS=11.0')
- end
- elsif xcode_version.start_with?('8.0')
- if platform == 'iphonesimulator'
- t.add_destination('name=iPhone 6,OS=10.0')
- elsif platform == 'watchsimulator'
- t.add_destination('name=Apple Watch - 42mm,OS=3.0')
- elsif platform == 'appletvsimulator'
- t.add_destination('name=Apple TV 1080p,OS=10.0')
- end
- elsif xcode_version.start_with?('7.3') || xcode_version.start_with?('7.2')
- if platform == 'iphonesimulator'
- t.add_destination('name=iPhone 6,OS=9.2')
- elsif platform == 'watchsimulator'
- t.add_destination('name=Apple Watch - 42mm,OS=2.1')
- elsif platform == 'appletvsimulator'
- t.add_destination('name=Apple TV 1080p,OS=9.1')
- end
- end
- t.build_dir = 'build'
- t.hide_shell_script_environment = true
- t.formatter = 'xcpretty -c'
- if ENV['CI']
- t.add_build_setting('CODE_SIGN_IDENTITY', '')
- t.add_build_setting('CODE_SIGNING_REQUIRED', 'NO')
- end
- end
- end
- end
- end
- namespace :test do
- supportedPlatforms
- .select { |platform| platform == 'macosx' || platform == 'iphonesimulator' || platform == 'appletvsimulator' }
- .each do |platform|
- task platform do |t|
- configurations.each do |configuration|
- destinations(platform: platform)
- .map { |destination| Rake::Task["test:#{platform}:#{configuration.downcase}:#{destination}"] }
- .map(&:invoke)
- end
- end
- end
- end
- namespace :test do
- supportedPlatforms
- .select { |platform| platform == 'macosx' || platform == 'iphonesimulator' || platform == 'appletvsimulator' }
- .product(configurations)
- .each do |platform, configuration|
- destinations(platform: platform).each do |destination|
- XCJobs::Test.new("#{platform}:#{configuration.downcase}:#{destination}") do |t|
- t.project = 'UICKeyChainStore'
- t.scheme = 'UICKeyChainStore'
- t.sdk = platform
- t.configuration = configuration
- t.add_destination(destination)
- t.coverage = true
- t.build_dir = 'build'
- t.hide_shell_script_environment = true
- t.after_action do
- build_coverage_reports()
- puts `curl -L https://codecov.io/bash | bash -s -- -f 'coverage.txt'`
- end
- end
- end
- end
- end
- def build_coverage_reports()
- project_name = 'UICKeyChainStore'
- profdata = Dir.glob(File.join('build', '/**/Coverage.profdata')).first
- Dir.glob(File.join('build', "/**/#{project_name}")) do |target|
- output = `xcrun llvm-cov report -instr-profile "#{profdata}" "#{target}" -arch=x86_64`
- if $?.success?
- puts output
- `xcrun llvm-cov show -instr-profile "#{profdata}" "#{target}" -arch=x86_64 -use-color=0 > coverage.txt`
- break
- end
- end
- end
|