Bläddra i källkod

Merge pull request #350 from kishikawakatsumi/ci

Verify Xcode 8.3 build on CI
Kishikawa Katsumi 8 år sedan
förälder
incheckning
9944f3f830
3 ändrade filer med 101 tillägg och 35 borttagningar
  1. 23 7
      .travis.yml
  2. 72 25
      Lib/Rakefile
  3. 6 3
      README.md

+ 23 - 7
.travis.yml

@@ -1,5 +1,4 @@
 language: objective-c
-osx_image: xcode9
 cache:
   directories:
   - Lib/vendor
@@ -15,13 +14,30 @@ before_script:
 - ./Lib/Scripts/add_key.sh || true
 script:
 - "(cd Lib && bundle exec rake $ACTION)"
+matrix:
+  include:
+  - osx_image: xcode9
+    env: ACTION=build
+  - osx_image: xcode9
+    env: ACTION='build:carthage'
+  - osx_image: xcode9
+    env: ACTION='test:iphonesimulator'
+  - osx_image: xcode9
+    env: ACTION='test:appletvsimulator'
+  - osx_image: xcode9
+    env: ACTION='test:macosx'
+
+  - osx_image: xcode8.3
+    env: ACTION=build
+  - osx_image: xcode8.3
+    env: ACTION='build:carthage'
+  - osx_image: xcode8.3
+    env: ACTION='test:iphonesimulator'
+  - osx_image: xcode8.3
+    env: ACTION='test:appletvsimulator'
+  - osx_image: xcode8.3
+    env: ACTION='test:macosx'
 env:
-  matrix:
-  - ACTION=build
-  - ACTION='build:carthage'
-  - ACTION='test:iphonesimulator'
-  - ACTION='test:appletvsimulator'
-  - ACTION='test:macosx'
   global:
   - LANG=en_US.UTF-8
   - LC_ALL=en_US.UTF-8

+ 72 - 25
Lib/Rakefile

@@ -1,27 +1,55 @@
 require 'xcjobs'
 require 'json'
 
+def xcode_version
+  `xcodebuild -version`.split("\n").first.scan(/\d+/).join('.')
+end
+
 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.3.1',
-      'name=iPhone SE,OS=10.3.1',
-      'name=iPhone 7,OS=11.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',
-      'name=iPad Pro (10.5-inch),OS=11.0'
-    ]
+    if xcode_version.start_with?('8')
+      [ 'name=iPhone 5,OS=10.0',
+        'name=iPhone 5s,OS=10.0',
+        'name=iPhone 6,OS=10.0',
+        'name=iPhone 6s Plus,OS=10.3.1',
+        'name=iPhone SE,OS=10.3.1',
+        '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'
+      ]
+    else
+      [ 'name=iPhone 5,OS=10.0',
+        'name=iPhone 5s,OS=10.0',
+        'name=iPhone 6,OS=10.0',
+        'name=iPhone 6s Plus,OS=10.3.1',
+        'name=iPhone SE,OS=10.3.1',
+        'name=iPhone 7,OS=11.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',
+        'name=iPad Pro (10.5-inch),OS=11.0'
+      ]
+    end
   elsif platform == 'watchsimulator'
-    [ 'name=Apple Watch - 38mm,OS=3.2',
-      'name=Apple Watch - 42mm,OS=4.0'
-    ]
+    if xcode_version.start_with?('8')
+      [ 'name=Apple Watch - 38mm,OS=3.2',
+        'name=Apple Watch Series 2 - 42mm,OS=3.2'
+      ]
+    else
+      [ 'name=Apple Watch - 38mm,OS=3.2',
+        'name=Apple Watch - 42mm,OS=4.0',
+        'name=Apple Watch Series 2 - 42mm,OS=4.0'
+      ]
+    end
   elsif platform == 'appletvsimulator'
