Parcourir la source

Add More OSes to Testing Matrix (#3545)

* Add older iOS testing targets.

* Move old iOS and concurrency to Firebreak, make macOS a matrix.

* Fix labeling, matrix value interpolation.

* Don't fail matrices, canImport(Combine).

* Run Xcode 12.5 on macOS 11.

* canImport(Combine) in tests.

* Avoid iOS 11 and 12 tests for now.

* Enable all resource tests on SPM.

* Fix Swift 5.3 test build.

* Use Xcode 13.2 / Swift 5.5.2 for most tests.

* Update tvOS and watchOS test versions.

* Turn off thread sanitizer on tvOS as well.

* Do all iOS tests in parallel.

* Add test matrices for tvOS and watchOS too.

* Fix iOS destination.
Jon Shier il y a 3 ans
Parent
commit
ac892dd077
29 fichiers modifiés avec 382 ajouts et 391 suppressions
  1. 58 67
      .github/workflows/ci.yml
  2. 7 0
      .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
  3. 264 294
      Alamofire.xcodeproj/project.pbxproj
  4. 0 1
      Alamofire.xcodeproj/xcshareddata/xcschemes/Alamofire tvOS.xcscheme
  5. 2 1
      Package.swift
  6. 1 2
      Tests/BaseTestCase.swift
  7. 38 0
      Tests/Bundle+AlamofireTests.swift
  8. 0 4
      Tests/MultipartFormDataTests.swift
  9. 4 8
      Tests/RequestTests.swift
  10. 0 0
      Tests/Resources/Certificates/alamofire-org/alamofire-root-ca.cer
  11. 0 0
      Tests/Resources/Certificates/alamofire-org/alamofire-signing-ca1.cer
  12. 0 0
      Tests/Resources/Certificates/alamofire-org/alamofire-signing-ca2.cer
  13. 0 0
      Tests/Resources/Certificates/alamofire-org/expired.cer
  14. 0 0
      Tests/Resources/Certificates/alamofire-org/missing-dns-name-and-uri.cer
  15. 0 0
      Tests/Resources/Certificates/alamofire-org/multiple-dns-names.cer
  16. 0 0
      Tests/Resources/Certificates/alamofire-org/signed-by-ca1.cer
  17. 0 0
      Tests/Resources/Certificates/alamofire-org/signed-by-ca2.cer
  18. 0 0
      Tests/Resources/Certificates/alamofire-org/test.alamofire.org.cer
  19. 0 0
      Tests/Resources/Certificates/alamofire-org/valid-dns-name.cer
  20. 0 0
      Tests/Resources/Certificates/alamofire-org/valid-uri.cer
  21. 0 0
      Tests/Resources/Certificates/alamofire-org/wildcard.alamofire.org.cer
  22. 0 0
      Tests/Resources/Certificates/expired-badssl-com/expired.badssl.com-intermediate-ca-1.cer
  23. 0 0
      Tests/Resources/Certificates/expired-badssl-com/expired.badssl.com-intermediate-ca-2.cer
  24. 0 0
      Tests/Resources/Certificates/expired-badssl-com/expired.badssl.com-leaf.cer
  25. 0 0
      Tests/Resources/Certificates/expired-badssl-com/expired.badssl.com-root-ca.cer
  26. 0 2
      Tests/ResponseSerializationTests.swift
  27. 5 5
      Tests/ServerTrustEvaluatorTests.swift
  28. 3 3
      Tests/TLSEvaluationTests.swift
  29. 0 4
      Tests/UploadTests.swift

+ 58 - 67
.github/workflows/ci.yml

@@ -21,50 +21,36 @@ concurrency:
   group: ci
   cancel-in-progress: true
 jobs:
-  macOS_5_3:
-    name: Test macOS 10.15 (5.3)
-    runs-on: macOS-10.15
+  macOS:
+    name: Test macOS (5.5, 5.4, 5.3)
+    runs-on: ${{ matrix.runsOn }}
     env:
-      DEVELOPER_DIR: /Applications/Xcode_12.4.app/Contents/Developer
-    timeout-minutes: 10
-    steps:
-      - uses: actions/checkout@v2
-      - name: Install Firewalk
-        run: brew install alamofire/alamofire/firewalk && firewalk &
-      - name: macOS 10.15 (5.3)
-        run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Alamofire.xcodeproj" -scheme "Alamofire macOS" -destination "platform=macOS" clean test | xcpretty
-  macOS_5_4:
-    name: Test macOS 11 (5.4)
-    runs-on: macOS-11
-    env:
-      DEVELOPER_DIR: /Applications/Xcode_12.5.1.app/Contents/Developer
+      DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}/Contents/Developer"
     timeout-minutes: 10
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+          - xcode: "Xcode_13.2.1.app"
+            runsOn: macOS-11
+            name: "macOS 11, Swift 5.5"
+          - xcode: "Xcode_12.5.1.app"
+            runsOn: macOS-11
+            name: "macOS 11, Swift 5.4"
+          - xcode: "Xcode_12.4.app"
+            runsOn: macOS-10.15
+            name: "macOS 10.15, Swift 5.3"
     steps:
       - uses: actions/checkout@v2
       - name: Install Firewalk
         run: brew install alamofire/alamofire/firewalk && firewalk &
-      - name: macOS 11 (5.4)
-        run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Alamofire.xcodeproj" -scheme "Alamofire macOS" -destination "platform=macOS" clean test | xcpretty
-  macOS_5_5:
-    name: Test macOS 11 (5.5)
-    runs-on: firebreak
-    defaults:
-      run:
-        shell: "/usr/bin/arch -arch arm64e /bin/zsh {0}"
-    env:
-      DEVELOPER_DIR: /Applications/Xcode_13.1.app/Contents/Developer
-    timeout-minutes: 10
-    steps:
-      - uses: actions/checkout@v2
-      - name: Install Firewalk
-        run: brew install alamofire/alamofire/firewalk || brew upgrade alamofire/alamofire/firewalk && firewalk &
-      - name: macOS 11 (5.5)
+      - name: ${{ matrix.name }}
         run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Alamofire.xcodeproj" -scheme "Alamofire macOS" -destination "platform=macOS" clean test | xcpretty
   Catalyst:
     name: Test Catalyst
     runs-on: macOS-11
     env:
-      DEVELOPER_DIR: /Applications/Xcode_13.1.app/Contents/Developer
+      DEVELOPER_DIR: /Applications/Xcode_13.2.1.app/Contents/Developer
     timeout-minutes: 10
     steps:
       - uses: actions/checkout@v2
@@ -73,38 +59,34 @@ jobs:
       - name: Catalyst
         run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Alamofire.xcodeproj" -scheme "Alamofire iOS" -destination "platform=macOS" clean test | xcpretty
   iOS:
-    name: Test iOS 15
+    name: "Test iOS"
     runs-on: firebreak
     defaults:
       run:
         shell: "/usr/bin/arch -arch arm64e /bin/zsh {0}"
     env:
-      DEVELOPER_DIR: /Applications/Xcode_13.1.app/Contents/Developer
+      DEVELOPER_DIR: "/Applications/Xcode_13.2.1.app/Contents/Developer"
     timeout-minutes: 10
     strategy:
+      fail-fast: false
       matrix:
-        destination: ["OS=15.0,name=iPhone 13 Pro"]
+        include:
+          - destination: "OS=15.2,name=iPhone 13 Pro"
+            name: "iOS 15.2"
+          - destination: "OS=14.5,name=iPhone 12 Pro"
+            name: "iOS 14.5"
+          - destination: "OS=13.7,name=iPhone 11 Pro"
+            name: "iOS 13.7"
+          # - destination: "OS=12.4,name=iPhone Xs"
+          #   name: "iOS 12.4"
+          # - destination: "OS=11.4,name=iPhone 7"
+          #   name: "iOS 11.4"
     steps:
       - uses: actions/checkout@v2
       - name: Install Firewalk
         run: brew install alamofire/alamofire/firewalk || brew upgrade alamofire/alamofire/firewalk && firewalk &
-      - name: iOS - ${{ matrix.destination }}
+      - name: ${{ matrix.name }}
         run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Alamofire.xcodeproj" -scheme "Alamofire iOS" -destination "${{ matrix.destination }}" clean test | xcpretty
-  iOS_Concurrency:
-    name: Test Swift Concurrency
-    runs-on: macOS-11
-    env:
-      DEVELOPER_DIR: /Applications/Xcode_13.2.app/Contents/Developer
-    timeout-minutes: 10
-    strategy:
-      matrix:
-        destination: ["OS=15.2,name=iPhone 13 Pro"]
-    steps:
-      - uses: actions/checkout@v2
-      - name: Install Firewalk
-        run: brew install alamofire/alamofire/firewalk || brew upgrade alamofire/alamofire/firewalk && firewalk &
-      - name: iOS - ${{ matrix.destination }}
-        run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Alamofire.xcodeproj" -scheme "Alamofire iOS" -destination "${{ matrix.destination }}" -enableThreadSanitizer NO clean test | xcpretty
   tvOS:
     name: Test tvOS
     runs-on: firebreak
@@ -112,16 +94,23 @@ jobs:
       run:
         shell: "/usr/bin/arch -arch arm64e /bin/zsh {0}"
     env:
-      DEVELOPER_DIR: /Applications/Xcode_13.1.app/Contents/Developer
+      DEVELOPER_DIR: /Applications/Xcode_13.2.1.app/Contents/Developer
     timeout-minutes: 10
     strategy:
+      fail-fast: false
       matrix:
-        destination: ["OS=15.0,name=Apple TV"]
+        include:
+          - destination: "OS=15.2,name=Apple TV"
+            name: "tvOS 15.2"
+          - destination: "OS=14.5,name=Apple TV"
+            name: "tvOS 14.5"
+          - destination: "OS=13.4,name=Apple TV"
+            name: "tvOS 13.4"
     steps:
       - uses: actions/checkout@v2
       - name: Install Firewalk
         run: brew install alamofire/alamofire/firewalk || brew upgrade alamofire/alamofire/firewalk && firewalk &
-      - name: tvOS - ${{ matrix.destination }}
+      - name: ${{ matrix.name }}
         run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Alamofire.xcodeproj" -scheme "Alamofire tvOS" -destination "${{ matrix.destination }}" clean test | xcpretty
   watchOS:
     name: Test watchOS
@@ -130,37 +119,39 @@ jobs:
       run:
         shell: "/usr/bin/arch -arch arm64e /bin/zsh {0}"
     env:
-      DEVELOPER_DIR: /Applications/Xcode_13.1.app/Contents/Developer
+      DEVELOPER_DIR: /Applications/Xcode_13.2.1.app/Contents/Developer
     timeout-minutes: 10
     strategy:
+      fail-fast: false
       matrix:
-        destination: ["OS=8.0,name=Apple Watch Series 7 - 45mm"]
+        include:
+          - destination: "OS=8.3,name=Apple Watch Series 7 - 45mm"
+            name: "watchOS 8.3"
+          - destination: "OS=7.4,name=Apple Watch Series 6 - 44mm"
+            name: "watchOS 7.4"
     steps:
       - uses: actions/checkout@v2
       - name: Install Firewalk
         run: brew install alamofire/alamofire/firewalk || brew upgrade alamofire/alamofire/firewalk && firewalk &
-      - name: watchOS - ${{ matrix.destination }}
+      - name: ${{ matrix.name}}
         run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -project "Alamofire.xcodeproj" -scheme "Alamofire watchOS" -destination "${{ matrix.destination }}" clean test | xcpretty
   SPM:
     name: Test with SPM
-    runs-on: firebreak
-    defaults:
-      run:
-        shell: "/usr/bin/arch -arch arm64e /bin/zsh {0}"
+    runs-on: macOS-11
     env:
-      DEVELOPER_DIR: /Applications/Xcode_13.1.app/Contents/Developer
+      DEVELOPER_DIR: /Applications/Xcode_13.2.1.app/Contents/Developer
     timeout-minutes: 10
     steps:
       - uses: actions/checkout@v2
       - name: Install Firewalk
-        run: brew install alamofire/alamofire/firewalk || brew upgrade alamofire/alamofire/firewalk && firewalk &
-      - name: SPM Test
+        run: brew install alamofire/alamofire/firewalk && firewalk &
+      - name: Test SPM
         run: swift test -c debug
   Linux:
     name: Linux
     runs-on: ubuntu-20.04
     container:
