浏览代码

Merge pull request #441 from kishikawakatsumi/travis

Add Xcode 10.3 and 11 tests on CI
Kishikawa Katsumi 5 年之前
父节点
当前提交
efb8159ff2
共有 3 个文件被更改,包括 120 次插入66 次删除
  1. 22 0
      .travis.yml
  2. 56 60
      Lib/KeychainAccessTests/KeychainAccessTests.swift
  3. 42 6
      Lib/Rakefile

+ 22 - 0
.travis.yml

@@ -11,6 +11,28 @@ script:
 - "(cd Lib && travis_retry bundle exec rake $ACTION)"
 matrix:
   include:
+  - osx_image: xcode11
+    env: ACTION=build
+  - osx_image: xcode11
+    env: ACTION='build:carthage'
+  - osx_image: xcode11
+    env: ACTION='test:iphonesimulator'
+  - osx_image: xcode11
+    env: ACTION='test:appletvsimulator'
+  - osx_image: xcode11
+    env: ACTION='test:macosx'
+
+  - osx_image: xcode10.3
+    env: ACTION=build
+  - osx_image: xcode10.3
+    env: ACTION='build:carthage'
+  - osx_image: xcode10.3
+    env: ACTION='test:iphonesimulator'
+  - osx_image: xcode10.3
+    env: ACTION='test:appletvsimulator'
+  - osx_image: xcode10.3
+    env: ACTION='test:macosx'
+
   - osx_image: xcode10.2
     env: ACTION=build
   - osx_image: xcode10.2

+ 56 - 60
Lib/KeychainAccessTests/KeychainAccessTests.swift

