Rakefile 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. require 'xcjobs'
  2. def destinations(platform: 'iphonesimulator')
  3. if platform == 'iphonesimulator'
  4. [ 'name=iPad 2,OS=8.1',
  5. 'name=iPad Air,OS=8.1',
  6. 'name=iPhone 4s,OS=8.1',
  7. 'name=iPhone 5,OS=8.1',
  8. 'name=iPhone 5s,OS=8.1',
  9. 'name=iPhone 6,OS=8.1',
  10. 'name=iPhone 6 Plus,OS=8.1',
  11. 'name=iPhone 6,OS=9.0',
  12. 'name=iPhone 6 Plus,OS=9.0',
  13. 'name=iPhone 6,OS=9.1',
  14. 'name=iPhone 6 Plus,OS=9.1'
  15. ]
  16. elsif platform == 'watchsimulator'
  17. [ 'name=Apple Watch - 38mm,OS=2.0',
  18. 'name=Apple Watch - 42mm,OS=2.0'
  19. ]
  20. elsif platform == 'appletvsimulator'
  21. [ 'name=Apple TV 1080p,OS=9.0'
  22. ]
  23. else
  24. []
  25. end
  26. end
  27. def supportedPlatforms
  28. ['macosx', 'iphoneos', 'iphonesimulator', 'watchos', 'watchsimulator', 'appletvos', 'appletvsimulator']
  29. end
  30. def configurations
  31. ['Debug', 'Release']
  32. end
  33. desc "build for all platforms"
  34. task :build do |t|
  35. supportedPlatforms
  36. .product(configurations)
  37. .map { |platform, configuration| Rake::Task["build:#{platform}:#{configuration.downcase}"] }
  38. .map(&:invoke)
  39. end
  40. namespace :build do
  41. supportedPlatforms.product(configurations).each do |platform, configuration|
  42. XCJobs::Build.new("#{platform}:#{configuration.downcase}") do |t|
  43. t.project = 'KeychainAccess'
  44. t.scheme = 'KeychainAccess'
  45. t.sdk = platform
  46. if platform == 'iphonesimulator'
  47. t.add_destination('name=iPhone 6,OS=9.1')
  48. elsif platform == 'watchsimulator'
  49. t.add_destination('name=Apple Watch - 42mm,OS=2.0')
  50. elsif platform == 'appletvsimulator'
  51. t.add_destination('name=Apple TV 1080p,OS=9.0')
  52. end
  53. t.configuration = configuration
  54. t.build_dir = 'build'
  55. t.formatter = 'xcpretty -c'
  56. if ENV['CI']
  57. t.add_build_setting('CODE_SIGN_IDENTITY', '')
  58. t.add_build_setting('CODE_SIGNING_REQUIRED', 'NO')
  59. end
  60. end
  61. end
  62. end
  63. namespace :test do
  64. supportedPlatforms
  65. .select { |platform| platform == 'macosx' || platform.end_with?('simulator') }.map do |platform|
  66. task platform do |t|
  67. configurations
  68. .map { |configuration| Rake::Task["test:#{platform}:#{configuration.downcase}"] }
  69. .map(&:invoke)
  70. end
  71. end
  72. end
  73. namespace :test do
  74. supportedPlatforms.product(configurations).each do |platform, configuration|
  75. XCJobs::Test.new("#{platform}:#{configuration.downcase}") do |t|
  76. t.project = 'KeychainAccess'
  77. t.scheme = 'KeychainAccess'
  78. t.sdk = platform
  79. destinations(platform: platform).each do |destination|
  80. t.add_destination(destination)
  81. end
  82. t.configuration = configuration
  83. t.coverage = true
  84. t.build_dir = 'build'
  85. t.formatter = 'xcpretty -c'
  86. end
  87. end
  88. task :carthage do
  89. sh 'echo "github \"kishikawakatsumi/KeychainAccess\" \"${sha:-master}"\" > Cartfile'
  90. sh 'carthage update --no-use-binaries'
  91. end
  92. end
  93. XCJobs::Coverage::Coveralls.new()