-      image: swift:5.5.1-focal
+      image: swift:5.5.2-focal
     timeout-minutes: 10
     steps:
       - uses: actions/checkout@v2
@@ -186,7 +177,7 @@ jobs:
     - uses: seanmiddleditch/gha-setup-vsdevenv@master
     - name: Install Swift
       run: |
-        Install-Binary -Url "https://swift.org/builds/swift-5.5.1-release/windows10/swift-5.5.1-RELEASE/swift-5.5.1-RELEASE-windows10.exe" -Name "installer.exe" -ArgumentList ("-q")
+        Install-Binary -Url "https://swift.org/builds/swift-5.5.2-release/windows10/swift-5.5.2-RELEASE/swift-5.5.2-RELEASE-windows10.exe" -Name "installer.exe" -ArgumentList ("-q")
     - name: Set Environment Variables
       run: |
         echo "SDKROOT=C:\Library\Developer\Platforms\Windows.platform\Developer\SDKs\Windows.sdk" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append

+ 7 - 0
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:">
+   </FileRef>
+</Workspace>

+ 264 - 294
Alamofire.xcodeproj/project.pbxproj

@@ -47,6 +47,102 @@
 		3113D46B21878227001CCD21 /* HTTPHeadersTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3113D46A21878227001CCD21 /* HTTPHeadersTests.swift */; };
 		3113D46C21878227001CCD21 /* HTTPHeadersTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3113D46A21878227001CCD21 /* HTTPHeadersTests.swift */; };
 		3113D46D21878227001CCD21 /* HTTPHeadersTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3113D46A21878227001CCD21 /* HTTPHeadersTests.swift */; };
+		31181E122794FE5400E88600 /* Bundle+AlamofireTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31181E112794FE5400E88600 /* Bundle+AlamofireTests.swift */; };
+		31181E132794FE5400E88600 /* Bundle+AlamofireTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31181E112794FE5400E88600 /* Bundle+AlamofireTests.swift */; };
+		31181E142794FE5400E88600 /* Bundle+AlamofireTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31181E112794FE5400E88600 /* Bundle+AlamofireTests.swift */; };
+		31181E152794FE5400E88600 /* Bundle+AlamofireTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31181E112794FE5400E88600 /* Bundle+AlamofireTests.swift */; };
+		31181E302794FF9600E88600 /* certPEM.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E172794FF9600E88600 /* certPEM.cer */; };
+		31181E312794FF9600E88600 /* certPEM.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E172794FF9600E88600 /* certPEM.cer */; };
+		31181E322794FF9600E88600 /* certPEM.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E172794FF9600E88600 /* certPEM.cer */; };
+		31181E332794FF9600E88600 /* certPEM.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E172794FF9600E88600 /* certPEM.cer */; };
+		31181E342794FF9600E88600 /* randomGibberish.crt in Resources */ = {isa = PBXBuildFile; fileRef = 31181E182794FF9600E88600 /* randomGibberish.crt */; };
+		31181E352794FF9600E88600 /* randomGibberish.crt in Resources */ = {isa = PBXBuildFile; fileRef = 31181E182794FF9600E88600 /* randomGibberish.crt */; };
+		31181E362794FF9600E88600 /* randomGibberish.crt in Resources */ = {isa = PBXBuildFile; fileRef = 31181E182794FF9600E88600 /* randomGibberish.crt */; };
+		31181E372794FF9600E88600 /* randomGibberish.crt in Resources */ = {isa = PBXBuildFile; fileRef = 31181E182794FF9600E88600 /* randomGibberish.crt */; };
+		31181E382794FF9600E88600 /* certDER.der in Resources */ = {isa = PBXBuildFile; fileRef = 31181E192794FF9600E88600 /* certDER.der */; };
+		31181E392794FF9600E88600 /* certDER.der in Resources */ = {isa = PBXBuildFile; fileRef = 31181E192794FF9600E88600 /* certDER.der */; };
+		31181E3A2794FF9600E88600 /* certDER.der in Resources */ = {isa = PBXBuildFile; fileRef = 31181E192794FF9600E88600 /* certDER.der */; };
+		31181E3B2794FF9600E88600 /* certDER.der in Resources */ = {isa = PBXBuildFile; fileRef = 31181E192794FF9600E88600 /* certDER.der */; };
+		31181E3C2794FF9600E88600 /* keyDER.der in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1A2794FF9600E88600 /* keyDER.der */; };
+		31181E3D2794FF9600E88600 /* keyDER.der in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1A2794FF9600E88600 /* keyDER.der */; };
+		31181E3E2794FF9600E88600 /* keyDER.der in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1A2794FF9600E88600 /* keyDER.der */; };
+		31181E3F2794FF9600E88600 /* keyDER.der in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1A2794FF9600E88600 /* keyDER.der */; };
+		31181E402794FF9600E88600 /* certDER.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1B2794FF9600E88600 /* certDER.cer */; };
+		31181E412794FF9600E88600 /* certDER.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1B2794FF9600E88600 /* certDER.cer */; };
+		31181E422794FF9600E88600 /* certDER.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1B2794FF9600E88600 /* certDER.cer */; };
+		31181E432794FF9600E88600 /* certDER.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1B2794FF9600E88600 /* certDER.cer */; };
+		31181E442794FF9600E88600 /* certPEM.crt in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1C2794FF9600E88600 /* certPEM.crt */; };
+		31181E452794FF9600E88600 /* certPEM.crt in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1C2794FF9600E88600 /* certPEM.crt */; };
+		31181E462794FF9600E88600 /* certPEM.crt in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1C2794FF9600E88600 /* certPEM.crt */; };
+		31181E472794FF9600E88600 /* certPEM.crt in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1C2794FF9600E88600 /* certPEM.crt */; };
+		31181E482794FF9600E88600 /* certDER.crt in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1D2794FF9600E88600 /* certDER.crt */; };
+		31181E492794FF9600E88600 /* certDER.crt in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1D2794FF9600E88600 /* certDER.crt */; };
+		31181E4A2794FF9600E88600 /* certDER.crt in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1D2794FF9600E88600 /* certDER.crt */; };
+		31181E4B2794FF9600E88600 /* certDER.crt in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1D2794FF9600E88600 /* certDER.crt */; };
+		31181E4C2794FF9600E88600 /* alamofire-signing-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1F2794FF9600E88600 /* alamofire-signing-ca2.cer */; };
+		31181E4D2794FF9600E88600 /* alamofire-signing-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1F2794FF9600E88600 /* alamofire-signing-ca2.cer */; };
+		31181E4E2794FF9600E88600 /* alamofire-signing-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1F2794FF9600E88600 /* alamofire-signing-ca2.cer */; };
+		31181E4F2794FF9600E88600 /* alamofire-signing-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E1F2794FF9600E88600 /* alamofire-signing-ca2.cer */; };
+		31181E502794FF9600E88600 /* alamofire-signing-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E202794FF9600E88600 /* alamofire-signing-ca1.cer */; };
+		31181E512794FF9600E88600 /* alamofire-signing-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E202794FF9600E88600 /* alamofire-signing-ca1.cer */; };
+		31181E522794FF9600E88600 /* alamofire-signing-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E202794FF9600E88600 /* alamofire-signing-ca1.cer */; };
+		31181E532794FF9600E88600 /* alamofire-signing-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E202794FF9600E88600 /* alamofire-signing-ca1.cer */; };
+		31181E542794FF9600E88600 /* signed-by-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E212794FF9600E88600 /* signed-by-ca2.cer */; };
+		31181E552794FF9600E88600 /* signed-by-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E212794FF9600E88600 /* signed-by-ca2.cer */; };
+		31181E562794FF9600E88600 /* signed-by-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E212794FF9600E88600 /* signed-by-ca2.cer */; };
+		31181E572794FF9600E88600 /* signed-by-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E212794FF9600E88600 /* signed-by-ca2.cer */; };
+		31181E582794FF9600E88600 /* signed-by-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E222794FF9600E88600 /* signed-by-ca1.cer */; };
+		31181E592794FF9600E88600 /* signed-by-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E222794FF9600E88600 /* signed-by-ca1.cer */; };
+		31181E5A2794FF9600E88600 /* signed-by-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E222794FF9600E88600 /* signed-by-ca1.cer */; };
+		31181E5B2794FF9600E88600 /* signed-by-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E222794FF9600E88600 /* signed-by-ca1.cer */; };
+		31181E5C2794FF9600E88600 /* missing-dns-name-and-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E232794FF9600E88600 /* missing-dns-name-and-uri.cer */; };
+		31181E5D2794FF9600E88600 /* missing-dns-name-and-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E232794FF9600E88600 /* missing-dns-name-and-uri.cer */; };
+		31181E5E2794FF9600E88600 /* missing-dns-name-and-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E232794FF9600E88600 /* missing-dns-name-and-uri.cer */; };
+		31181E5F2794FF9600E88600 /* missing-dns-name-and-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E232794FF9600E88600 /* missing-dns-name-and-uri.cer */; };
+		31181E602794FF9600E88600 /* wildcard.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E242794FF9600E88600 /* wildcard.alamofire.org.cer */; };
+		31181E612794FF9600E88600 /* wildcard.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E242794FF9600E88600 /* wildcard.alamofire.org.cer */; };
+		31181E622794FF9600E88600 /* wildcard.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E242794FF9600E88600 /* wildcard.alamofire.org.cer */; };
+		31181E632794FF9600E88600 /* wildcard.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E242794FF9600E88600 /* wildcard.alamofire.org.cer */; };
+		31181E642794FF9600E88600 /* test.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E252794FF9600E88600 /* test.alamofire.org.cer */; };
+		31181E652794FF9600E88600 /* test.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E252794FF9600E88600 /* test.alamofire.org.cer */; };
+		31181E662794FF9600E88600 /* test.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E252794FF9600E88600 /* test.alamofire.org.cer */; };
+		31181E672794FF9600E88600 /* test.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E252794FF9600E88600 /* test.alamofire.org.cer */; };
+		31181E682794FF9600E88600 /* alamofire-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E262794FF9600E88600 /* alamofire-root-ca.cer */; };
+		31181E692794FF9600E88600 /* alamofire-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E262794FF9600E88600 /* alamofire-root-ca.cer */; };
+		31181E6A2794FF9600E88600 /* alamofire-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E262794FF9600E88600 /* alamofire-root-ca.cer */; };
+		31181E6B2794FF9600E88600 /* alamofire-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E262794FF9600E88600 /* alamofire-root-ca.cer */; };
+		31181E6C2794FF9600E88600 /* valid-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E272794FF9600E88600 /* valid-uri.cer */; };
+		31181E6D2794FF9600E88600 /* valid-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E272794FF9600E88600 /* valid-uri.cer */; };
+		31181E6E2794FF9600E88600 /* valid-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E272794FF9600E88600 /* valid-uri.cer */; };
+		31181E6F2794FF9600E88600 /* valid-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E272794FF9600E88600 /* valid-uri.cer */; };
+		31181E702794FF9600E88600 /* multiple-dns-names.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E282794FF9600E88600 /* multiple-dns-names.cer */; };
+		31181E712794FF9600E88600 /* multiple-dns-names.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E282794FF9600E88600 /* multiple-dns-names.cer */; };
+		31181E722794FF9600E88600 /* multiple-dns-names.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E282794FF9600E88600 /* multiple-dns-names.cer */; };
+		31181E732794FF9600E88600 /* multiple-dns-names.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E282794FF9600E88600 /* multiple-dns-names.cer */; };
+		31181E742794FF9600E88600 /* expired.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E292794FF9600E88600 /* expired.cer */; };
+		31181E752794FF9600E88600 /* expired.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E292794FF9600E88600 /* expired.cer */; };
+		31181E762794FF9600E88600 /* expired.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E292794FF9600E88600 /* expired.cer */; };
+		31181E772794FF9600E88600 /* expired.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E292794FF9600E88600 /* expired.cer */; };
+		31181E782794FF9600E88600 /* valid-dns-name.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2A2794FF9600E88600 /* valid-dns-name.cer */; };
+		31181E792794FF9600E88600 /* valid-dns-name.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2A2794FF9600E88600 /* valid-dns-name.cer */; };
+		31181E7A2794FF9600E88600 /* valid-dns-name.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2A2794FF9600E88600 /* valid-dns-name.cer */; };
+		31181E7B2794FF9600E88600 /* valid-dns-name.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2A2794FF9600E88600 /* valid-dns-name.cer */; };
+		31181E7C2794FF9600E88600 /* expired.badssl.com-intermediate-ca-1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2C2794FF9600E88600 /* expired.badssl.com-intermediate-ca-1.cer */; };
+		31181E7D2794FF9600E88600 /* expired.badssl.com-intermediate-ca-1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2C2794FF9600E88600 /* expired.badssl.com-intermediate-ca-1.cer */; };
+		31181E7E2794FF9600E88600 /* expired.badssl.com-intermediate-ca-1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2C2794FF9600E88600 /* expired.badssl.com-intermediate-ca-1.cer */; };
+		31181E7F2794FF9600E88600 /* expired.badssl.com-intermediate-ca-1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2C2794FF9600E88600 /* expired.badssl.com-intermediate-ca-1.cer */; };
+		31181E802794FF9600E88600 /* expired.badssl.com-intermediate-ca-2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2D2794FF9600E88600 /* expired.badssl.com-intermediate-ca-2.cer */; };
+		31181E812794FF9600E88600 /* expired.badssl.com-intermediate-ca-2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2D2794FF9600E88600 /* expired.badssl.com-intermediate-ca-2.cer */; };
+		31181E822794FF9600E88600 /* expired.badssl.com-intermediate-ca-2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2D2794FF9600E88600 /* expired.badssl.com-intermediate-ca-2.cer */; };
+		31181E832794FF9600E88600 /* expired.badssl.com-intermediate-ca-2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2D2794FF9600E88600 /* expired.badssl.com-intermediate-ca-2.cer */; };
+		31181E842794FF9600E88600 /* expired.badssl.com-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2E2794FF9600E88600 /* expired.badssl.com-root-ca.cer */; };
+		31181E852794FF9600E88600 /* expired.badssl.com-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2E2794FF9600E88600 /* expired.badssl.com-root-ca.cer */; };
+		31181E862794FF9600E88600 /* expired.badssl.com-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2E2794FF9600E88600 /* expired.badssl.com-root-ca.cer */; };
+		31181E872794FF9600E88600 /* expired.badssl.com-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2E2794FF9600E88600 /* expired.badssl.com-root-ca.cer */; };
+		31181E882794FF9600E88600 /* expired.badssl.com-leaf.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2F2794FF9600E88600 /* expired.badssl.com-leaf.cer */; };
+		31181E892794FF9600E88600 /* expired.badssl.com-leaf.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2F2794FF9600E88600 /* expired.badssl.com-leaf.cer */; };
+		31181E8A2794FF9600E88600 /* expired.badssl.com-leaf.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2F2794FF9600E88600 /* expired.badssl.com-leaf.cer */; };
+		31181E8B2794FF9600E88600 /* expired.badssl.com-leaf.cer in Resources */ = {isa = PBXBuildFile; fileRef = 31181E2F2794FF9600E88600 /* expired.badssl.com-leaf.cer */; };
 		311A89BF23185BBF003BB714 /* CachedResponseHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFD6B132201338E00FFB5E3 /* CachedResponseHandlerTests.swift */; };
 		311A89C023185BBF003BB714 /* CachedResponseHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFD6B132201338E00FFB5E3 /* CachedResponseHandlerTests.swift */; };
 		311A89C123185BC0003BB714 /* CachedResponseHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFD6B132201338E00FFB5E3 /* CachedResponseHandlerTests.swift */; };