@@ -474,74 +474,70 @@ class KeychainAccessTests: XCTestCase {
 
     #if os(iOS) || os(tvOS)
     func testSetAttributes() {
-        let expectation = self.expectation(description: "Touch ID authentication")
+        do {
+            var attributes = [String: Any]()
+            attributes[String(kSecAttrDescription)] = "Description Test"
+            attributes[String(kSecAttrComment)] = "Comment Test"
+            attributes[String(kSecAttrCreator)] = "Creator Test"
+            attributes[String(kSecAttrType)] = "Type Test"
+            attributes[String(kSecAttrLabel)] = "Label Test"
+            attributes[String(kSecAttrIsInvisible)] = true
+            attributes[String(kSecAttrIsNegative)] = true
+
+            let keychain = Keychain(service: "Twitter")
+                .attributes(attributes)
+
+            XCTAssertNil(keychain["kishikawakatsumi"], "not stored password")
 
-        DispatchQueue.global(qos: .default).async {
             do {
-                var attributes = [String: Any]()
-                attributes[String(kSecAttrDescription)] = "Description Test"
-                attributes[String(kSecAttrComment)] = "Comment Test"
-                attributes[String(kSecAttrCreator)] = "Creator Test"
-                attributes[String(kSecAttrType)] = "Type Test"
-                attributes[String(kSecAttrLabel)] = "Label Test"
-                attributes[String(kSecAttrIsInvisible)] = true
-                attributes[String(kSecAttrIsNegative)] = true
-
-                let keychain = Keychain(service: "Twitter")
-                    .attributes(attributes)
-                    .accessibility(.whenPasscodeSetThisDeviceOnly, authenticationPolicy: .userPresence)
-
-                XCTAssertNil(keychain["kishikawakatsumi"], "not stored password")
-
-                do {
-                    let attributes = try keychain.get("kishikawakatsumi") { $0 }
-                    XCTAssertNil(attributes)
-                } catch {
-                    XCTFail("error occurred")
-                }
+                let attributes = try keychain.get("kishikawakatsumi") { $0 }
+                XCTAssertNil(attributes)
+            } catch {
+                XCTFail("error occurred")
+            }
 
-                keychain["kishikawakatsumi"] = "password1234"
-                XCTAssertEqual(keychain["kishikawakatsumi"], "password1234", "stored password")
+            keychain["kishikawakatsumi"] = "password1234"
+            XCTAssertEqual(keychain["kishikawakatsumi"], "password1234", "stored password")
 
-                do {
-                    let attributes = try keychain.get("kishikawakatsumi") { $0 }
-                    XCTAssertEqual(attributes?.`class`, ItemClass.genericPassword.rawValue)
-                    XCTAssertEqual(attributes?.data, "password1234".data(using: .utf8))
-                    XCTAssertNil(attributes?.ref)
-                    XCTAssertNotNil(attributes?.persistentRef)
-                    XCTAssertEqual(attributes?.accessible, Accessibility.whenPasscodeSetThisDeviceOnly.rawValue)
+            do {
+                let attributes = try keychain.get("kishikawakatsumi") { $0 }
+                XCTAssertEqual(attributes?.`class`, ItemClass.genericPassword.rawValue)
+                XCTAssertEqual(attributes?.data, "password1234".data(using: .utf8))
+                XCTAssertNil(attributes?.ref)
+                XCTAssertNotNil(attributes?.persistentRef)
+                XCTAssertEqual(attributes?.accessible, Accessibility.afterFirstUnlock.rawValue)
+                if ProcessInfo().isOperatingSystemAtLeast(OperatingSystemVersion(majorVersion: 11, minorVersion: 3, patchVersion: 0)) {
                     XCTAssertNotNil(attributes?.accessControl)
-                    XCTAssertEqual(attributes?.accessGroup, "27AEDK3C9F.com.kishikawakatsumi.KeychainAccess.TestHost")
-                    XCTAssertNotNil(attributes?.synchronizable)
-                    XCTAssertNotNil(attributes?.creationDate)
-                    XCTAssertNotNil(attributes?.modificationDate)
-                    XCTAssertEqual(attributes?.attributeDescription, "Description Test")
-                    XCTAssertEqual(attributes?.comment, "Comment Test")
-                    XCTAssertEqual(attributes?.creator, "Creator Test")
-                    XCTAssertEqual(attributes?.type, "Type Test")
-                    XCTAssertEqual(attributes?.label, "Label Test")
-                    XCTAssertEqual(attributes?.isInvisible, true)
-                    XCTAssertEqual(attributes?.isNegative, true)
-                    XCTAssertEqual(attributes?.account, "kishikawakatsumi")
-                    XCTAssertEqual(attributes?.service, "Twitter")
-                    XCTAssertNil(attributes?.generic)
-                    XCTAssertNil(attributes?.securityDomain)
-                    XCTAssertNil(attributes?.server)
-                    XCTAssertNil(attributes?.`protocol`)
-                    XCTAssertNil(attributes?.authenticationType)
-                    XCTAssertNil(attributes?.port)
-                    XCTAssertNil(attributes?.path)
-
-                    XCTAssertEqual(attributes![String(kSecClass)] as? String, ItemClass.genericPassword.rawValue)
-                    XCTAssertEqual(attributes![String(kSecValueData)] as? Data, "password1234".data(using: .utf8))
-
-                    expectation.fulfill()
-                } catch {
-                    XCTFail("error occurred")
+                } else {
+                    XCTAssertNil(attributes?.accessControl)
                 }
+                XCTAssertEqual(attributes?.accessGroup, "27AEDK3C9F.com.kishikawakatsumi.KeychainAccess.TestHost")
+                XCTAssertNotNil(attributes?.synchronizable)
+                XCTAssertNotNil(attributes?.creationDate)
+                XCTAssertNotNil(attributes?.modificationDate)
+                XCTAssertEqual(attributes?.attributeDescription, "Description Test")
+                XCTAssertEqual(attributes?.comment, "Comment Test")
+                XCTAssertEqual(attributes?.creator, "Creator Test")
+                XCTAssertEqual(attributes?.type, "Type Test")
+                XCTAssertEqual(attributes?.label, "Label Test")
+                XCTAssertEqual(attributes?.isInvisible, true)
+                XCTAssertEqual(attributes?.isNegative, true)
+                XCTAssertEqual(attributes?.account, "kishikawakatsumi")
+                XCTAssertEqual(attributes?.service, "Twitter")
+                XCTAssertNil(attributes?.generic)
+                XCTAssertNil(attributes?.securityDomain)
+                XCTAssertNil(attributes?.server)
+                XCTAssertNil(attributes?.`protocol`)
+                XCTAssertNil(attributes?.authenticationType)
+                XCTAssertNil(attributes?.port)
+                XCTAssertNil(attributes?.path)
+
+                XCTAssertEqual(attributes?[String(kSecClass)] as? String, ItemClass.genericPassword.rawValue)
+                XCTAssertEqual(attributes?[String(kSecValueData)] as? Data, "password1234".data(using: .utf8))
+            } catch {
+                XCTFail("error occurred")
             }
         }
-        waitForExpectations(timeout: 10.0, handler: nil)
 
         do {
             var attributes = [String: Any]()

+ 42 - 6
Lib/Rakefile

@@ -7,7 +7,11 @@ end
 
 def destinations(platform: 'iphonesimulator')
   if platform == 'iphonesimulator'
-    if xcode_version.start_with?('10')
+    if xcode_version.start_with?('11')
+      [ 'name=iPhone 11 Pro,OS=13.0',
+        'name=iPhone Xs,OS=12.2',
+      ]
+    elsif xcode_version.start_with?('10')
       [ 'name=iPhone 5s,OS=12.0',
         'name=iPhone 6,OS=12.0',
         'name=iPhone 6s Plus,OS=12.0',
@@ -79,7 +83,10 @@ def destinations(platform: 'iphonesimulator')
       ]
     end
   elsif platform == 'watchsimulator'
-    if xcode_version.start_with?('10')
+    if xcode_version.start_with?('11')
+      [ 'name=Apple Watch Series 4 - 44mm,OS=6.0'
+      ]
+    elsif xcode_version.start_with?('10')
       [ 'name=Apple Watch Series 4 - 40mm,OS=5.0',
         'name=Apple Watch Series 4 - 44mm,OS=5.0'
       ]
@@ -113,7 +120,10 @@ def destinations(platform: 'iphonesimulator')
       ]
     end
   elsif platform == 'appletvsimulator'
-    if xcode_version.start_with?('10')
+    if xcode_version.start_with?('11')
+      [ 'name=Apple TV 4K,OS=13.0'
+      ]
+    elsif xcode_version.start_with?('10')
       [ 'name=Apple TV 4K,OS=12.0'
       ]
     elsif xcode_version.start_with?('9.4')
@@ -173,7 +183,25 @@ namespace :build do
         t.add_build_setting('CODE_SIGN_IDENTITY', '')
         t.add_build_setting('CODE_SIGNING_REQUIRED', 'NO')
       end
-      if xcode_version.start_with?('10')
+      if xcode_version.start_with?('11')
+        t.add_build_setting('SWIFT_VERSION', '5.1')
+        if platform == 'iphonesimulator'
+          t.add_destination('name=iPhone 11,OS=13.0')
+        elsif platform == 'watchsimulator'
+          t.add_destination('name=Apple Watch Series 4 - 44mm,OS=6.0')
+        elsif platform == 'appletvsimulator'
+          t.add_destination('name=Apple TV 4K,OS=13.0')
+        end
+      elsif xcode_version.start_with?('10.3')
+        t.add_build_setting('SWIFT_VERSION', '5.0')
+        if platform == 'iphonesimulator'
+          t.add_destination('name=iPhone 7,OS=12.0')
+        elsif platform == 'watchsimulator'
+          t.add_destination('name=Apple Watch Series 4 - 44mm,OS=5.0')
+        elsif platform == 'appletvsimulator'
+          t.add_destination('name=Apple TV 4K,OS=12.0')
+        end
+      elsif xcode_version.start_with?('10')
         t.add_build_setting('SWIFT_VERSION', '4.2')
         if platform == 'iphonesimulator'
           t.add_destination('name=iPhone 7,OS=12.0')
@@ -242,7 +270,11 @@ namespace :build do
 
   task :carthage do
     sh %[echo 'github \"kishikawakatsumi/KeychainAccess\"' > Cartfile]
-    if xcode_version.start_with?('10')
+    if xcode_version.start_with?('11')
+      sh %[echo SWIFT_VERSION=\"5.1\" > swift.xcconfig]
+    elsif xcode_version.start_with?('10.3')
+      sh %[echo SWIFT_VERSION=\"5.0\" > swift.xcconfig]
+    elsif xcode_version.start_with?('10')
       sh %[echo SWIFT_VERSION=\"4.2\" > swift.xcconfig]
     elsif xcode_version.start_with?('9.4')
       sh %[echo SWIFT_VERSION=\"4.1\" > swift.xcconfig]
@@ -287,7 +319,11 @@ namespace :test do
           t.coverage = true
           t.build_dir = 'build'
           t.hide_shell_script_environment = true
-          if xcode_version.start_with?('10')
+          if xcode_version.start_with?('11')
+            t.add_build_setting('SWIFT_VERSION', '5.1')
+          elsif xcode_version.start_with?('10.3')
+            t.add_build_setting('SWIFT_VERSION', '5.0')
+          elsif xcode_version.start_with?('10')
             t.add_build_setting('SWIFT_VERSION', '4.2')
           elsif xcode_version.start_with?('9.4')
             t.add_build_setting('SWIFT_VERSION', '4.1')