Rakefile 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. require 'xcjobs'
  2. require 'json'
  3. def destinations(platform: 'iphonesimulator')
  4. if platform == 'iphonesimulator'
  5. [ 'name=iPhone 5,OS=10.0',
  6. 'name=iPhone 5s,OS=10.0',
  7. 'name=iPhone 6,OS=10.0',
  8. 'name=iPhone 6s Plus,OS=10.0',
  9. 'name=iPhone SE,OS=10.0',
  10. 'name=iPad Air 2,OS=10.0',
  11. 'name=iPad Pro (9.7 inch),OS=10.0',
  12. 'name=iPad Pro (12.9 inch),OS=10.0'
  13. ]
  14. elsif platform == 'watchsimulator'
  15. [ 'name=Apple Watch - 38mm,OS=3.0',
  16. 'name=Apple Watch - 42mm,OS=3.0'
  17. ]
  18. elsif platform == 'appletvsimulator'
  19. [ 'name=Apple TV 1080p,OS=10.0'
  20. ]
  21. else
  22. []
  23. end
  24. end
  25. def supportedPlatforms
  26. ['macosx', 'iphoneos', 'iphonesimulator', 'watchos', 'watchsimulator', 'appletvos', 'appletvsimulator']
  27. end
  28. def configurations
  29. ['Debug', 'Release']
  30. end
  31. desc "build for all platforms"
  32. task :build do |t|
  33. supportedPlatforms
  34. .product(configurations)
  35. .map { |platform, configuration| Rake::Task["build:#{platform}:#{configuration.downcase}"] }
  36. .map(&:invoke)
  37. end
  38. namespace :build do
  39. supportedPlatforms.product(configurations).each do |platform, configuration|
  40. XCJobs::Build.new("#{platform}:#{configuration.downcase}") do |t|
  41. t.project = 'KeychainAccess'
  42. t.scheme = 'KeychainAccess'
  43. t.sdk = platform
  44. if platform == 'iphonesimulator'
  45. t.add_destination('name=iPhone 6,OS=10.0')
  46. elsif platform == 'watchsimulator'
  47. t.add_destination('name=Apple Watch - 42mm,OS=3.0')
  48. elsif platform == 'appletvsimulator'
  49. t.add_destination('name=Apple TV 1080p,OS=10.0')
  50. end
  51. t.configuration = configuration
  52. t.build_dir = 'build'
  53. t.formatter = 'xcpretty -c'
  54. if ENV['CI']
  55. t.add_build_setting('CODE_SIGN_IDENTITY', '')
  56. t.add_build_setting('CODE_SIGNING_REQUIRED', 'NO')
  57. end
  58. end
  59. end
  60. task :carthage do
  61. sh %[echo 'github \"kishikawakatsumi/KeychainAccess\" \"#{branch_name}\"' > Cartfile]
  62. sh %[carthage update --no-use-binaries]
  63. end
  64. def branch_name
  65. if ENV['CI']
  66. pull_req = %[https://api.github.com/repos/#{ENV['TRAVIS_REPO_SLUG']}/pulls/#{ENV['TRAVIS_PULL_REQUEST']}]
  67. auth_token = 'kishikawakatsumi:209558699492df7782fbe62dda1891d6a6ba010f'
  68. (ENV['TRAVIS_PULL_REQUEST'] == 'false' ? ENV['TRAVIS_BRANCH'] : JSON.parse(`curl -u #{auth_token} -s #{pull_req}`)['head']['ref']).strip
  69. else
  70. %x[git rev-parse --abbrev-ref HEAD]
  71. end
  72. end
  73. end
  74. namespace :test do
  75. supportedPlatforms
  76. .select { |platform| platform == 'macosx' || platform.end_with?('simulator') }.map do |platform|
  77. task platform do |t|
  78. configurations
  79. .map { |configuration| Rake::Task["test:#{platform}:#{configuration.downcase}"] }
  80. .map(&:invoke)
  81. end
  82. end
  83. end
  84. namespace :test do
  85. supportedPlatforms.product(configurations).each do |platform, configuration|
  86. XCJobs::Test.new("#{platform}:#{configuration.downcase}") do |t|
  87. t.project = 'KeychainAccess'
  88. t.scheme = 'KeychainAccess'
  89. t.sdk = platform
  90. destinations(platform: platform).each do |destination|
  91. t.add_destination(destination)
  92. end
  93. t.configuration = configuration
  94. t.add_build_option('-enableCodeCoverage', 'YES')
  95. t.build_dir = 'build'
  96. t.formatter = 'xcpretty -c'
  97. end
  98. end
  99. end
  100. XCJobs::Coverage::Coveralls.new()