@@ -93,29 +189,6 @@
 		31293090263E184500473CEA /* TLSEvaluationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F86AEFE51AE6A282007D9C76 /* TLSEvaluationTests.swift */; };
 		31293091263E184500473CEA /* URLProtocolTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CCFA7991B2BE71600B6F460 /* URLProtocolTests.swift */; };
 		31293092263E184900473CEA /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7DD7EA224C627300249836 /* Result+Alamofire.swift */; };
-		31293093263E185D00473CEA /* alamofire-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C3A1B535F220017E0BF /* alamofire-root-ca.cer */; };
-		31293094263E186000473CEA /* alamofire-signing-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C3D1B535F2E0017E0BF /* alamofire-signing-ca1.cer */; };
-		31293095263E186000473CEA /* alamofire-signing-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C3E1B535F2E0017E0BF /* alamofire-signing-ca2.cer */; };
-		31293096263E186400473CEA /* test.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C461B535F400017E0BF /* test.alamofire.org.cer */; };
-		31293097263E186400473CEA /* signed-by-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C451B535F400017E0BF /* signed-by-ca1.cer */; };
-		31293098263E186400473CEA /* multiple-dns-names.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C441B535F400017E0BF /* multiple-dns-names.cer */; };
-		31293099263E186400473CEA /* wildcard.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C431B535F400017E0BF /* wildcard.alamofire.org.cer */; };
-		3129309A263E186700473CEA /* expired.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C4F1B535F540017E0BF /* expired.cer */; };
-		3129309B263E186700473CEA /* missing-dns-name-and-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C501B535F540017E0BF /* missing-dns-name-and-uri.cer */; };
-		3129309C263E186700473CEA /* signed-by-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C511B535F540017E0BF /* signed-by-ca2.cer */; };
-		3129309D263E186700473CEA /* valid-dns-name.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C521B535F540017E0BF /* valid-dns-name.cer */; };
-		3129309E263E186700473CEA /* valid-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C531B535F540017E0BF /* valid-uri.cer */; };
-		3129309F263E186A00473CEA /* expired.badssl.com-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB20691D4549E000C64D5B /* expired.badssl.com-root-ca.cer */; };
-		312930A0263E186A00473CEA /* expired.badssl.com-intermediate-ca-1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB206A1D4549E000C64D5B /* expired.badssl.com-intermediate-ca-1.cer */; };
-		312930A1263E186A00473CEA /* expired.badssl.com-intermediate-ca-2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB206B1D4549E000C64D5B /* expired.badssl.com-intermediate-ca-2.cer */; };
-		312930A2263E186A00473CEA /* expired.badssl.com-leaf.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB20681D4549E000C64D5B /* expired.badssl.com-leaf.cer */; };
-		312930A3263E186E00473CEA /* certDER.cer in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F831C1A72F8002DA1A9 /* certDER.cer */; };
-		312930A4263E186E00473CEA /* certDER.der in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F851C1A72F8002DA1A9 /* certDER.der */; };
-		312930A5263E186E00473CEA /* randomGibberish.crt in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F891C1A72F8002DA1A9 /* randomGibberish.crt */; };
-		312930A6263E186E00473CEA /* certDER.crt in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F841C1A72F8002DA1A9 /* certDER.crt */; };
-		312930A7263E186E00473CEA /* certPEM.cer in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F861C1A72F8002DA1A9 /* certPEM.cer */; };
-		312930A8263E186E00473CEA /* keyDER.der in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F8A1C1A72F8002DA1A9 /* keyDER.der */; };
-		312930A9263E186E00473CEA /* certPEM.crt in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F871C1A72F8002DA1A9 /* certPEM.crt */; };
 		312930AA263E187200473CEA /* unicorn.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C33A1241B5207DB00873DFF /* unicorn.png */; };
 		312930AB263E187200473CEA /* rainbow.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 4C33A1231B5207DB00873DFF /* rainbow.jpg */; };
 		312930AC263E187500473CEA /* empty_data.json in Resources */ = {isa = PBXBuildFile; fileRef = 4CFB02EA1D7D2FA20056F249 /* empty_data.json */; };
@@ -282,63 +355,6 @@
 		4C67D1372454B12A00CBA725 /* AuthenticationInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C67D1352454B12A00CBA725 /* AuthenticationInterceptor.swift */; };
 		4C67D1382454B12A00CBA725 /* AuthenticationInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C67D1352454B12A00CBA725 /* AuthenticationInterceptor.swift */; };
 		4C67D1392454B12A00CBA725 /* AuthenticationInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C67D1352454B12A00CBA725 /* AuthenticationInterceptor.swift */; };
-		4C743CF61C22772D00BCB23E /* certDER.cer in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F831C1A72F8002DA1A9 /* certDER.cer */; };
-		4C743CF71C22772D00BCB23E /* certDER.crt in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F841C1A72F8002DA1A9 /* certDER.crt */; };
-		4C743CF81C22772D00BCB23E /* certDER.der in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F851C1A72F8002DA1A9 /* certDER.der */; };
-		4C743CF91C22772D00BCB23E /* certPEM.cer in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F861C1A72F8002DA1A9 /* certPEM.cer */; };
-		4C743CFA1C22772D00BCB23E /* certPEM.crt in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F871C1A72F8002DA1A9 /* certPEM.crt */; };
-		4C743CFB1C22772D00BCB23E /* randomGibberish.crt in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F891C1A72F8002DA1A9 /* randomGibberish.crt */; };
-		4C743CFC1C22772D00BCB23E /* keyDER.der in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F8A1C1A72F8002DA1A9 /* keyDER.der */; };
-		4C743CFD1C22772D00BCB23E /* alamofire-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C3A1B535F220017E0BF /* alamofire-root-ca.cer */; };
-		4C743CFE1C22772D00BCB23E /* alamofire-signing-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C3D1B535F2E0017E0BF /* alamofire-signing-ca1.cer */; };
-		4C743CFF1C22772D00BCB23E /* alamofire-signing-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C3E1B535F2E0017E0BF /* alamofire-signing-ca2.cer */; };
-		4C743D001C22772D00BCB23E /* multiple-dns-names.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C441B535F400017E0BF /* multiple-dns-names.cer */; };
-		4C743D011C22772D00BCB23E /* signed-by-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C451B535F400017E0BF /* signed-by-ca1.cer */; };
-		4C743D021C22772D00BCB23E /* test.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C461B535F400017E0BF /* test.alamofire.org.cer */; };
-		4C743D031C22772D00BCB23E /* wildcard.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C431B535F400017E0BF /* wildcard.alamofire.org.cer */; };
-		4C743D041C22772D00BCB23E /* expired.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C4F1B535F540017E0BF /* expired.cer */; };
-		4C743D051C22772D00BCB23E /* missing-dns-name-and-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C501B535F540017E0BF /* missing-dns-name-and-uri.cer */; };
-		4C743D061C22772D00BCB23E /* signed-by-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C511B535F540017E0BF /* signed-by-ca2.cer */; };
-		4C743D071C22772D00BCB23E /* valid-dns-name.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C521B535F540017E0BF /* valid-dns-name.cer */; };
-		4C743D081C22772D00BCB23E /* valid-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C531B535F540017E0BF /* valid-uri.cer */; };
-		4C743D0C1C22772E00BCB23E /* certDER.cer in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F831C1A72F8002DA1A9 /* certDER.cer */; };
-		4C743D0D1C22772E00BCB23E /* certDER.crt in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F841C1A72F8002DA1A9 /* certDER.crt */; };
-		4C743D0E1C22772E00BCB23E /* certDER.der in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F851C1A72F8002DA1A9 /* certDER.der */; };
-		4C743D0F1C22772E00BCB23E /* certPEM.cer in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F861C1A72F8002DA1A9 /* certPEM.cer */; };
-		4C743D101C22772E00BCB23E /* certPEM.crt in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F871C1A72F8002DA1A9 /* certPEM.crt */; };
-		4C743D111C22772E00BCB23E /* randomGibberish.crt in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F891C1A72F8002DA1A9 /* randomGibberish.crt */; };
-		4C743D121C22772E00BCB23E /* keyDER.der in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F8A1C1A72F8002DA1A9 /* keyDER.der */; };
-		4C743D131C22772E00BCB23E /* alamofire-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C3A1B535F220017E0BF /* alamofire-root-ca.cer */; };
-		4C743D141C22772E00BCB23E /* alamofire-signing-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C3D1B535F2E0017E0BF /* alamofire-signing-ca1.cer */; };
-		4C743D151C22772E00BCB23E /* alamofire-signing-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C3E1B535F2E0017E0BF /* alamofire-signing-ca2.cer */; };
-		4C743D161C22772E00BCB23E /* multiple-dns-names.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C441B535F400017E0BF /* multiple-dns-names.cer */; };
-		4C743D171C22772E00BCB23E /* signed-by-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C451B535F400017E0BF /* signed-by-ca1.cer */; };
-		4C743D181C22772E00BCB23E /* test.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C461B535F400017E0BF /* test.alamofire.org.cer */; };
-		4C743D191C22772E00BCB23E /* wildcard.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C431B535F400017E0BF /* wildcard.alamofire.org.cer */; };
-		4C743D1A1C22772E00BCB23E /* expired.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C4F1B535F540017E0BF /* expired.cer */; };
-		4C743D1B1C22772E00BCB23E /* missing-dns-name-and-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C501B535F540017E0BF /* missing-dns-name-and-uri.cer */; };
-		4C743D1C1C22772E00BCB23E /* signed-by-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C511B535F540017E0BF /* signed-by-ca2.cer */; };
-		4C743D1D1C22772E00BCB23E /* valid-dns-name.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C521B535F540017E0BF /* valid-dns-name.cer */; };
-		4C743D1E1C22772E00BCB23E /* valid-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C531B535F540017E0BF /* valid-uri.cer */; };
-		4C743D221C22772F00BCB23E /* certDER.cer in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F831C1A72F8002DA1A9 /* certDER.cer */; };
-		4C743D231C22772F00BCB23E /* certDER.crt in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F841C1A72F8002DA1A9 /* certDER.crt */; };
-		4C743D241C22772F00BCB23E /* certDER.der in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F851C1A72F8002DA1A9 /* certDER.der */; };
-		4C743D251C22772F00BCB23E /* certPEM.cer in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F861C1A72F8002DA1A9 /* certPEM.cer */; };
-		4C743D261C22772F00BCB23E /* certPEM.crt in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F871C1A72F8002DA1A9 /* certPEM.crt */; };
-		4C743D271C22772F00BCB23E /* randomGibberish.crt in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F891C1A72F8002DA1A9 /* randomGibberish.crt */; };
-		4C743D281C22772F00BCB23E /* keyDER.der in Resources */ = {isa = PBXBuildFile; fileRef = B39E2F8A1C1A72F8002DA1A9 /* keyDER.der */; };
-		4C743D291C22772F00BCB23E /* alamofire-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C3A1B535F220017E0BF /* alamofire-root-ca.cer */; };
-		4C743D2A1C22772F00BCB23E /* alamofire-signing-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C3D1B535F2E0017E0BF /* alamofire-signing-ca1.cer */; };
-		4C743D2B1C22772F00BCB23E /* alamofire-signing-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C3E1B535F2E0017E0BF /* alamofire-signing-ca2.cer */; };
-		4C743D2C1C22772F00BCB23E /* multiple-dns-names.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C441B535F400017E0BF /* multiple-dns-names.cer */; };
-		4C743D2D1C22772F00BCB23E /* signed-by-ca1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C451B535F400017E0BF /* signed-by-ca1.cer */; };
-		4C743D2E1C22772F00BCB23E /* test.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C461B535F400017E0BF /* test.alamofire.org.cer */; };
-		4C743D2F1C22772F00BCB23E /* wildcard.alamofire.org.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C431B535F400017E0BF /* wildcard.alamofire.org.cer */; };
-		4C743D301C22772F00BCB23E /* expired.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C4F1B535F540017E0BF /* expired.cer */; };
-		4C743D311C22772F00BCB23E /* missing-dns-name-and-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C501B535F540017E0BF /* missing-dns-name-and-uri.cer */; };
-		4C743D321C22772F00BCB23E /* signed-by-ca2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C511B535F540017E0BF /* signed-by-ca2.cer */; };
-		4C743D331C22772F00BCB23E /* valid-dns-name.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C521B535F540017E0BF /* valid-dns-name.cer */; };
-		4C743D341C22772F00BCB23E /* valid-uri.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4C812C531B535F540017E0BF /* valid-uri.cer */; };
 		4C7DD7EB224C627300249836 /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7DD7EA224C627300249836 /* Result+Alamofire.swift */; };
 		4C7DD7EC224C627300249836 /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7DD7EA224C627300249836 /* Result+Alamofire.swift */; };
 		4C7DD7ED224C627300249836 /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7DD7EA224C627300249836 /* Result+Alamofire.swift */; };
