Rakefile 3.2 KB

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