-    [ 'name=Apple TV 1080p,OS=10.2',
-      'name=Apple TV 1080p,OS=11.0'
-    ]
+    if xcode_version.start_with?('8')
+      [ 'name=Apple TV 1080p,OS=10.2'
+      ]
+    else
+      [ 'name=Apple TV 1080p,OS=10.2',
+        'name=Apple TV 1080p,OS=11.0'
+      ]
+    end
   else
     [
       'platform=OS X,arch=x86_64'
@@ -51,13 +79,6 @@ namespace :build do
       t.project = 'KeychainAccess'
       t.scheme = 'KeychainAccess'
       t.sdk = platform
-      if platform == 'iphonesimulator'
-        t.add_destination('name=iPhone 7,OS=11.0')
-      elsif platform == 'watchsimulator'
-        t.add_destination('name=Apple Watch - 42mm,OS=4.0')
-      elsif platform == 'appletvsimulator'
-        t.add_destination('name=Apple TV 1080p,OS=11.0')
-      end
       t.configuration = configuration
       t.build_dir = 'build'
       t.hide_shell_script_environment = true
@@ -66,12 +87,35 @@ namespace :build do
         t.add_build_setting('CODE_SIGN_IDENTITY', '')
         t.add_build_setting('CODE_SIGNING_REQUIRED', 'NO')
       end
+      if xcode_version.start_with?('8')
+        t.add_build_setting('SWIFT_VERSION', '3.0')
+        if platform == 'iphonesimulator'
+          t.add_destination('name=iPhone 7,OS=10.3.1')
+        elsif platform == 'watchsimulator'
+          t.add_destination('name=Apple Watch - 42mm,OS=3.2')
+        elsif platform == 'appletvsimulator'
+          t.add_destination('name=Apple TV 1080p,OS=10.0')
+        end
+      else
+        if platform == 'iphonesimulator'
+          t.add_destination('name=iPhone 7,OS=11.0')
+        elsif platform == 'watchsimulator'
+          t.add_destination('name=Apple Watch - 42mm,OS=4.0')
+        elsif platform == 'appletvsimulator'
+          t.add_destination('name=Apple TV 1080p,OS=11.0')
+        end
+      end
     end
   end
 
   task :carthage do
     sh %[echo 'github \"kishikawakatsumi/KeychainAccess\" \"#{branch_name}\"' > Cartfile]
-    sh %[carthage update --no-use-binaries]
+    if xcode_version.start_with?('8')
+      sh %[echo SWIFT_VERSION=\"3.0\" > swift3.xcconfig]
+      sh %[XCODE_XCCONFIG_FILE=`pwd`/swift3.xcconfig carthage update --no-use-binaries]
+    else
+      sh %[carthage update --no-use-binaries]
+    end
   end
 
   def branch_name
@@ -114,6 +158,9 @@ namespace :test do
           t.coverage = true
           t.build_dir = 'build'
           t.hide_shell_script_environment = true
+          if xcode_version.start_with?('8')
+            t.add_build_setting('SWIFT_VERSION', '3.0')
+          end
           t.after_action do
             build_coverage_reports()
             puts `curl -L https://codecov.io/bash | bash -s -- -f 'coverage.txt'`

+ 6 - 3
README.md

@@ -1,9 +1,11 @@
 # KeychainAccess
 [![CI Status](http://img.shields.io/travis/kishikawakatsumi/KeychainAccess.svg)](https://travis-ci.org/kishikawakatsumi/KeychainAccess)
-[![Coverage Status](https://img.shields.io/coveralls/kishikawakatsumi/KeychainAccess.svg)](https://coveralls.io/github/kishikawakatsumi/KeychainAccess?branch=master)
+[![codecov](https://codecov.io/gh/kishikawakatsumi/KeychainAccess/branch/master/graph/badge.svg)](https://codecov.io/gh/kishikawakatsumi/KeychainAccess)
 [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
 [![Version](https://img.shields.io/cocoapods/v/KeychainAccess.svg)](http://cocoadocs.org/docsets/KeychainAccess)
 [![Platform](https://img.shields.io/cocoapods/p/KeychainAccess.svg)](http://cocoadocs.org/docsets/KeychainAccess)
+[![Swift 3.x](https://img.shields.io/badge/Swift-3.x-orange.svg?style=flat)](https://swift.org/)
+[![Swift 4.0](https://img.shields.io/badge/Swift-4.0-orange.svg?style=flat)](https://swift.org/)
 
 KeychainAccess is a simple Swift wrapper for Keychain that works on iOS and OS X. Makes using Keychain APIs extremely easy and much more palatable to use in Swift.
 
@@ -21,7 +23,7 @@ KeychainAccess is a simple Swift wrapper for Keychain that works on iOS and OS X
 - **[Support Shared Web Credentials (iOS 8+)](#shared_web_credentials)**
 - [Works on both iOS & OS X](#requirements)
 - [watchOS and tvOS are supported](#requirements)
-- **[Swift 3 & Swift 2.3 compatible](#requirements)**
+- **[Swift 4 & Swift 3 compatible](#requirements)**
 
 ## :book: Usage
 
@@ -537,7 +539,8 @@ item: [authenticationType: Default, key: honeylemon, server: github.com, class:
 | **v2.2.x** | iOS 8+, OSX 10.9+, watchOS 2+, tvOS 9+ | 2.0, 2.1      |
 | **v2.3.x** | iOS 8+, OSX 10.9+, watchOS 2+, tvOS 9+ | 2.0, 2.1, 2.2 |
 | **v2.4.x** | iOS 8+, OSX 10.9+, watchOS 2+, tvOS 9+ | 2.2, 2.3      |
-| **v3.x**   | iOS 8+, OSX 10.9+, watchOS 2+, tvOS 9+ | 3.0           |
+| **v3.0.x** | iOS 8+, OSX 10.9+, watchOS 2+, tvOS 9+ | 3.x           |
+| **v3.1.x** | iOS 8+, OSX 10.9+, watchOS 2+, tvOS 9+ | 3.x, 4.0      |
 
 ## Installation