@@ -354,18 +370,6 @@
 		4CBD2180220B48AE008F1C59 /* RetryPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CBD217F220B48AE008F1C59 /* RetryPolicyTests.swift */; };
 		4CBD2181220B48AE008F1C59 /* RetryPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CBD217F220B48AE008F1C59 /* RetryPolicyTests.swift */; };
 		4CBD2182220B48AE008F1C59 /* RetryPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CBD217F220B48AE008F1C59 /* RetryPolicyTests.swift */; };
-		4CCB206C1D4549E000C64D5B /* expired.badssl.com-leaf.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB20681D4549E000C64D5B /* expired.badssl.com-leaf.cer */; };
-		4CCB206D1D4549E000C64D5B /* expired.badssl.com-leaf.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB20681D4549E000C64D5B /* expired.badssl.com-leaf.cer */; };
-		4CCB206E1D4549E000C64D5B /* expired.badssl.com-leaf.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB20681D4549E000C64D5B /* expired.badssl.com-leaf.cer */; };
-		4CCB206F1D4549E000C64D5B /* expired.badssl.com-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB20691D4549E000C64D5B /* expired.badssl.com-root-ca.cer */; };
-		4CCB20701D4549E000C64D5B /* expired.badssl.com-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB20691D4549E000C64D5B /* expired.badssl.com-root-ca.cer */; };
-		4CCB20711D4549E000C64D5B /* expired.badssl.com-root-ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB20691D4549E000C64D5B /* expired.badssl.com-root-ca.cer */; };
-		4CCB20721D4549E000C64D5B /* expired.badssl.com-intermediate-ca-1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB206A1D4549E000C64D5B /* expired.badssl.com-intermediate-ca-1.cer */; };
-		4CCB20731D4549E000C64D5B /* expired.badssl.com-intermediate-ca-1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB206A1D4549E000C64D5B /* expired.badssl.com-intermediate-ca-1.cer */; };
-		4CCB20741D4549E000C64D5B /* expired.badssl.com-intermediate-ca-1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB206A1D4549E000C64D5B /* expired.badssl.com-intermediate-ca-1.cer */; };
-		4CCB20751D4549E000C64D5B /* expired.badssl.com-intermediate-ca-2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB206B1D4549E000C64D5B /* expired.badssl.com-intermediate-ca-2.cer */; };
-		4CCB20761D4549E000C64D5B /* expired.badssl.com-intermediate-ca-2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB206B1D4549E000C64D5B /* expired.badssl.com-intermediate-ca-2.cer */; };
-		4CCB20771D4549E000C64D5B /* expired.badssl.com-intermediate-ca-2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 4CCB206B1D4549E000C64D5B /* expired.badssl.com-intermediate-ca-2.cer */; };
 		4CDE2C431AF89F0900BABAE5 /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDE2C421AF89F0900BABAE5 /* Validation.swift */; };
 		4CDE2C441AF89F0900BABAE5 /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDE2C421AF89F0900BABAE5 /* Validation.swift */; };
 		4CDE2C461AF89FF300BABAE5 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDE2C451AF89FF300BABAE5 /* ResponseSerialization.swift */; };
