Rakefile 4.4 KB

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