@@ -460,6 +464,30 @@
 		3106FB6423F8D9E0007FAB43 /* DataStreamTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataStreamTests.swift; sourceTree = "<group>"; };
 		3111CE8720A77843008315E2 /* EventMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventMonitor.swift; sourceTree = "<group>"; };
 		3113D46A21878227001CCD21 /* HTTPHeadersTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPHeadersTests.swift; sourceTree = "<group>"; };
+		31181E112794FE5400E88600 /* Bundle+AlamofireTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Bundle+AlamofireTests.swift"; sourceTree = "<group>"; };
+		31181E172794FF9600E88600 /* certPEM.cer */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = certPEM.cer; sourceTree = "<group>"; };
+		31181E182794FF9600E88600 /* randomGibberish.crt */ = {isa = PBXFileReference; lastKnownFileType = file; path = randomGibberish.crt; sourceTree = "<group>"; };
+		31181E192794FF9600E88600 /* certDER.der */ = {isa = PBXFileReference; lastKnownFileType = file; path = certDER.der; sourceTree = "<group>"; };
+		31181E1A2794FF9600E88600 /* keyDER.der */ = {isa = PBXFileReference; lastKnownFileType = file; path = keyDER.der; sourceTree = "<group>"; };
+		31181E1B2794FF9600E88600 /* certDER.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = certDER.cer; sourceTree = "<group>"; };
+		31181E1C2794FF9600E88600 /* certPEM.crt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = certPEM.crt; sourceTree = "<group>"; };
+		31181E1D2794FF9600E88600 /* certDER.crt */ = {isa = PBXFileReference; lastKnownFileType = file; path = certDER.crt; sourceTree = "<group>"; };
+		31181E1F2794FF9600E88600 /* alamofire-signing-ca2.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "alamofire-signing-ca2.cer"; sourceTree = "<group>"; };
+		31181E202794FF9600E88600 /* alamofire-signing-ca1.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "alamofire-signing-ca1.cer"; sourceTree = "<group>"; };
+		31181E212794FF9600E88600 /* signed-by-ca2.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "signed-by-ca2.cer"; sourceTree = "<group>"; };
+		31181E222794FF9600E88600 /* signed-by-ca1.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "signed-by-ca1.cer"; sourceTree = "<group>"; };
+		31181E232794FF9600E88600 /* missing-dns-name-and-uri.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "missing-dns-name-and-uri.cer"; sourceTree = "<group>"; };
+		31181E242794FF9600E88600 /* wildcard.alamofire.org.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = wildcard.alamofire.org.cer; sourceTree = "<group>"; };
+		31181E252794FF9600E88600 /* test.alamofire.org.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = test.alamofire.org.cer; sourceTree = "<group>"; };
+		31181E262794FF9600E88600 /* alamofire-root-ca.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "alamofire-root-ca.cer"; sourceTree = "<group>"; };
+		31181E272794FF9600E88600 /* valid-uri.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "valid-uri.cer"; sourceTree = "<group>"; };
+		31181E282794FF9600E88600 /* multiple-dns-names.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "multiple-dns-names.cer"; sourceTree = "<group>"; };
+		31181E292794FF9600E88600 /* expired.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = expired.cer; sourceTree = "<group>"; };
+		31181E2A2794FF9600E88600 /* valid-dns-name.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "valid-dns-name.cer"; sourceTree = "<group>"; };
+		31181E2C2794FF9600E88600 /* expired.badssl.com-intermediate-ca-1.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "expired.badssl.com-intermediate-ca-1.cer"; sourceTree = "<group>"; };
+		31181E2D2794FF9600E88600 /* expired.badssl.com-intermediate-ca-2.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "expired.badssl.com-intermediate-ca-2.cer"; sourceTree = "<group>"; };
+		31181E2E2794FF9600E88600 /* expired.badssl.com-root-ca.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "expired.badssl.com-root-ca.cer"; sourceTree = "<group>"; };
+		31181E2F2794FF9600E88600 /* expired.badssl.com-leaf.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "expired.badssl.com-leaf.cer"; sourceTree = "<group>"; };
 		311B198F20B0D3B40036823B /* MultipartUpload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipartUpload.swift; sourceTree = "<group>"; };
 		31293065263E17D600473CEA /* Alamofire watchOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Alamofire watchOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		312D1E0B1FC2551400E51FF1 /* Usage.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = Usage.md; path = Documentation/Usage.md; sourceTree = "<group>"; };
@@ -521,18 +549,6 @@
 		4C67D1352454B12A00CBA725 /* AuthenticationInterceptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationInterceptor.swift; sourceTree = "<group>"; };
 		4C7DD7EA224C627300249836 /* Result+Alamofire.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Result+Alamofire.swift"; sourceTree = "<group>"; };
 		4C811F8C1B51856D00E0F59A /* ServerTrustEvaluation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServerTrustEvaluation.swift; sourceTree = "<group>"; };
-		4C812C3A1B535F220017E0BF /* alamofire-root-ca.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = "alamofire-root-ca.cer"; path = "alamofire.org/alamofire-root-ca.cer"; sourceTree = "<group>"; };
-		4C812C3D1B535F2E0017E0BF /* alamofire-signing-ca1.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = "alamofire-signing-ca1.cer"; path = "alamofire.org/alamofire-signing-ca1.cer"; sourceTree = "<group>"; };
-		4C812C3E1B535F2E0017E0BF /* alamofire-signing-ca2.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = "alamofire-signing-ca2.cer"; path = "alamofire.org/alamofire-signing-ca2.cer"; sourceTree = "<group>"; };
-		4C812C431B535F400017E0BF /* wildcard.alamofire.org.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = wildcard.alamofire.org.cer; path = alamofire.org/wildcard.alamofire.org.cer; sourceTree = "<group>"; };
-		4C812C441B535F400017E0BF /* multiple-dns-names.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = "multiple-dns-names.cer"; path = "alamofire.org/multiple-dns-names.cer"; sourceTree = "<group>"; };
-		4C812C451B535F400017E0BF /* signed-by-ca1.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = "signed-by-ca1.cer"; path = "alamofire.org/signed-by-ca1.cer"; sourceTree = "<group>"; };
-		4C812C461B535F400017E0BF /* test.alamofire.org.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = test.alamofire.org.cer; path = alamofire.org/test.alamofire.org.cer; sourceTree = "<group>"; };
-		4C812C4F1B535F540017E0BF /* expired.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = expired.cer; path = alamofire.org/expired.cer; sourceTree = "<group>"; };
-		4C812C501B535F540017E0BF /* missing-dns-name-and-uri.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = "missing-dns-name-and-uri.cer"; path = "alamofire.org/missing-dns-name-and-uri.cer"; sourceTree = "<group>"; };
-		4C812C511B535F540017E0BF /* signed-by-ca2.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = "signed-by-ca2.cer"; path = "alamofire.org/signed-by-ca2.cer"; sourceTree = "<group>"; };
-		4C812C521B535F540017E0BF /* valid-dns-name.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = "valid-dns-name.cer"; path = "alamofire.org/valid-dns-name.cer"; sourceTree = "<group>"; };
-		4C812C531B535F540017E0BF /* valid-uri.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = "valid-uri.cer"; path = "alamofire.org/valid-uri.cer"; sourceTree = "<group>"; };
 		4C9DCE771CB1BCE2003E6463 /* SessionDelegateTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SessionDelegateTests.swift; sourceTree = "<group>"; };
 		4C9E88371F5FB3B0000BEC61 /* Alamofire 2.0 Migration Guide.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = "Alamofire 2.0 Migration Guide.md"; path = "Documentation/Alamofire 2.0 Migration Guide.md"; sourceTree = "<group>"; };
 		4C9E88381F5FB3B0000BEC61 /* Alamofire 3.0 Migration Guide.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = "Alamofire 3.0 Migration Guide.md"; path = "Documentation/Alamofire 3.0 Migration Guide.md"; sourceTree = "<group>"; };
@@ -540,10 +556,6 @@
 		4CB0080C2455FE9700C38783 /* AuthenticationInterceptorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationInterceptorTests.swift; sourceTree = "<group>"; };
 		4CB928281C66BFBC00CE5F08 /* Notifications.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Notifications.swift; sourceTree = "<group>"; };
 		4CBD217F220B48AE008F1C59 /* RetryPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RetryPolicyTests.swift; sourceTree = "<group>"; };
-		4CCB20681D4549E000C64D5B /* expired.badssl.com-leaf.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "expired.badssl.com-leaf.cer"; sourceTree = "<group>"; };
-		4CCB20691D4549E000C64D5B /* expired.badssl.com-root-ca.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "expired.badssl.com-root-ca.cer"; sourceTree = "<group>"; };
-		4CCB206A1D4549E000C64D5B /* expired.badssl.com-intermediate-ca-1.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "expired.badssl.com-intermediate-ca-1.cer"; sourceTree = "<group>"; };
-		4CCB206B1D4549E000C64D5B /* expired.badssl.com-intermediate-ca-2.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = "expired.badssl.com-intermediate-ca-2.cer"; sourceTree = "<group>"; };
 		4CCFA7991B2BE71600B6F460 /* URLProtocolTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLProtocolTests.swift; sourceTree = "<group>"; };
 		4CDE2C421AF89F0900BABAE5 /* Validation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Validation.swift; sourceTree = "<group>"; };
 		4CDE2C451AF89FF300BABAE5 /* ResponseSerialization.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResponseSerialization.swift; sourceTree = "<group>"; };
@@ -564,13 +576,6 @@
 		4CFB02F41D7D2FA20056F249 /* utf8_string.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = utf8_string.txt; sourceTree = "<group>"; };
 		4CFD6B132201338E00FFB5E3 /* CachedResponseHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CachedResponseHandlerTests.swift; sourceTree = "<group>"; };
 		4DD67C0B1A5C55C900ED2280 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		B39E2F831C1A72F8002DA1A9 /* certDER.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = certDER.cer; path = selfSignedAndMalformedCerts/certDER.cer; sourceTree = "<group>"; };
-		B39E2F841C1A72F8002DA1A9 /* certDER.crt */ = {isa = PBXFileReference; lastKnownFileType = file; name = certDER.crt; path = selfSignedAndMalformedCerts/certDER.crt; sourceTree = "<group>"; };
-		B39E2F851C1A72F8002DA1A9 /* certDER.der */ = {isa = PBXFileReference; lastKnownFileType = file; name = certDER.der; path = selfSignedAndMalformedCerts/certDER.der; sourceTree = "<group>"; };
-		B39E2F861C1A72F8002DA1A9 /* certPEM.cer */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = certPEM.cer; path = selfSignedAndMalformedCerts/certPEM.cer; sourceTree = "<group>"; };
-		B39E2F871C1A72F8002DA1A9 /* certPEM.crt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = certPEM.crt; path = selfSignedAndMalformedCerts/certPEM.crt; sourceTree = "<group>"; };
-		B39E2F891C1A72F8002DA1A9 /* randomGibberish.crt */ = {isa = PBXFileReference; lastKnownFileType = file; name = randomGibberish.crt; path = selfSignedAndMalformedCerts/randomGibberish.crt; sourceTree = "<group>"; };
-		B39E2F8A1C1A72F8002DA1A9 /* keyDER.der */ = {isa = PBXFileReference; lastKnownFileType = file; name = keyDER.der; path = selfSignedAndMalformedCerts/keyDER.der; sourceTree = "<group>"; };
 		E4202FE01B667AA100C997FB /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		F8111E3319A95C8B0040E7D1 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		F8111E3719A95C8B0040E7D1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@@ -653,6 +658,50 @@
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
+		31181E162794FF9600E88600 /* selfSignedAndMalformedCerts */ = {
+			isa = PBXGroup;
+			children = (
+				31181E172794FF9600E88600 /* certPEM.cer */,
+				31181E182794FF9600E88600 /* randomGibberish.crt */,
+				31181E192794FF9600E88600 /* certDER.der */,
+				31181E1A2794FF9600E88600 /* keyDER.der */,
+				31181E1B2794FF9600E88600 /* certDER.cer */,
+				31181E1C2794FF9600E88600 /* certPEM.crt */,
+				31181E1D2794FF9600E88600 /* certDER.crt */,
+			);
+			path = selfSignedAndMalformedCerts;
+			sourceTree = "<group>";
+		};
+		31181E1E2794FF9600E88600 /* alamofire-org */ = {
+			isa = PBXGroup;
+			children = (
+				31181E1F2794FF9600E88600 /* alamofire-signing-ca2.cer */,
+				31181E202794FF9600E88600 /* alamofire-signing-ca1.cer */,
+				31181E212794FF9600E88600 /* signed-by-ca2.cer */,
+				31181E222794FF9600E88600 /* signed-by-ca1.cer */,
+				31181E232794FF9600E88600 /* missing-dns-name-and-uri.cer */,
+				31181E242794FF9600E88600 /* wildcard.alamofire.org.cer */,
+				31181E252794FF9600E88600 /* test.alamofire.org.cer */,
+				31181E262794FF9600E88600 /* alamofire-root-ca.cer */,
+				31181E272794FF9600E88600 /* valid-uri.cer */,
+				31181E282794FF9600E88600 /* multiple-dns-names.cer */,
+				31181E292794FF9600E88600 /* expired.cer */,
+				31181E2A2794FF9600E88600 /* valid-dns-name.cer */,
+			);
+			path = "alamofire-org";
+			sourceTree = "<group>";
+		};
+		31181E2B2794FF9600E88600 /* expired-badssl-com */ = {
+			isa = PBXGroup;
+			children = (
+				31181E2C2794FF9600E88600 /* expired.badssl.com-intermediate-ca-1.cer */,
+				31181E2D2794FF9600E88600 /* expired.badssl.com-intermediate-ca-2.cer */,
+				31181E2E2794FF9600E88600 /* expired.badssl.com-root-ca.cer */,
+				31181E2F2794FF9600E88600 /* expired.badssl.com-leaf.cer */,
+			);
+			path = "expired-badssl-com";
+			sourceTree = "<group>";
+		};
 		319ECE9E25EC96E8001C38CA /* .github */ = {
 			isa = PBXGroup;
 			children = (
@@ -738,9 +787,9 @@
 		4C33A1171B5207DB00873DFF /* Certificates */ = {
 			isa = PBXGroup;
 			children = (
-				4C812C391B535F060017E0BF /* alamofire.org */,
-				4CCB20671D4549E000C64D5B /* expired.badssl.com */,
-				B39E2F821C1A72E5002DA1A9 /* Varying Encoding Types and Extensions */,
+				31181E1E2794FF9600E88600 /* alamofire-org */,
+				31181E2B2794FF9600E88600 /* expired-badssl-com */,
+				31181E162794FF9600E88600 /* selfSignedAndMalformedCerts */,
 			);
 			name = Certificates;
 			path = Resources/Certificates;
@@ -756,55 +805,6 @@
 			path = Resources/Images;
 			sourceTree = "<group>";
 		};
-		4C33A13D1B52080800873DFF /* Root */ = {
-			isa = PBXGroup;
-			children = (
-				4C812C3A1B535F220017E0BF /* alamofire-root-ca.cer */,
-			);
-			name = Root;
-			sourceTree = "<group>";
-		};
-		4C33A13E1B52081100873DFF /* Intermediate */ = {
-			isa = PBXGroup;
-			children = (
-				4C812C3D1B535F2E0017E0BF /* alamofire-signing-ca1.cer */,
-				4C812C3E1B535F2E0017E0BF /* alamofire-signing-ca2.cer */,
-			);
-			name = Intermediate;
-			sourceTree = "<group>";
-		};
-		4C33A13F1B52081A00873DFF /* Leaf */ = {
-			isa = PBXGroup;
-			children = (
-				4C33A1401B52084400873DFF /* Signed by CA1 */,
-				4C33A1411B52084E00873DFF /* Signed by CA2 */,
-			);
-			name = Leaf;
-			sourceTree = "<group>";
-		};
-		4C33A1401B52084400873DFF /* Signed by CA1 */ = {
-			isa = PBXGroup;
-			children = (
-				4C812C441B535F400017E0BF /* multiple-dns-names.cer */,
-				4C812C451B535F400017E0BF /* signed-by-ca1.cer */,
-				4C812C461B535F400017E0BF /* test.alamofire.org.cer */,
-				4C812C431B535F400017E0BF /* wildcard.alamofire.org.cer */,
-			);
-			name = "Signed by CA1";
-			sourceTree = "<group>";
-		};
-		4C33A1411B52084E00873DFF /* Signed by CA2 */ = {
-			isa = PBXGroup;
-			children = (
-				4C812C4F1B535F540017E0BF /* expired.cer */,
-				4C812C501B535F540017E0BF /* missing-dns-name-and-uri.cer */,
-				4C812C511B535F540017E0BF /* signed-by-ca2.cer */,
-				4C812C521B535F540017E0BF /* valid-dns-name.cer */,
-				4C812C531B535F540017E0BF /* valid-uri.cer */,
-			);
-			name = "Signed by CA2";
-			sourceTree = "<group>";
-		};
 		4C4366991D7BB92700C38AAD /* Extensions */ = {
 			isa = PBXGroup;
 			children = (
@@ -823,6 +823,7 @@
 			children = (
 				31ED52E61D73889D00199085 /* AFError+AlamofireTests.swift */,
 				4CFB028F1D7CF28F0056F249 /* FileManager+AlamofireTests.swift */,
+				31181E112794FE5400E88600 /* Bundle+AlamofireTests.swift */,
 			);
 			name = Extensions;
 			sourceTree = "<group>";
@@ -835,16 +836,6 @@
 			name = Helpers;
 			sourceTree = "<group>";
 		};
-		4C812C391B535F060017E0BF /* alamofire.org */ = {
-			isa = PBXGroup;
-			children = (
-				4C33A13D1B52080800873DFF /* Root */,
-				4C33A13E1B52081100873DFF /* Intermediate */,
-				4C33A13F1B52081A00873DFF /* Leaf */,
-			);
-			name = alamofire.org;
-			sourceTree = "<group>";
-		};
 		4C9E88361F5FB39F000BEC61 /* Migration Guides */ = {
 			isa = PBXGroup;
 			children = (
@@ -856,17 +847,6 @@
 			name = "Migration Guides";
 			sourceTree = "<group>";
 		};
-		4CCB20671D4549E000C64D5B /* expired.badssl.com */ = {
-			isa = PBXGroup;
-			children = (
-				4CCB206A1D4549E000C64D5B /* expired.badssl.com-intermediate-ca-1.cer */,
-				4CCB206B1D4549E000C64D5B /* expired.badssl.com-intermediate-ca-2.cer */,
-				4CCB20681D4549E000C64D5B /* expired.badssl.com-leaf.cer */,
-				4CCB20691D4549E000C64D5B /* expired.badssl.com-root-ca.cer */,
-			);
-			path = expired.badssl.com;
-			sourceTree = "<group>";
-		};
 		4CDE2C481AF8A14A00BABAE5 /* Core */ = {
 			isa = PBXGroup;
 			children = (
@@ -964,20 +944,6 @@
 			path = String;
 			sourceTree = "<group>";
 		};
-		B39E2F821C1A72E5002DA1A9 /* Varying Encoding Types and Extensions */ = {
-			isa = PBXGroup;
-			children = (
-				B39E2F831C1A72F8002DA1A9 /* certDER.cer */,
-				B39E2F841C1A72F8002DA1A9 /* certDER.crt */,
-				B39E2F851C1A72F8002DA1A9 /* certDER.der */,
-				B39E2F861C1A72F8002DA1A9 /* certPEM.cer */,
-				B39E2F871C1A72F8002DA1A9 /* certPEM.crt */,
-				B39E2F8A1C1A72F8002DA1A9 /* keyDER.der */,
-				B39E2F891C1A72F8002DA1A9 /* randomGibberish.crt */,
-			);
-			name = "Varying Encoding Types and Extensions";
-			sourceTree = "<group>";
-		};
 		F8111E2919A95C8B0040E7D1 = {
 			isa = PBXGroup;
 			children = (
@@ -1304,37 +1270,37 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				312930A9263E186E00473CEA /* certPEM.crt in Resources */,
-				31293095263E186000473CEA /* alamofire-signing-ca2.cer in Resources */,
-				31293099263E186400473CEA /* wildcard.alamofire.org.cer in Resources */,
-				3129309D263E186700473CEA /* valid-dns-name.cer in Resources */,
+				31181E4F2794FF9600E88600 /* alamofire-signing-ca2.cer in Resources */,
+				31181E632794FF9600E88600 /* wildcard.alamofire.org.cer in Resources */,
+				31181E772794FF9600E88600 /* expired.cer in Resources */,
+				31181E332794FF9600E88600 /* certPEM.cer in Resources */,
 				312930AA263E187200473CEA /* unicorn.png in Resources */,
-				312930A1263E186A00473CEA /* expired.badssl.com-intermediate-ca-2.cer in Resources */,
-				31293098263E186400473CEA /* multiple-dns-names.cer in Resources */,
-				31293097263E186400473CEA /* signed-by-ca1.cer in Resources */,
-				312930A7263E186E00473CEA /* certPEM.cer in Resources */,
+				31181E432794FF9600E88600 /* certDER.cer in Resources */,
 				312930AE263E187500473CEA /* invalid_data.json in Resources */,
-				312930A8263E186E00473CEA /* keyDER.der in Resources */,
-				3129309C263E186700473CEA /* signed-by-ca2.cer in Resources */,
-				312930A6263E186E00473CEA /* certDER.crt in Resources */,
-				312930A4263E186E00473CEA /* certDER.der in Resources */,
-				3129309A263E186700473CEA /* expired.cer in Resources */,
-				312930A5263E186E00473CEA /* randomGibberish.crt in Resources */,
 				312930AD263E187500473CEA /* valid_data.json in Resources */,
-				312930A3263E186E00473CEA /* certDER.cer in Resources */,
 				312930B1263E187800473CEA /* utf32_string.txt in Resources */,
-				3129309B263E186700473CEA /* missing-dns-name-and-uri.cer in Resources */,
+				31181E5F2794FF9600E88600 /* missing-dns-name-and-uri.cer in Resources */,
 				312930AF263E187800473CEA /* empty_string.txt in Resources */,
+				31181E6F2794FF9600E88600 /* valid-uri.cer in Resources */,
+				31181E7F2794FF9600E88600 /* expired.badssl.com-intermediate-ca-1.cer in Resources */,
+				31181E832794FF9600E88600 /* expired.badssl.com-intermediate-ca-2.cer in Resources */,
+				31181E4B2794FF9600E88600 /* certDER.crt in Resources */,
+				31181E372794FF9600E88600 /* randomGibberish.crt in Resources */,
+				31181E532794FF9600E88600 /* alamofire-signing-ca1.cer in Resources */,
+				31181E7B2794FF9600E88600 /* valid-dns-name.cer in Resources */,
+				31181E8B2794FF9600E88600 /* expired.badssl.com-leaf.cer in Resources */,
+				31181E3F2794FF9600E88600 /* keyDER.der in Resources */,
+				31181E5B2794FF9600E88600 /* signed-by-ca1.cer in Resources */,
 				312930AB263E187200473CEA /* rainbow.jpg in Resources */,
-				31293093263E185D00473CEA /* alamofire-root-ca.cer in Resources */,
-				31293096263E186400473CEA /* test.alamofire.org.cer in Resources */,
-				3129309E263E186700473CEA /* valid-uri.cer in Resources */,
-				3129309F263E186A00473CEA /* expired.badssl.com-root-ca.cer in Resources */,
-				312930A2263E186A00473CEA /* expired.badssl.com-leaf.cer in Resources */,
+				31181E672794FF9600E88600 /* test.alamofire.org.cer in Resources */,
 				312930B0263E187800473CEA /* utf8_string.txt in Resources */,
-				312930A0263E186A00473CEA /* expired.badssl.com-intermediate-ca-1.cer in Resources */,
-				31293094263E186000473CEA /* alamofire-signing-ca1.cer in Resources */,
+				31181E6B2794FF9600E88600 /* alamofire-root-ca.cer in Resources */,
+				31181E572794FF9600E88600 /* signed-by-ca2.cer in Resources */,
+				31181E872794FF9600E88600 /* expired.badssl.com-root-ca.cer in Resources */,
 				312930AC263E187500473CEA /* empty_data.json in Resources */,
+				31181E732794FF9600E88600 /* multiple-dns-names.cer in Resources */,
+				31181E472794FF9600E88600 /* certPEM.crt in Resources */,
+				31181E3B2794FF9600E88600 /* certDER.der in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1349,37 +1315,37 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				4C743D031C22772D00BCB23E /* wildcard.alamofire.org.cer in Resources */,
-				4CCB20771D4549E000C64D5B /* expired.badssl.com-intermediate-ca-2.cer in Resources */,
-				4C743CFF1C22772D00BCB23E /* alamofire-signing-ca2.cer in Resources */,
+				31181E4E2794FF9600E88600 /* alamofire-signing-ca2.cer in Resources */,
+				31181E622794FF9600E88600 /* wildcard.alamofire.org.cer in Resources */,
+				31181E762794FF9600E88600 /* expired.cer in Resources */,
+				31181E322794FF9600E88600 /* certPEM.cer in Resources */,
 				4CFB03091D7D2FA20056F249 /* empty_string.txt in Resources */,
-				4C743D061C22772D00BCB23E /* signed-by-ca2.cer in Resources */,
+				31181E422794FF9600E88600 /* certDER.cer in Resources */,
 				4CF627341BA7CC300011A099 /* rainbow.jpg in Resources */,
-				4CCB20741D4549E000C64D5B /* expired.badssl.com-intermediate-ca-1.cer in Resources */,
-				4C743D081C22772D00BCB23E /* valid-uri.cer in Resources */,
-				4C743CFC1C22772D00BCB23E /* keyDER.der in Resources */,
 				4CFB02FD1D7D2FA20056F249 /* valid_data.json in Resources */,
-				4CCB206E1D4549E000C64D5B /* expired.badssl.com-leaf.cer in Resources */,
 				4CFB030C1D7D2FA20056F249 /* utf32_string.txt in Resources */,
+				31181E5E2794FF9600E88600 /* missing-dns-name-and-uri.cer in Resources */,
 				4CFB030F1D7D2FA20056F249 /* utf8_string.txt in Resources */,
-				4C743CF81C22772D00BCB23E /* certDER.der in Resources */,
-				4C743D051C22772D00BCB23E /* missing-dns-name-and-uri.cer in Resources */,
-				4C743CFB1C22772D00BCB23E /* randomGibberish.crt in Resources */,
-				4C743CFE1C22772D00BCB23E /* alamofire-signing-ca1.cer in Resources */,
-				4C743D001C22772D00BCB23E /* multiple-dns-names.cer in Resources */,
-				4C743D011C22772D00BCB23E /* signed-by-ca1.cer in Resources */,
-				4C743D021C22772D00BCB23E /* test.alamofire.org.cer in Resources */,
-				4C743CF61C22772D00BCB23E /* certDER.cer in Resources */,
-				4C743CFD1C22772D00BCB23E /* alamofire-root-ca.cer in Resources */,
-				4C743CF91C22772D00BCB23E /* certPEM.cer in Resources */,
+				31181E6E2794FF9600E88600 /* valid-uri.cer in Resources */,
+				31181E7E2794FF9600E88600 /* expired.badssl.com-intermediate-ca-1.cer in Resources */,
+				31181E822794FF9600E88600 /* expired.badssl.com-intermediate-ca-2.cer in Resources */,
+				31181E4A2794FF9600E88600 /* certDER.crt in Resources */,
+				31181E362794FF9600E88600 /* randomGibberish.crt in Resources */,
+				31181E522794FF9600E88600 /* alamofire-signing-ca1.cer in Resources */,
+				31181E7A2794FF9600E88600 /* valid-dns-name.cer in Resources */,
+				31181E8A2794FF9600E88600 /* expired.badssl.com-leaf.cer in Resources */,
+				31181E3E2794FF9600E88600 /* keyDER.der in Resources */,
+				31181E5A2794FF9600E88600 /* signed-by-ca1.cer in Resources */,
 				4CF627351BA7CC300011A099 /* unicorn.png in Resources */,
-				4C743CFA1C22772D00BCB23E /* certPEM.crt in Resources */,
-				4C743CF71C22772D00BCB23E /* certDER.crt in Resources */,
-				4CCB20711D4549E000C64D5B /* expired.badssl.com-root-ca.cer in Resources */,
-				4C743D071C22772D00BCB23E /* valid-dns-name.cer in Resources */,
-				4C743D041C22772D00BCB23E /* expired.cer in Resources */,
+				31181E662794FF9600E88600 /* test.alamofire.org.cer in Resources */,
 				4CFB02FA1D7D2FA20056F249 /* invalid_data.json in Resources */,
+				31181E6A2794FF9600E88600 /* alamofire-root-ca.cer in Resources */,
+				31181E562794FF9600E88600 /* signed-by-ca2.cer in Resources */,
+				31181E862794FF9600E88600 /* expired.badssl.com-root-ca.cer in Resources */,
 				4CFB02F71D7D2FA20056F249 /* empty_data.json in Resources */,
+				31181E722794FF9600E88600 /* multiple-dns-names.cer in Resources */,
+				31181E462794FF9600E88600 /* certPEM.crt in Resources */,
+				31181E3A2794FF9600E88600 /* certDER.der in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1408,37 +1374,37 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				4C743D2F1C22772F00BCB23E /* wildcard.alamofire.org.cer in Resources */,
-				4CCB20751D4549E000C64D5B /* expired.badssl.com-intermediate-ca-2.cer in Resources */,
-				4C743D2B1C22772F00BCB23E /* alamofire-signing-ca2.cer in Resources */,
+				31181E4C2794FF9600E88600 /* alamofire-signing-ca2.cer in Resources */,
+				31181E602794FF9600E88600 /* wildcard.alamofire.org.cer in Resources */,
+				31181E742794FF9600E88600 /* expired.cer in Resources */,
+				31181E302794FF9600E88600 /* certPEM.cer in Resources */,
 				4CFB03071D7D2FA20056F249 /* empty_string.txt in Resources */,
-				4C743D321C22772F00BCB23E /* signed-by-ca2.cer in Resources */,
+				31181E402794FF9600E88600 /* certDER.cer in Resources */,
 				4C33A13B1B5207DB00873DFF /* unicorn.png in Resources */,
-				4CCB20721D4549E000C64D5B /* expired.badssl.com-intermediate-ca-1.cer in Resources */,
-				4C743D341C22772F00BCB23E /* valid-uri.cer in Resources */,
-				4C743D281C22772F00BCB23E /* keyDER.der in Resources */,
 				4CFB02FB1D7D2FA20056F249 /* valid_data.json in Resources */,
-				4CCB206C1D4549E000C64D5B /* expired.badssl.com-leaf.cer in Resources */,
 				4CFB030A1D7D2FA20056F249 /* utf32_string.txt in Resources */,
+				31181E5C2794FF9600E88600 /* missing-dns-name-and-uri.cer in Resources */,
 				4CFB030D1D7D2FA20056F249 /* utf8_string.txt in Resources */,
-				4C743D241C22772F00BCB23E /* certDER.der in Resources */,
-				4C743D311C22772F00BCB23E /* missing-dns-name-and-uri.cer in Resources */,
-				4C743D271C22772F00BCB23E /* randomGibberish.crt in Resources */,
-				4C743D2A1C22772F00BCB23E /* alamofire-signing-ca1.cer in Resources */,
-				4C743D2C1C22772F00BCB23E /* multiple-dns-names.cer in Resources */,
-				4C743D2D1C22772F00BCB23E /* signed-by-ca1.cer in Resources */,
-				4C743D2E1C22772F00BCB23E /* test.alamofire.org.cer in Resources */,
-				4C743D221C22772F00BCB23E /* certDER.cer in Resources */,
-				4C743D291C22772F00BCB23E /* alamofire-root-ca.cer in Resources */,
-				4C743D251C22772F00BCB23E /* certPEM.cer in Resources */,
+				31181E6C2794FF9600E88600 /* valid-uri.cer in Resources */,
+				31181E7C2794FF9600E88600 /* expired.badssl.com-intermediate-ca-1.cer in Resources */,
+				31181E802794FF9600E88600 /* expired.badssl.com-intermediate-ca-2.cer in Resources */,
+				31181E482794FF9600E88600 /* certDER.crt in Resources */,
+				31181E342794FF9600E88600 /* randomGibberish.crt in Resources */,
+				31181E502794FF9600E88600 /* alamofire-signing-ca1.cer in Resources */,
+				31181E782794FF9600E88600 /* valid-dns-name.cer in Resources */,
+				31181E882794FF9600E88600 /* expired.badssl.com-leaf.cer in Resources */,
+				31181E3C2794FF9600E88600 /* keyDER.der in Resources */,
+				31181E582794FF9600E88600 /* signed-by-ca1.cer in Resources */,
 				4C33A1391B5207DB00873DFF /* rainbow.jpg in Resources */,
-				4C743D261C22772F00BCB23E /* certPEM.crt in Resources */,
-				4C743D231C22772F00BCB23E /* certDER.crt in Resources */,
-				4CCB206F1D4549E000C64D5B /* expired.badssl.com-root-ca.cer in Resources */,
-				4C743D331C22772F00BCB23E /* valid-dns-name.cer in Resources */,
-				4C743D301C22772F00BCB23E /* expired.cer in Resources */,
+				31181E642794FF9600E88600 /* test.alamofire.org.cer in Resources */,
 				4CFB02F81D7D2FA20056F249 /* invalid_data.json in Resources */,
+				31181E682794FF9600E88600 /* alamofire-root-ca.cer in Resources */,
+				31181E542794FF9600E88600 /* signed-by-ca2.cer in Resources */,
+				31181E842794FF9600E88600 /* expired.badssl.com-root-ca.cer in Resources */,
 				4CFB02F51D7D2FA20056F249 /* empty_data.json in Resources */,
+				31181E702794FF9600E88600 /* multiple-dns-names.cer in Resources */,
+				31181E442794FF9600E88600 /* certPEM.crt in Resources */,
+				31181E382794FF9600E88600 /* certDER.der in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1446,37 +1412,37 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				4C743D191C22772E00BCB23E /* wildcard.alamofire.org.cer in Resources */,
-				4CCB20761D4549E000C64D5B /* expired.badssl.com-intermediate-ca-2.cer in Resources */,
-				4C743D151C22772E00BCB23E /* alamofire-signing-ca2.cer in Resources */,
+				31181E4D2794FF9600E88600 /* alamofire-signing-ca2.cer in Resources */,
+				31181E612794FF9600E88600 /* wildcard.alamofire.org.cer in Resources */,
+				31181E752794FF9600E88600 /* expired.cer in Resources */,
+				31181E312794FF9600E88600 /* certPEM.cer in Resources */,
 				4CFB03081D7D2FA20056F249 /* empty_string.txt in Resources */,
-				4C743D1C1C22772E00BCB23E /* signed-by-ca2.cer in Resources */,
+				31181E412794FF9600E88600 /* certDER.cer in Resources */,
 				4C33A13C1B5207DB00873DFF /* unicorn.png in Resources */,
-				4CCB20731D4549E000C64D5B /* expired.badssl.com-intermediate-ca-1.cer in Resources */,
-				4C743D1E1C22772E00BCB23E /* valid-uri.cer in Resources */,
-				4C743D121C22772E00BCB23E /* keyDER.der in Resources */,
 				4CFB02FC1D7D2FA20056F249 /* valid_data.json in Resources */,
-				4CCB206D1D4549E000C64D5B /* expired.badssl.com-leaf.cer in Resources */,
 				4CFB030B1D7D2FA20056F249 /* utf32_string.txt in Resources */,
+				31181E5D2794FF9600E88600 /* missing-dns-name-and-uri.cer in Resources */,
 				4CFB030E1D7D2FA20056F249 /* utf8_string.txt in Resources */,
-				4C743D0E1C22772E00BCB23E /* certDER.der in Resources */,
-				4C743D1B1C22772E00BCB23E /* missing-dns-name-and-uri.cer in Resources */,
-				4C743D111C22772E00BCB23E /* randomGibberish.crt in Resources */,
-				4C743D141C22772E00BCB23E /* alamofire-signing-ca1.cer in Resources */,
-				4C743D161C22772E00BCB23E /* multiple-dns-names.cer in Resources */,
-				4C743D171C22772E00BCB23E /* signed-by-ca1.cer in Resources */,
-				4C743D181C22772E00BCB23E /* test.alamofire.org.cer in Resources */,
-				4C743D0C1C22772E00BCB23E /* certDER.cer in Resources */,
-				4C743D131C22772E00BCB23E /* alamofire-root-ca.cer in Resources */,
-				4C743D0F1C22772E00BCB23E /* certPEM.cer in Resources */,
+				31181E6D2794FF9600E88600 /* valid-uri.cer in Resources */,
+				31181E7D2794FF9600E88600 /* expired.badssl.com-intermediate-ca-1.cer in Resources */,
+				31181E812794FF9600E88600 /* expired.badssl.com-intermediate-ca-2.cer in Resources */,
+				31181E492794FF9600E88600 /* certDER.crt in Resources */,
+				31181E352794FF9600E88600 /* randomGibberish.crt in Resources */,
+				31181E512794FF9600E88600 /* alamofire-signing-ca1.cer in Resources */,
+				31181E792794FF9600E88600 /* valid-dns-name.cer in Resources */,
+				31181E892794FF9600E88600 /* expired.badssl.com-leaf.cer in Resources */,
+				31181E3D2794FF9600E88600 /* keyDER.der in Resources */,
+				31181E592794FF9600E88600 /* signed-by-ca1.cer in Resources */,
 				4C33A13A1B5207DB00873DFF /* rainbow.jpg in Resources */,
-				4C743D101C22772E00BCB23E /* certPEM.crt in Resources */,
-				4C743D0D1C22772E00BCB23E /* certDER.crt in Resources */,
-				4CCB20701D4549E000C64D5B /* expired.badssl.com-root-ca.cer in Resources */,
-				4C743D1D1C22772E00BCB23E /* valid-dns-name.cer in Resources */,
-				4C743D1A1C22772E00BCB23E /* expired.cer in Resources */,
+				31181E652794FF9600E88600 /* test.alamofire.org.cer in Resources */,
 				4CFB02F91D7D2FA20056F249 /* invalid_data.json in Resources */,
+				31181E692794FF9600E88600 /* alamofire-root-ca.cer in Resources */,
+				31181E552794FF9600E88600 /* signed-by-ca2.cer in Resources */,
+				31181E852794FF9600E88600 /* expired.badssl.com-root-ca.cer in Resources */,
 				4CFB02F61D7D2FA20056F249 /* empty_data.json in Resources */,
+				31181E712794FF9600E88600 /* multiple-dns-names.cer in Resources */,
+				31181E452794FF9600E88600 /* certPEM.crt in Resources */,
+				31181E392794FF9600E88600 /* certDER.der in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1517,6 +1483,7 @@
 				31293079263E183C00473CEA /* InternalRequestTests.swift in Sources */,
 				3129308F263E184500473CEA /* MultipartFormDataTests.swift in Sources */,
 				31293078263E183C00473CEA /* SessionTests.swift in Sources */,
+				31181E152794FE5400E88600 /* Bundle+AlamofireTests.swift in Sources */,
 				31293088263E184500473CEA /* RequestInterceptorTests.swift in Sources */,
 				31293082263E184500473CEA /* ProtectedTests.swift in Sources */,
 				31293070263E183500473CEA /* BaseTestCase.swift in Sources */,
@@ -1599,6 +1566,7 @@
 				317A6A7820B2208000A9FEC5 /* DownloadTests.swift in Sources */,
 				31F9683E20BB70290009606F /* NSLoggingEventMonitor.swift in Sources */,
 				3113D46D21878227001CCD21 /* HTTPHeadersTests.swift in Sources */,
+				31181E142794FE5400E88600 /* Bundle+AlamofireTests.swift in Sources */,
 				31501E8A2196962A005829F2 /* ParameterEncoderTests.swift in Sources */,
 				3107EA4120A1267D00445260 /* SessionDelegateTests.swift in Sources */,
 				31C2B0EC20B271060089BA7C /* CacheTests.swift in Sources */,
@@ -1771,6 +1739,7 @@
 				317A6A7620B2207F00A9FEC5 /* DownloadTests.swift in Sources */,
 				31F9683C20BB70290009606F /* NSLoggingEventMonitor.swift in Sources */,
 				3113D46B21878227001CCD21 /* HTTPHeadersTests.swift in Sources */,
+				31181E122794FE5400E88600 /* Bundle+AlamofireTests.swift in Sources */,
 				31501E882196962A005829F2 /* ParameterEncoderTests.swift in Sources */,
 				3107EA3F20A1267C00445260 /* SessionDelegateTests.swift in Sources */,
 				31C2B0EA20B271040089BA7C /* CacheTests.swift in Sources */,
@@ -1814,6 +1783,7 @@
 				317A6A7720B2208000A9FEC5 /* DownloadTests.swift in Sources */,
 				31F9683D20BB70290009606F /* NSLoggingEventMonitor.swift in Sources */,
 				3113D46C21878227001CCD21 /* HTTPHeadersTests.swift in Sources */,
+				31181E132794FE5400E88600 /* Bundle+AlamofireTests.swift in Sources */,
 				31501E892196962A005829F2 /* ParameterEncoderTests.swift in Sources */,
 				3107EA4020A1267C00445260 /* SessionDelegateTests.swift in Sources */,
 				31C2B0EB20B271050089BA7C /* CacheTests.swift in Sources */,

+ 0 - 1
Alamofire.xcodeproj/xcshareddata/xcschemes/Alamofire tvOS.xcscheme

@@ -41,7 +41,6 @@
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
       shouldUseLaunchSchemeArgsEnv = "NO"
-      enableThreadSanitizer = "YES"
       codeCoverageEnabled = "YES"
       onlyGenerateCoverageForSpecifiedTargets = "YES">
       <MacroExpansion>

+ 2 - 1
Package.swift

@@ -43,5 +43,6 @@ let package = Package(name: "Alamofire",
                                 .testTarget(name: "AlamofireTests",
                                             dependencies: ["Alamofire"],
                                             path: "Tests",
-                                            exclude: ["Resources", "Info.plist"])],
+                                            exclude: ["Info.plist"],
+                                            resources: [.process("Resources")])],
                       swiftLanguageVersions: [.v5])

+ 1 - 2
Tests/BaseTestCase.swift

@@ -67,8 +67,7 @@ class BaseTestCase: XCTestCase {
     }
 
     func url(forResource fileName: String, withExtension ext: String) -> URL {
-        let bundle = Bundle(for: BaseTestCase.self)
-        return bundle.url(forResource: fileName, withExtension: ext)!
+        Bundle.test.url(forResource: fileName, withExtension: ext)!
     }
 
     func stored(_ session: Session) -> Session {

+ 38 - 0
Tests/Bundle+AlamofireTests.swift

@@ -0,0 +1,38 @@
+//
+//  Bundle+AlamofireTests.swift
+//
+//  Copyright (c) 2022 Alamofire Software Foundation (http://alamofire.org/)
+//
+//  Permission is hereby granted, free of charge, to any person obtaining a copy
+//  of this software and associated documentation files (the "Software"), to deal
+//  in the Software without restriction, including without limitation the rights
+//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+//  copies of the Software, and to permit persons to whom the Software is
+//  furnished to do so, subject to the following conditions:
+//
+//  The above copyright notice and this permission notice shall be included in
+//  all copies or substantial portions of the Software.
+//
+//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+//  THE SOFTWARE.
+//
+
+import Foundation
+
+extension Bundle {
+    static var test: Bundle {
+        let bundle: Bundle
+        #if SWIFT_PACKAGE
+        bundle = Bundle.module
+        #else
+        bundle = Bundle(for: BaseTestCase.self)
+        #endif
+        
+        return bundle
+    }
+}

+ 0 - 4
Tests/MultipartFormDataTests.swift

@@ -173,7 +173,6 @@ class MultipartFormDataEncodingTestCase: BaseTestCase {
         }
     }
 
-    #if !SWIFT_PACKAGE
     func testEncodingFileBodyPart() {
         // Given
         let multipartFormData = MultipartFormData()
@@ -419,7 +418,6 @@ class MultipartFormDataEncodingTestCase: BaseTestCase {
             XCTAssertEqual(encodedData, expectedData, "data should match expected data")
         }
     }
-    #endif
 }
 
 // MARK: -
@@ -510,7 +508,6 @@ final class MultipartFormDataWriteEncodedDataToDiskTestCase: BaseTestCase {
         }
     }
 
-    #if !SWIFT_PACKAGE
     func testWritingEncodedFileBodyPartToDisk() {
         // Given
         let fileURL = temporaryFileURL
@@ -771,7 +768,6 @@ final class MultipartFormDataWriteEncodedDataToDiskTestCase: BaseTestCase {
             XCTFail("file data should not be nil")
         }
     }
-    #endif
 }
 
 // MARK: -

+ 4 - 8
Tests/RequestTests.swift

@@ -126,19 +126,18 @@ final class RequestResponseTestCase: BaseTestCase {
         }
     }
 
-    #if !SWIFT_PACKAGE
     func testPOSTRequestWithBase64EncodedImages() {
         // Given
         let pngBase64EncodedString: String = {
-            let URL = url(forResource: "unicorn", withExtension: "png")
-            let data = try! Data(contentsOf: URL)
+            let fileURL = url(forResource: "unicorn", withExtension: "png")
+            let data = try! Data(contentsOf: fileURL)
 
             return data.base64EncodedString(options: .lineLength64Characters)
         }()
 
         let jpegBase64EncodedString: String = {
-            let URL = url(forResource: "rainbow", withExtension: "jpg")
-            let data = try! Data(contentsOf: URL)
+            let fileURL = url(forResource: "rainbow", withExtension: "jpg")
+            let data = try! Data(contentsOf: fileURL)
 
             return data.base64EncodedString(options: .lineLength64Characters)
         }()
@@ -174,7 +173,6 @@ final class RequestResponseTestCase: BaseTestCase {
             XCTFail("form parameter in JSON should not be nil")
         }
     }
-    #endif
 
     // MARK: Queues
 
@@ -1179,7 +1177,6 @@ final class RequestLifetimeTests: BaseTestCase {
 
 // MARK: -
 
-#if !SWIFT_PACKAGE
 final class RequestInvalidURLTestCase: BaseTestCase {
     func testThatDataRequestWithFileURLThrowsError() {
         // Given
@@ -1240,4 +1237,3 @@ final class RequestInvalidURLTestCase: BaseTestCase {
         XCTAssertNil(response?.response)
     }
 }
-#endif

+ 0 - 0
Tests/Resources/Certificates/alamofire.org/alamofire-root-ca.cer → Tests/Resources/Certificates/alamofire-org/alamofire-root-ca.cer


+ 0 - 0
Tests/Resources/Certificates/alamofire.org/alamofire-signing-ca1.cer → Tests/Resources/Certificates/alamofire-org/alamofire-signing-ca1.cer


+ 0 - 0
Tests/Resources/Certificates/alamofire.org/alamofire-signing-ca2.cer → Tests/Resources/Certificates/alamofire-org/alamofire-signing-ca2.cer


+ 0 - 0
Tests/Resources/Certificates/alamofire.org/expired.cer → Tests/Resources/Certificates/alamofire-org/expired.cer


+ 0 - 0
Tests/Resources/Certificates/alamofire.org/missing-dns-name-and-uri.cer → Tests/Resources/Certificates/alamofire-org/missing-dns-name-and-uri.cer


+ 0 - 0
Tests/Resources/Certificates/alamofire.org/multiple-dns-names.cer → Tests/Resources/Certificates/alamofire-org/multiple-dns-names.cer


+ 0 - 0
Tests/Resources/Certificates/alamofire.org/signed-by-ca1.cer → Tests/Resources/Certificates/alamofire-org/signed-by-ca1.cer


+ 0 - 0
Tests/Resources/Certificates/alamofire.org/signed-by-ca2.cer → Tests/Resources/Certificates/alamofire-org/signed-by-ca2.cer


+ 0 - 0
Tests/Resources/Certificates/alamofire.org/test.alamofire.org.cer → Tests/Resources/Certificates/alamofire-org/test.alamofire.org.cer


+ 0 - 0
Tests/Resources/Certificates/alamofire.org/valid-dns-name.cer → Tests/Resources/Certificates/alamofire-org/valid-dns-name.cer


+ 0 - 0
Tests/Resources/Certificates/alamofire.org/valid-uri.cer → Tests/Resources/Certificates/alamofire-org/valid-uri.cer


+ 0 - 0
Tests/Resources/Certificates/alamofire.org/wildcard.alamofire.org.cer → Tests/Resources/Certificates/alamofire-org/wildcard.alamofire.org.cer


+ 0 - 0
Tests/Resources/Certificates/expired.badssl.com/expired.badssl.com-intermediate-ca-1.cer → Tests/Resources/Certificates/expired-badssl-com/expired.badssl.com-intermediate-ca-1.cer


+ 0 - 0
Tests/Resources/Certificates/expired.badssl.com/expired.badssl.com-intermediate-ca-2.cer → Tests/Resources/Certificates/expired-badssl-com/expired.badssl.com-intermediate-ca-2.cer


+ 0 - 0
Tests/Resources/Certificates/expired.badssl.com/expired.badssl.com-leaf.cer → Tests/Resources/Certificates/expired-badssl-com/expired.badssl.com-leaf.cer


+ 0 - 0
Tests/Resources/Certificates/expired.badssl.com/expired.badssl.com-root-ca.cer → Tests/Resources/Certificates/expired-badssl-com/expired.badssl.com-root-ca.cer


+ 0 - 2
Tests/ResponseSerializationTests.swift

@@ -781,7 +781,6 @@ final class DecodableResponseSerializerTests: BaseTestCase {
 
 // MARK: -
 
-#if !SWIFT_PACKAGE
 final class DownloadResponseSerializationTestCase: BaseTestCase {
     // MARK: Properties
 
@@ -1182,7 +1181,6 @@ final class DownloadResponseSerializationTestCase: BaseTestCase {
         XCTAssertEqual(result.success as? NSNull, NSNull())
     }
 }
-#endif
 
 final class CustomResponseSerializerTests: BaseTestCase {
     func testThatCustomResponseSerializersCanBeWrittenWithoutCompilerIssues() {

+ 5 - 5
Tests/ServerTrustEvaluatorTests.swift

@@ -22,11 +22,12 @@
 //  THE SOFTWARE.
 //
 
+#if !(os(Linux) || os(Windows))
+
 import Alamofire
 import Foundation
 import XCTest
 
-#if !SWIFT_PACKAGE
 private enum TestCertificates {
     // Root Certificates
     static let rootCA = TestCertificates.certificate(filename: "alamofire-root-ca")
@@ -49,8 +50,7 @@ private enum TestCertificates {
     static let leafValidURI = TestCertificates.certificate(filename: "valid-uri")
 
     static func certificate(filename: String) -> SecCertificate {
-        class Locator {}
-        let filePath = Bundle(for: Locator.self).path(forResource: filename, ofType: "cer")!
+        let filePath = Bundle.test.path(forResource: filename, ofType: "cer")!
         let data = try! Data(contentsOf: URL(fileURLWithPath: filePath))
         let certificate = SecCertificateCreateWithData(nil, data as CFData)!
 
@@ -1386,7 +1386,7 @@ class ServerTrustPolicyCompositeTestCase: ServerTrustPolicyTestCase {
 
 // MARK: -
 
-class ServerTrustPolicyCertificatesInBundleTestCase: ServerTrustPolicyTestCase {
+final class ServerTrustPolicyCertificatesInBundleTestCase: ServerTrustPolicyTestCase {
     func testOnlyValidCertificatesAreDetected() {
         // Given
         // Files present in bundle in the form of type+encoding+extension [key|cert][DER|PEM].[cer|crt|der|key|pem]
@@ -1398,7 +1398,7 @@ class ServerTrustPolicyCertificatesInBundleTestCase: ServerTrustPolicyTestCase {
         // keyDER.der: DER-encoded key, not a certificate, should fail
 
         // When
-        let certificates = Bundle(for: ServerTrustPolicyCertificatesInBundleTestCase.self).af.certificates
+        let certificates = Bundle.test.af.certificates
 
         // Then
         // Expectation: 19 well-formed certificates in the test bundle plus 4 invalid certificates.

+ 3 - 3
Tests/TLSEvaluationTests.swift

@@ -22,11 +22,12 @@
 //  THE SOFTWARE.
 //
 
+#if !(os(Linux) || os(Windows))
+
 import Alamofire
 import Foundation
 import XCTest
 
-#if !SWIFT_PACKAGE
 private enum TestCertificates {
     static let rootCA = TestCertificates.certificate(filename: "expired.badssl.com-root-ca")
     static let intermediateCA1 = TestCertificates.certificate(filename: "expired.badssl.com-intermediate-ca-1")
@@ -34,8 +35,7 @@ private enum TestCertificates {
     static let leaf = TestCertificates.certificate(filename: "expired.badssl.com-leaf")
 
     static func certificate(filename: String) -> SecCertificate {
-        class Locator {}
-        let filePath = Bundle(for: Locator.self).path(forResource: filename, ofType: "cer")!
+        let filePath = Bundle.test.path(forResource: filename, ofType: "cer")!
         let data = try! Data(contentsOf: URL(fileURLWithPath: filePath))
         let certificate = SecCertificateCreateWithData(nil, data as CFData)!
 

+ 0 - 4
Tests/UploadTests.swift

@@ -26,7 +26,6 @@ import Alamofire
 import Foundation
 import XCTest
 
-#if !SWIFT_PACKAGE
 final class UploadFileInitializationTestCase: BaseTestCase {
     func testUploadClassMethodWithMethodURLAndFile() {
         // Given
@@ -73,7 +72,6 @@ final class UploadFileInitializationTestCase: BaseTestCase {
         XCTAssertNotNil(request.response, "response should not be nil")
     }
 }
-#endif
 
 // MARK: -
 
@@ -124,7 +122,6 @@ final class UploadDataInitializationTestCase: BaseTestCase {
 
 // MARK: -
 
-#if !SWIFT_PACKAGE
 final class UploadStreamInitializationTestCase: BaseTestCase {
     func testUploadClassMethodWithMethodURLAndStream() {
         // Given
@@ -173,7 +170,6 @@ final class UploadStreamInitializationTestCase: BaseTestCase {
         XCTAssertNotNil(request.response, "response should not be nil, tasks: \(request.tasks)")
     }
 }
-#endif
 
 // MARK: -