Kaynağa Gözat

Merge remote-tracking branch 'origin/main' into pb-merge-main-529

Paul Beusterien 1 yıl önce
ebeveyn
işleme
1198afd2ba
100 değiştirilmiş dosya ile 466 ekleme ve 370 silme
  1. 60 2
      .github/actions/notices_generation/Gemfile.lock
  2. 8 3
      .github/workflows/crashlytics.yml
  3. 2 2
      .github/workflows/dynamiclinks.yml
  4. 6 9
      .github/workflows/firestore.yml
  5. 21 8
      .github/workflows/sessions.yml
  6. 2 3
      .github/workflows/spm.yml
  7. 70 0
      .github/workflows/vertexai.yml
  8. 53 53
      .github/workflows/zip.yml
  9. 2 1
      Crashlytics/CHANGELOG.md
  10. 2 1
      Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.m
  11. 40 0
      Crashlytics/UnitTests/FIRCLSRolloutsPersistenceManagerTests.m
  12. 4 1
      Dangerfile
  13. 24 24
      Firebase.podspec
  14. 1 1
      FirebaseABTesting.podspec
  15. 4 4
      FirebaseAnalytics.podspec
  16. 2 2
      FirebaseAnalyticsOnDeviceConversion.podspec
  17. 2 2
      FirebaseAppCheck.podspec
  18. 3 0
      FirebaseAppCheck/CHANGELOG.md
  19. 1 1
      FirebaseAppCheckInterop.podspec
  20. 1 1
      FirebaseAppDistribution.podspec
  21. 9 19
      FirebaseAppDistribution/Sources/FIRAppDistributionUIService.m
  22. 1 1
      FirebaseAuth.podspec
  23. 1 1
      FirebaseAuthInterop.podspec
  24. 1 1
      FirebaseCore.podspec
  25. 2 1
      FirebaseCore/Sources/FIRApp.m
  26. 1 1
      FirebaseCore/Sources/FIROptions.m
  27. 1 1
      FirebaseCore/Tests/Unit/FIRAppTest.m
  28. 6 6
      FirebaseCore/Tests/Unit/FIROptionsTest.m
  29. 1 1
      FirebaseCoreExtension.podspec
  30. 1 1
      FirebaseCoreInternal.podspec
  31. 1 1
      FirebaseCrashlytics.podspec
  32. 1 1
      FirebaseDatabase.podspec
  33. 1 1
      FirebaseDatabase/CHANGELOG.md
  34. 1 2
      FirebaseDatabase/Sources/Core/FPersistentConnection.m
  35. 2 4
      FirebaseDatabase/Sources/Core/FRepo.m
  36. 1 2
      FirebaseDatabase/Sources/Persistence/FLevelDBStorageEngine.m
  37. 1 2
      FirebaseDatabase/Sources/Realtime/FWebSocketConnection.m
  38. 1 5
      FirebaseDatabase/Tests/Integration/FIRDatabaseTests.m
  39. 1 1
      FirebaseDynamicLinks.podspec
  40. 3 0
      FirebaseDynamicLinks/CHANGELOG.md
  41. 8 9
      FirebaseDynamicLinks/Sources/FIRDLDefaultRetrievalProcessV2.m
  42. 2 1
      FirebaseDynamicLinks/Sources/Public/FirebaseDynamicLinks/FIRDynamicLinks.h
  43. 2 2
      FirebaseFirestore.podspec
  44. 1 1
      FirebaseFirestoreInternal.podspec
  45. 1 1
      FirebaseFunctions.podspec
  46. 1 1
      FirebaseInAppMessaging.podspec
  47. 1 1
      FirebaseInAppMessaging/CHANGELOG.md
  48. 2 2
      FirebaseInAppMessaging/Sources/Analytics/FIRIAMAnalyticsEventLoggerImpl.m
  49. 2 2
      FirebaseInAppMessaging/Sources/Analytics/FIRIAMClearcutHttpRequestSender.m
  50. 7 17
      FirebaseInAppMessaging/Sources/Analytics/FIRIAMClearcutLogStorage.m
  51. 2 2
      FirebaseInAppMessaging/Sources/Analytics/FIRIAMClearcutLogger.m
  52. 2 4
      FirebaseInAppMessaging/Sources/Analytics/FIRIAMClearcutUploader.m
  53. 2 2
      FirebaseInAppMessaging/Sources/Data/FIRIAMFetchResponseParser.m
  54. 2 2
      FirebaseInAppMessaging/Sources/Data/FIRIAMMessageContentDataWithImageURL.m
  55. 2 2
      FirebaseInAppMessaging/Sources/Data/FIRIAMMessageDefinition.m
  56. 2 2
      FirebaseInAppMessaging/Sources/Data/FIRIAMRenderingEffectSetting.m
  57. 0 4
      FirebaseInAppMessaging/Sources/DefaultUI/Banner/FIRIAMBannerViewController.m
  58. 0 2
      FirebaseInAppMessaging/Sources/DefaultUI/FIRIAMBaseRenderingViewController.m
  59. 0 10
      FirebaseInAppMessaging/Sources/DefaultUI/FIRIAMRenderingWindowHelper.m
  60. 1 5
      FirebaseInAppMessaging/Sources/DefaultUI/ImageOnly/FIRIAMImageOnlyViewController.m
  61. 1 5
      FirebaseInAppMessaging/Sources/DefaultUI/Modal/FIRIAMModalViewController.m
  62. 2 2
      FirebaseInAppMessaging/Sources/DisplayTrigger/FIRIAMDisplayTriggerDefinition.m
  63. 2 2
      FirebaseInAppMessaging/Sources/FIRCore+InAppMessaging.m
  64. 2 2
      FirebaseInAppMessaging/Sources/FIRInAppMessaging.m
  65. 7 17
      FirebaseInAppMessaging/Sources/Flows/FIRIAMActivityLogger.m
  66. 2 2
      FirebaseInAppMessaging/Sources/Flows/FIRIAMBookKeeper.m
  67. 2 2
      FirebaseInAppMessaging/Sources/Flows/FIRIAMClientInfoFetcher.m
  68. 2 2
      FirebaseInAppMessaging/Sources/Flows/FIRIAMDisplayCheckOnAnalyticEventsFlow.m
  69. 2 4
      FirebaseInAppMessaging/Sources/Flows/FIRIAMDisplayCheckOnAppForegroundFlow.m
  70. 2 2
      FirebaseInAppMessaging/Sources/Flows/FIRIAMDisplayCheckOnFetchDoneNotificationFlow.m
  71. 2 2
      FirebaseInAppMessaging/Sources/Flows/FIRIAMDisplayCheckTriggerFlow.m
  72. 6 6
      FirebaseInAppMessaging/Sources/Flows/FIRIAMDisplayExecutor.m
  73. 2 2
      FirebaseInAppMessaging/Sources/Flows/FIRIAMFetchFlow.m
  74. 2 4
      FirebaseInAppMessaging/Sources/Flows/FIRIAMFetchOnAppForegroundFlow.m
  75. 2 2
      FirebaseInAppMessaging/Sources/Flows/FIRIAMMessageClientCache.m
  76. 2 2
      FirebaseInAppMessaging/Sources/Flows/FIRIAMMsgFetcherUsingRestful.m
  77. 2 2
      FirebaseInAppMessaging/Sources/Flows/FIRIAMServerMsgFetchStorage.m
  78. 2 2
      FirebaseInAppMessaging/Sources/RenderingObjects/FIRInAppMessagingRenderingDataClasses.m
  79. 2 2
      FirebaseInAppMessaging/Sources/Runtime/FIRIAMActionURLFollower.m
  80. 2 2
      FirebaseInAppMessaging/Sources/Runtime/FIRIAMRuntimeManager.m
  81. 2 2
      FirebaseInAppMessaging/Sources/Runtime/FIRIAMSDKModeManager.m
  82. 2 2
      FirebaseInAppMessaging/Sources/Runtime/FIRIAMSDKSettings.m
  83. 2 2
      FirebaseInAppMessaging/Sources/Runtime/FIRInAppMessaging+Bootstrap.m
  84. 2 2
      FirebaseInAppMessaging/Sources/Util/FIRIAMElapsedTimeTracker.m
  85. 2 2
      FirebaseInAppMessaging/Sources/Util/FIRIAMTimeFetcher.m
  86. 2 2
      FirebaseInAppMessaging/Sources/Util/NSString+FIRInterlaceStrings.m
  87. 2 2
      FirebaseInAppMessaging/Sources/Util/UIApplication+FIRForegroundWindowScene.m
  88. 2 2
      FirebaseInAppMessaging/Sources/Util/UIColor+FIRIAMHexString.m
  89. 1 1
      FirebaseInstallations.podspec
  90. 1 1
      FirebaseMLModelDownloader.podspec
  91. 3 5
      FirebaseMLModelDownloader/Sources/FileDownloader.swift
  92. 4 12
      FirebaseMLModelDownloader/Sources/ModelInfoRetriever.swift
  93. 1 1
      FirebaseMessaging.podspec
  94. 1 1
      FirebaseMessaging/CHANGELOG.md
  95. 0 5
      FirebaseMessaging/Sources/FIRMessaging.m
  96. 1 4
      FirebaseMessaging/Sources/FIRMessagingContextManagerService.m
  97. 1 2
      FirebaseMessaging/Sources/FIRMessagingUtilities.m
  98. 1 1
      FirebaseMessaging/Sources/Token/FIRMessagingAuthKeychain.m
  99. 2 5
      FirebaseMessaging/Tests/UnitTests/FIRMessagingContextManagerServiceTest.m
  100. 1 8
      FirebaseMessaging/Tests/UnitTests/FIRMessagingRemoteNotificationsProxyTest.m

+ 60 - 2
.github/actions/notices_generation/Gemfile.lock

@@ -10,28 +10,85 @@ GEM
       tzinfo (~> 2.0)
     addressable (2.8.0)
       public_suffix (>= 2.0.2, < 5.0)
+    algoliasearch (1.27.5)
+      httpclient (~> 2.8, >= 2.8.3)
+      json (>= 1.5.1)
     atomos (0.1.3)
     claide (1.1.0)
+    cocoapods (1.12.1)
+      addressable (~> 2.8)
+      claide (>= 1.0.2, < 2.0)
+      cocoapods-core (= 1.12.1)
+      cocoapods-deintegrate (>= 1.0.3, < 2.0)
+      cocoapods-downloader (>= 1.6.0, < 2.0)
+      cocoapods-plugins (>= 1.0.0, < 2.0)
+      cocoapods-search (>= 1.0.0, < 2.0)
+      cocoapods-trunk (>= 1.6.0, < 2.0)
+      cocoapods-try (>= 1.1.0, < 2.0)
+      colored2 (~> 3.1)
+      escape (~> 0.0.4)
+      fourflusher (>= 2.3.0, < 3.0)
+      gh_inspector (~> 1.0)
+      molinillo (~> 0.8.0)
+      nap (~> 1.0)
+      ruby-macho (>= 2.3.0, < 3.0)
+      xcodeproj (>= 1.21.0, < 2.0)
+    cocoapods-core (1.12.1)
+      activesupport (>= 5.0, < 8)
+      addressable (~> 2.8)
+      algoliasearch (~> 1.0)
+      concurrent-ruby (~> 1.1)
+      fuzzy_match (~> 2.0.4)
+      nap (~> 1.0)
+      netrc (~> 0.11)
+      public_suffix (~> 4.0)
+      typhoeus (~> 1.0)
+    cocoapods-deintegrate (1.0.5)
+    cocoapods-downloader (1.6.3)
+    cocoapods-plugins (1.0.0)
+      nap
+    cocoapods-search (1.0.1)
+    cocoapods-trunk (1.6.0)
+      nap (>= 0.8, < 2.0)
+      netrc (~> 0.11)
+    cocoapods-try (1.2.0)
     colored2 (3.1.2)
     concurrent-ruby (1.2.2)
+    escape (0.0.4)
+    ethon (0.16.0)
+      ffi (>= 1.15.0)
     faraday (1.1.0)
       multipart-post (>= 1.2, < 3)
       ruby2_keywords
+    ffi (1.16.3)
+    fourflusher (2.3.1)
+    fuzzy_match (2.0.4)
+    gh_inspector (1.1.3)
+    httpclient (2.8.3)
     i18n (1.14.1)
       concurrent-ruby (~> 1.0)
+    json (2.7.2)
     minitest (5.20.0)
+    molinillo (0.8.0)
     multipart-post (2.1.1)
     nanaimo (0.3.0)
+    nap (1.1.0)
+    netrc (0.11.0)
     octokit (4.19.0)
       faraday (>= 0.9)
       sawyer (~> 0.8.0, >= 0.5.3)
     plist (3.6.0)
     public_suffix (4.0.6)
-    rexml (3.2.5)
+    rexml (3.2.8)
+      strscan (>= 3.0.9)
+    ruby-macho (2.5.1)
     ruby2_keywords (0.0.2)
     sawyer (0.8.2)
       addressable (>= 2.3.5)
       faraday (> 0.8, < 2.0)
+    strscan (3.1.0)
+    typhoeus (1.4.1)
+      ethon (>= 0.9.0)
     tzinfo (2.0.6)
       concurrent-ruby (~> 1.0)
     xcodeproj (1.21.0)
@@ -43,10 +100,11 @@ GEM
       rexml (~> 3.2.4)
 
 PLATFORMS
-  ruby
+  x86_64-linux
 
 DEPENDENCIES
   activesupport (= 7.0.8)
+  cocoapods
   octokit (~> 4.19)
   plist
   xcodeproj (~> 1.21)

+ 8 - 3
.github/workflows/crashlytics.yml

@@ -102,7 +102,7 @@ jobs:
     - uses: nick-fields/retry@v3
       with:
         timeout_minutes: 120
-        max_attempts: 3
+        max_attempts: 5
         retry_on: error
         retry_wait_seconds: 120
         command: scripts/test_catalyst.sh FirebaseCrashlytics test FirebaseCrashlytics-Unit-unit
@@ -198,5 +198,10 @@ jobs:
     - uses: ruby/setup-ruby@v1
     - name: Setup Bundler
       run: scripts/setup_bundler.sh
-    - name: PodLibLint Auth Cron
-      run: scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseCrashlytics.podspec --platforms=${{ matrix.target }} ${{ matrix.flags }}
+    - uses: nick-fields/retry@v3
+      with:
+        timeout_minutes: 120
+        max_attempts: 3
+        retry_on: error
+        retry_wait_seconds: 120
+        command: scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseCrashlytics.podspec --platforms=${{ matrix.target }} ${{ matrix.flags }}

+ 2 - 2
.github/workflows/dynamiclinks.yml

@@ -37,7 +37,7 @@ jobs:
     - name: Xcode
       run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
     - name: FirebaseDynamicLinks
-      run: scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseDynamicLinks.podspec
+      run: scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseDynamicLinks.podspec --allow-warnings
 
   spm:
     # Don't run on private repo unless it is a PR.
@@ -80,7 +80,7 @@ jobs:
     - name: Setup Bundler
       run: scripts/setup_bundler.sh
     - name: PodLibLint Storage Cron
-      run: scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseDynamicLinks.podspec --platforms=ios ${{ matrix.flags }}
+      run: scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseDynamicLinks.podspec --platforms=ios ${{ matrix.flags }}  --allow-warnings
 
   quickstart:
     # Don't run on private repo unless it is a PR.

+ 6 - 9
.github/workflows/firestore.yml

@@ -105,8 +105,7 @@ jobs:
       (github.event_name == 'pull_request' && needs.changes.outputs.changed == 'true')
     strategy:
       matrix:
-        # TODO(#12769): Update to macos-14 which doesn't include Python 3.7
-        os: [macos-12, ubuntu-latest]
+        os: [macos-14, ubuntu-latest]
 
     env:
       MINT_PATH: ${{ github.workspace }}/mint
@@ -132,7 +131,7 @@ jobs:
 
     - uses: actions/setup-python@v4
       with:
-        python-version: '3.7'
+        python-version: '3.10'
 
     - name: Setup build
       run:  scripts/install_prereqs.sh Firestore ${{ runner.os }} cmake
@@ -153,8 +152,7 @@ jobs:
 
     strategy:
       matrix:
-        # TODO(#12769): Update to macos-14 which doesn't include Python 3.7
-        os: [macos-12]
+        os: [macos-14]
         databaseId: [(default), test-db]
 
     env:
@@ -183,7 +181,7 @@ jobs:
 
     - uses: actions/setup-python@v4
       with:
-        python-version: '3.7'
+        python-version: '3.10'
 
     - name: Install Secret GoogleService-Info.plist
       run: scripts/decrypt_gha_secret.sh scripts/gha-encrypted/firestore.plist.gpg \
@@ -241,8 +239,7 @@ jobs:
 
     strategy:
       matrix:
-        # TODO(#12769): Update to macos-14 which doesn't include Python 3.7
-        os: [macos-12]
+        os: [macos-14]
         sanitizer: [asan, tsan]
 
     runs-on: ${{ matrix.os }}
@@ -263,7 +260,7 @@ jobs:
 
     - uses: actions/setup-python@v4
       with:
-        python-version: '3.7'
+        python-version: '3.10'
 
     - name: Setup build
       run:  scripts/install_prereqs.sh Firestore ${{ runner.os }} cmake

+ 21 - 8
.github/workflows/sessions.yml

@@ -41,10 +41,13 @@ jobs:
       run: scripts/setup_bundler.sh
     - name: Xcode
       run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
-    - name: Build and test
-      run: |
-        scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseSessions.podspec \
-            --platforms=${{ matrix.target }} ${{ matrix.tests }}
+    - uses: nick-fields/retry@v3
+      with:
+        timeout_minutes: 120
+        max_attempts: 3
+        retry_on: error
+        retry_wait_seconds: 120
+        command: scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseSessions.podspec --platforms=${{ matrix.target }} ${{ matrix.tests }}
 
   spm:
     # Don't run on private repo unless it is a PR.
@@ -71,8 +74,13 @@ jobs:
       run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
     - name: Initialize xcodebuild
       run: scripts/setup_spm_tests.sh
-    - name: Unit Tests
-      run: scripts/third_party/travis/retry.sh ./scripts/build.sh FirebaseSessionsUnit ${{ matrix.target }} spm
+    - uses: nick-fields/retry@v3
+      with:
+        timeout_minutes: 120
+        max_attempts: 3
+        retry_on: error
+        retry_wait_seconds: 120
+        command: scripts/third_party/travis/retry.sh ./scripts/build.sh FirebaseSessionsUnit ${{ matrix.target }} spm
 
   catalyst:
     # Don't run on private repo unless it is a PR.
@@ -87,5 +95,10 @@ jobs:
     - uses: ruby/setup-ruby@v1
     - name: Setup Bundler
       run: scripts/setup_bundler.sh
-    - name: Setup project and Build for Catalyst
-      run: scripts/test_catalyst.sh FirebaseSessions test FirebaseSessions-Unit-unit
+    - uses: nick-fields/retry@v3
+      with:
+        timeout_minutes: 120
+        max_attempts: 3
+        retry_on: error
+        retry_wait_seconds: 120
+        command: scripts/test_catalyst.sh FirebaseSessions test FirebaseSessions-Unit-unit

+ 2 - 3
.github/workflows/spm.yml

@@ -88,6 +88,8 @@ jobs:
     strategy:
       matrix:
         # Full set of Firebase-Package tests only run on iOS. Run subset on other platforms.
+        # visionOS isn't buildable from here (even with Firestore source) because the test
+        # targets need Analytics.
         target: [tvOS, macOS, catalyst]
         os: [macos-13, macos-14]
         include:
@@ -95,9 +97,6 @@ jobs:
             xcode: Xcode_15.2
           - os: macos-14
             xcode: Xcode_15.3
-          - os: macos-14
-            target: visionOS
-            xcode: Xcode_15.3
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

+ 70 - 0
.github/workflows/vertexai.yml

@@ -0,0 +1,70 @@
+name: vertexai
+
+on:
+  pull_request:
+    paths:
+    - 'FirebaseVertexAI**'
+    - '.github/workflows/vertexai.yml'
+    - 'Gemfile*'
+  schedule:
+    # Run every day at 11pm (PST) - cron uses UTC times
+    - cron:  '0 7 * * *'
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
+  cancel-in-progress: true
+
+jobs:
+  spm:
+    strategy:
+      matrix:
+        target: [iOS, macOS, catalyst]
+        os: [macos-13]
+        include:
+          - os: macos-13
+            xcode: Xcode_15.2
+    runs-on: ${{ matrix.os }}
+    env:
+      FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1
+    steps:
+    - uses: actions/checkout@v4
+    - name: Xcode
+      run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
+    - name: Initialize xcodebuild
+      run: scripts/setup_spm_tests.sh
+    - uses: nick-fields/retry@v3
+      with:
+        timeout_minutes: 120
+        max_attempts: 3
+        retry_on: error
+        retry_wait_seconds: 120
+        command: scripts/build.sh FirebaseVertexAIUnit ${{ matrix.target }} spm
+
+  sample:
+    strategy:
+      matrix:
+        # Test build with debug and release configs (whether or not DEBUG is set and optimization level)
+        build: [build]
+        include:
+          - os: macos-13
+            xcode: Xcode_15.0.1
+          - os: macos-14
+            xcode: Xcode_15.2
+    runs-on: ${{ matrix.os }}
+    env:
+      FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1
+    steps:
+    - uses: actions/checkout@v4
+    - name: Xcode
+      run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
+    - name: Initialize xcodebuild
+      run: xcodebuild -list
+    - name: Placeholder GoogleService-Info.plist for build testing
+      run: cp FirebaseCore/Tests/Unit/Resources/GoogleService-Info.plist FirebaseVertexAI/Sample/
+    - uses: nick-fields/retry@v3
+      with:
+        timeout_minutes: 120
+        max_attempts: 3
+        retry_on: error
+        retry_wait_seconds: 120
+        command: scripts/build.sh VertexSample iOS

+ 53 - 53
.github/workflows/zip.yml

@@ -354,9 +354,6 @@ jobs:
         os: [macos-13]
         xcode: [Xcode_15.2]
         artifact: [Firebase-actions-dir, Firebase-actions-dir-dynamic]
-          # TODO: Building FirebaseUI fails on Xcode 15 because it needs to sign the resources.
-          # - os: macos-13
-          #   xcode: Xcode_15.2
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -456,56 +453,59 @@ jobs:
         name: quickstart_artifacts_dynamiclinks
         path: quickstart-ios/
 
-  # quickstart_framework_firestore:
-  #   # Don't run on private repo.
-  #   if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
-  #   needs: package-head
-  #   env:
-  #     plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
-  #     signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
-  #     SDK: "Firestore"
-  #   strategy:
-  #     matrix:
-  #       # TODO: Building FirebaseUI fails on Xcode 15 because it needs to sign the resources.
-  #       os: [macos-13]
-  #       artifact: [Firebase-actions-dir, Firebase-actions-dir-dynamic]
-  #       xcode: [Xcode_15.2]
-  #   runs-on: ${{ matrix.os }}
-  #   steps:
-  #   - uses: actions/checkout@v4
-  #   - name: Get framework dir
-  #     uses: actions/download-artifact@v4
-  #     with:
-  #       name: ${{ matrix.artifact }}
-  #   - uses: ruby/setup-ruby@v1
-  #   - name: Setup Bundler
-  #     run: ./scripts/setup_bundler.sh
-  #   - name: Move frameworks
-  #     run: |
-  #       mkdir -p "${HOME}"/ios_frameworks/
-  #       find "${GITHUB_WORKSPACE}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
-  #   - uses: actions/checkout@v4
-  #   - name: Setup quickstart
-  #     run: SAMPLE="$SDK" TARGET="${SDK}Example" NON_FIREBASE_SDKS="SDWebImage FirebaseAuthUI FirebaseEmailAuthUI" scripts/setup_quickstart_framework.sh \
-  #                                              "${HOME}"/ios_frameworks/Firebase/NonFirebaseSDKs/* \
-  #                                              "${HOME}"/ios_frameworks/Firebase/FirebaseFirestore/* \
-  #                                              "${HOME}"/ios_frameworks/Firebase/FirebaseAuth/* \
-  #                                              "${HOME}"/ios_frameworks/Firebase/FirebaseAnalytics/*
-  #   - name: Xcode
-  #     run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
-  #   - name: Install Secret GoogleService-Info.plist
-  #     run: scripts/decrypt_gha_secret.sh scripts/gha-encrypted/qs-firestore.plist.gpg \
-  #       quickstart-ios/firestore/GoogleService-Info.plist "$plist_secret"
-  #   - name: Test Quickstart
-  #     run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart_framework.sh "${SDK}")
-  #   - name: Remove data before upload
-  #     if: ${{ failure() }}
-  #     run: scripts/remove_data.sh firestore
-  #   - uses: actions/upload-artifact@v4
-  #     if: ${{ failure() }}
-  #     with:
-  #       name: quickstart_artifacts_firestore
-  #       path: quickstart-ios/
+  quickstart_framework_firestore:
+    # Don't run on private repo.
+    if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
+    needs: package-head
+    env:
+      plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
+      signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
+      SDK: "Firestore"
+    strategy:
+      matrix:
+        os: [macos-13, macos-14]
+        artifact: [Firebase-actions-dir, Firebase-actions-dir-dynamic]
+        include:
+          - os: macos-13
+            xcode: Xcode_15.2
+          - os: macos-14
+            xcode: Xcode_15.3
+    runs-on: ${{ matrix.os }}
+    steps:
+    - uses: actions/checkout@v4
+    - name: Get framework dir
+      uses: actions/download-artifact@v4
+      with:
+        name: ${{ matrix.artifact }}
+    - uses: ruby/setup-ruby@v1
+    - name: Setup Bundler
+      run: ./scripts/setup_bundler.sh
+    - name: Move frameworks
+      run: |
+        mkdir -p "${HOME}"/ios_frameworks/
+        find "${GITHUB_WORKSPACE}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
+    - uses: actions/checkout@v4
+    - name: Setup quickstart
+      run: SAMPLE="$SDK" TARGET="${SDK}Example" NON_FIREBASE_SDKS="SDWebImage FirebaseAuthUI FirebaseEmailAuthUI" scripts/setup_quickstart_framework.sh \
+                                               "${HOME}"/ios_frameworks/Firebase/NonFirebaseSDKs/* \
+                                               "${HOME}"/ios_frameworks/Firebase/FirebaseFirestore/* \
+                                               "${HOME}"/ios_frameworks/Firebase/FirebaseAuth/* \
+                                               "${HOME}"/ios_frameworks/Firebase/FirebaseAnalytics/*
+    - name: Xcode
+      run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
+    - name: Install Secret GoogleService-Info.plist
+      run: scripts/decrypt_gha_secret.sh scripts/gha-encrypted/qs-firestore.plist.gpg \
+        quickstart-ios/firestore/GoogleService-Info.plist "$plist_secret"
+    - name: Test Quickstart
+      run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart_framework.sh "${SDK}")
+    - name: Remove data before upload
+      if: ${{ failure() }}
+      run: scripts/remove_data.sh firestore
+    - uses: actions/upload-artifact@v4
+      if: ${{ failure() }}
+      with:
+        name: quickstart_artifacts_firestore
+        path: quickstart-ios/
 
   check_framework_firestore_symbols:
     # Don't run on private repo.

+ 2 - 1
Crashlytics/CHANGELOG.md

@@ -1,5 +1,6 @@
-# Unreleased
+# 10.27.0
 - [added] Added support for catching the SIGTERM signal (#12881).
+- [fixed] Fixed a hang when persisting Remote Config Rollouts to disk (#12913).
 
 # 10.25.0
 - [changed] Removed usages of user defaults API from internal Firebase Sessions

+ 2 - 1
Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.m

@@ -57,12 +57,13 @@
 
   NSFileHandle *rolloutsFile = [NSFileHandle fileHandleForUpdatingAtPath:rolloutsPath];
 
-  dispatch_sync(FIRCLSGetLoggingQueue(), ^{
+  dispatch_async(FIRCLSGetLoggingQueue(), ^{
     @try {
       [rolloutsFile seekToEndOfFile];
       NSMutableData *rolloutsWithNewLineData = [rollouts mutableCopy];
       [rolloutsWithNewLineData appendData:[@"\n" dataUsingEncoding:NSUTF8StringEncoding]];
       [rolloutsFile writeData:rolloutsWithNewLineData];
+      [rolloutsFile closeFile];
     } @catch (NSException *exception) {
       FIRCLSDebugLog(@"Failed to write new rollouts. Exception name: %s - message: %s",
                      exception.name, exception.reason);

+ 40 - 0
Crashlytics/UnitTests/FIRCLSRolloutsPersistenceManagerTests.m

@@ -16,6 +16,7 @@
 #import <XCTest/XCTest.h>
 
 #import "Crashlytics/Crashlytics/Components/FIRCLSContext.h"
+#include "Crashlytics/Crashlytics/Components/FIRCLSGlobals.h"
 #import "Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.h"
 #import "Crashlytics/Crashlytics/Models/FIRCLSInternalReport.h"
 #import "Crashlytics/UnitTests/Mocks/FIRCLSTempMockFileManager.h"
@@ -51,6 +52,9 @@ NSString *reportId = @"1234567";
 }
 
 - (void)testUpdateRolloutsStateToPersistenceWithRollouts {
+  XCTestExpectation *expectation = [[XCTestExpectation alloc]
+      initWithDescription:@"Expect updating rollouts to finish writing."];
+
   NSString *encodedStateString =
       @"{rollouts:[{\"parameter_key\":\"6d795f66656174757265\",\"parameter_value\":"
       @"\"e8bf99e698af7468656d6973e79a84e6b58be8af95e695b0e68daeefbc8ce8be93e585a5e4b8ade69687\","
@@ -64,7 +68,43 @@ NSString *reportId = @"1234567";
 
   [self.rolloutsPersistenceManager updateRolloutsStateToPersistenceWithRollouts:data
                                                                        reportID:reportId];
+
+  // Wait for the logging queue to finish.
+  dispatch_async(FIRCLSGetLoggingQueue(), ^{
+    [expectation fulfill];
+  });
+
+  [self waitForExpectations:@[ expectation ] timeout:3];
+
   XCTAssertTrue([[NSFileManager defaultManager] fileExistsAtPath:rolloutsFilePath]);
 }
 
+- (void)testUpdateRolloutsStateToPersistenceEnsureNoHang {
+  dispatch_queue_t testQueue = dispatch_queue_create("TestQueue", DISPATCH_QUEUE_SERIAL);
+  XCTestExpectation *expectation =
+      [[XCTestExpectation alloc] initWithDescription:@"Expect updating rollouts to return."];
+  NSString *encodedStateString =
+      @"{rollouts:[{\"parameter_key\":\"6d795f66656174757265\",\"parameter_value\":"
+      @"\"e8bf99e698af7468656d6973e79a84e6b58be8af95e695b0e68daeefbc8ce8be93e585a5e4b8ade69687\","
+      @"\"rollout_id\":\"726f6c6c6f75745f31\",\"template_version\":1,\"variant_id\":"
+      @"\"636f6e74726f6c\"}]}";
+
+  NSData *data = [encodedStateString dataUsingEncoding:NSUTF8StringEncoding];
+
+  // Clog up the queue with a long running operation. This sleep time
+  // must be longer than the expectation timeout.
+  dispatch_async(FIRCLSGetLoggingQueue(), ^{
+    sleep(10);
+  });
+
+  dispatch_async(testQueue, ^{
+    // Ensure that calling this returns quickly so we don't hang
+    [self.rolloutsPersistenceManager updateRolloutsStateToPersistenceWithRollouts:data
+                                                                         reportID:reportId];
+    [expectation fulfill];
+  });
+
+  [self waitForExpectations:@[ expectation ] timeout:3];
+}
+
 @end

+ 4 - 1
Dangerfile

@@ -64,6 +64,7 @@ def labelsForModifiedFiles()
   labels.push("api: performance") if @has_performance_changes
   labels.push("api: remoteconfig") if @has_remoteconfig_changes
   labels.push("api: storage") if @has_storage_changes
+  labels.push("api: vertexai") if @has_vertexai_changes
   labels.push("release-tooling") if @has_releasetooling_changes
   labels.push("public-api-change") if @has_api_changes
   return labels
@@ -100,7 +101,8 @@ has_license_changes = didModify(["LICENSE"])
   "Messaging",
   "Performance",
   "RemoteConfig",
-  "Storage"
+  "Storage",
+  "VertexAI"
 ]
 
 ## Product directories
@@ -149,6 +151,7 @@ has_license_changes = didModify(["LICENSE"])
 @has_remoteconfig_changes = hasChangesIn("FirebaseRemoteConfig")
 @has_remoteconfig_api_changes = hasChangesIn("FirebaseRemoteConfig/Sources/Public/")
 @has_storage_changes = hasChangesIn("FirebaseStorage")
+@has_vertexai_changes = hasChangesIn("FirebaseVertexAI")
 
 @has_releasetooling_changes = hasChangesIn("ReleaseTooling/")
 @has_public_additions = hasAdditionsIn("Public/")

+ 24 - 24
Firebase.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'Firebase'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'Firebase'
 
   s.description      = <<-DESC
@@ -36,14 +36,14 @@ Simplify your app development, grow your user base, and monetize more effectivel
     ss.ios.deployment_target = '10.0'
     ss.osx.deployment_target = '10.13'
     ss.tvos.deployment_target = '12.0'
-    ss.ios.dependency 'FirebaseAnalytics', '~> 10.27.0'
-    ss.osx.dependency 'FirebaseAnalytics', '~> 10.27.0'
-    ss.tvos.dependency 'FirebaseAnalytics', '~> 10.27.0'
+    ss.ios.dependency 'FirebaseAnalytics', '~> 10.28.0'
+    ss.osx.dependency 'FirebaseAnalytics', '~> 10.28.0'
+    ss.tvos.dependency 'FirebaseAnalytics', '~> 10.28.0'
     ss.dependency 'Firebase/CoreOnly'
   end
 
   s.subspec 'CoreOnly' do |ss|
-    ss.dependency 'FirebaseCore', '10.27.0'
+    ss.dependency 'FirebaseCore', '10.28.0'
     ss.source_files = 'CoreOnly/Sources/Firebase.h'
     ss.preserve_paths = 'CoreOnly/Sources/module.modulemap'
     if ENV['FIREBASE_POD_REPO_FOR_DEV_POD'] then
@@ -79,13 +79,13 @@ Simplify your app development, grow your user base, and monetize more effectivel
     ss.ios.deployment_target = '10.0'
     ss.osx.deployment_target = '10.13'
     ss.tvos.deployment_target = '12.0'
-    ss.dependency 'FirebaseAnalytics/WithoutAdIdSupport', '~> 10.27.0'
+    ss.dependency 'FirebaseAnalytics/WithoutAdIdSupport', '~> 10.28.0'
     ss.dependency 'Firebase/CoreOnly'
   end
 
   s.subspec 'ABTesting' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseABTesting', '~> 10.27.0'
+    ss.dependency 'FirebaseABTesting', '~> 10.28.0'
     # Standard platforms PLUS watchOS.
     ss.ios.deployment_target = '11.0'
     ss.osx.deployment_target = '10.13'
@@ -95,13 +95,13 @@ Simplify your app development, grow your user base, and monetize more effectivel
 
   s.subspec 'AppDistribution' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.ios.dependency 'FirebaseAppDistribution', '~> 10.27.0-beta'
+    ss.ios.dependency 'FirebaseAppDistribution', '~> 10.28.0-beta'
     ss.ios.deployment_target = '11.0'
   end
 
   s.subspec 'AppCheck' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseAppCheck', '~> 10.27.0'
+    ss.dependency 'FirebaseAppCheck', '~> 10.28.0'
     ss.ios.deployment_target = '11.0'
     ss.osx.deployment_target = '10.13'
     ss.tvos.deployment_target = '12.0'
@@ -110,7 +110,7 @@ Simplify your app development, grow your user base, and monetize more effectivel
 
   s.subspec 'Auth' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseAuth', '~> 10.27.0'
+    ss.dependency 'FirebaseAuth', '~> 10.28.0'
     # Standard platforms PLUS watchOS.
     ss.ios.deployment_target = '11.0'
     ss.osx.deployment_target = '10.13'
@@ -120,7 +120,7 @@ Simplify your app development, grow your user base, and monetize more effectivel
 
   s.subspec 'Crashlytics' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseCrashlytics', '~> 10.27.0'
+    ss.dependency 'FirebaseCrashlytics', '~> 10.28.0'
     # Standard platforms PLUS watchOS.
     ss.ios.deployment_target = '11.0'
     ss.osx.deployment_target = '10.13'
@@ -130,7 +130,7 @@ Simplify your app development, grow your user base, and monetize more effectivel
 
   s.subspec 'Database' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseDatabase', '~> 10.27.0'
+    ss.dependency 'FirebaseDatabase', '~> 10.28.0'
     # Standard platforms PLUS watchOS 7.
     ss.ios.deployment_target = '11.0'
     ss.osx.deployment_target = '10.13'
@@ -140,13 +140,13 @@ Simplify your app development, grow your user base, and monetize more effectivel
 
   s.subspec 'DynamicLinks' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.ios.dependency 'FirebaseDynamicLinks', '~> 10.27.0'
+    ss.ios.dependency 'FirebaseDynamicLinks', '~> 10.28.0'
     ss.ios.deployment_target = '11.0'
   end
 
   s.subspec 'Firestore' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseFirestore', '~> 10.27.0'
+    ss.dependency 'FirebaseFirestore', '~> 10.28.0'
     ss.ios.deployment_target = '11.0'
     ss.osx.deployment_target = '10.13'
     ss.tvos.deployment_target = '12.0'
@@ -154,7 +154,7 @@ Simplify your app development, grow your user base, and monetize more effectivel
 
   s.subspec 'Functions' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseFunctions', '~> 10.27.0'
+    ss.dependency 'FirebaseFunctions', '~> 10.28.0'
     # Standard platforms PLUS watchOS.
     ss.ios.deployment_target = '11.0'
     ss.osx.deployment_target = '10.13'
@@ -164,20 +164,20 @@ Simplify your app development, grow your user base, and monetize more effectivel
 
   s.subspec 'InAppMessaging' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.ios.dependency 'FirebaseInAppMessaging', '~> 10.27.0-beta'
-    ss.tvos.dependency 'FirebaseInAppMessaging', '~> 10.27.0-beta'
+    ss.ios.dependency 'FirebaseInAppMessaging', '~> 10.28.0-beta'
+    ss.tvos.dependency 'FirebaseInAppMessaging', '~> 10.28.0-beta'
     ss.ios.deployment_target = '11.0'
     ss.tvos.deployment_target = '12.0'
   end
 
   s.subspec 'Installations' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseInstallations', '~> 10.27.0'
+    ss.dependency 'FirebaseInstallations', '~> 10.28.0'
   end
 
   s.subspec 'Messaging' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseMessaging', '~> 10.27.0'
+    ss.dependency 'FirebaseMessaging', '~> 10.28.0'
     # Standard platforms PLUS watchOS.
     ss.ios.deployment_target = '11.0'
     ss.osx.deployment_target = '10.13'
@@ -187,7 +187,7 @@ Simplify your app development, grow your user base, and monetize more effectivel
 
   s.subspec 'MLModelDownloader' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseMLModelDownloader', '~> 10.27.0-beta'
+    ss.dependency 'FirebaseMLModelDownloader', '~> 10.28.0-beta'
     # Standard platforms PLUS watchOS.
     ss.ios.deployment_target = '11.0'
     ss.osx.deployment_target = '10.13'
@@ -197,15 +197,15 @@ Simplify your app development, grow your user base, and monetize more effectivel
 
   s.subspec 'Performance' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.ios.dependency 'FirebasePerformance', '~> 10.27.0'
-    ss.tvos.dependency 'FirebasePerformance', '~> 10.27.0'
+    ss.ios.dependency 'FirebasePerformance', '~> 10.28.0'
+    ss.tvos.dependency 'FirebasePerformance', '~> 10.28.0'
     ss.ios.deployment_target = '11.0'
     ss.tvos.deployment_target = '12.0'
   end
 
   s.subspec 'RemoteConfig' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseRemoteConfig', '~> 10.27.0'
+    ss.dependency 'FirebaseRemoteConfig', '~> 10.28.0'
     # Standard platforms PLUS watchOS.
     ss.ios.deployment_target = '11.0'
     ss.osx.deployment_target = '10.13'
@@ -215,7 +215,7 @@ Simplify your app development, grow your user base, and monetize more effectivel
 
   s.subspec 'Storage' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseStorage', '~> 10.27.0'
+    ss.dependency 'FirebaseStorage', '~> 10.28.0'
     # Standard platforms PLUS watchOS.
     ss.ios.deployment_target = '11.0'
     ss.osx.deployment_target = '10.13'

+ 1 - 1
FirebaseABTesting.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseABTesting'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'Firebase ABTesting'
 
   s.description      = <<-DESC

+ 4 - 4
FirebaseAnalytics.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
     s.name             = 'FirebaseAnalytics'
-    s.version          = '10.27.0'
+    s.version          = '10.28.0'
     s.summary          = 'Firebase Analytics for iOS'
 
     s.description      = <<-DESC
@@ -13,7 +13,7 @@ Pod::Spec.new do |s|
     s.authors          = 'Google, Inc.'
 
     s.source           = {
-        :http => 'https://dl.google.com/firebase/ios/analytics/4b9dbef45221ba96/FirebaseAnalytics-10.25.0.tar.gz'
+        :http => 'https://dl.google.com/firebase/ios/analytics/069659a8d012c35e/FirebaseAnalytics-10.27.0.tar.gz'
     }
 
     s.cocoapods_version = '>= 1.12.0'
@@ -37,12 +37,12 @@ Pod::Spec.new do |s|
     s.default_subspecs = 'AdIdSupport'
 
     s.subspec 'AdIdSupport' do |ss|
-        ss.dependency 'GoogleAppMeasurement', '10.27.0'
+        ss.dependency 'GoogleAppMeasurement', '10.28.0'
         ss.vendored_frameworks = 'Frameworks/FirebaseAnalytics.xcframework'
     end
 
     s.subspec 'WithoutAdIdSupport' do |ss|
-        ss.dependency 'GoogleAppMeasurement/WithoutAdIdSupport', '10.27.0'
+        ss.dependency 'GoogleAppMeasurement/WithoutAdIdSupport', '10.28.0'
         ss.vendored_frameworks = 'Frameworks/FirebaseAnalytics.xcframework'
     end
 

+ 2 - 2
FirebaseAnalyticsOnDeviceConversion.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
     s.name             = 'FirebaseAnalyticsOnDeviceConversion'
-    s.version          = '10.27.0'
+    s.version          = '10.28.0'
     s.summary          = 'On device conversion measurement plugin for FirebaseAnalytics. Not intended for direct use.'
 
     s.description      = <<-DESC
@@ -18,7 +18,7 @@ Pod::Spec.new do |s|
 
     s.cocoapods_version = '>= 1.12.0'
 
-    s.dependency 'GoogleAppMeasurementOnDeviceConversion', '10.27.0'
+    s.dependency 'GoogleAppMeasurementOnDeviceConversion', '10.28.0'
 
     s.static_framework = true
 

+ 2 - 2
FirebaseAppCheck.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseAppCheck'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'Firebase App Check SDK.'
 
   s.description      = <<-DESC
@@ -46,7 +46,7 @@ Pod::Spec.new do |s|
 
   s.dependency 'AppCheckCore', '~> 10.19'
   s.dependency 'FirebaseAppCheckInterop', '~> 10.17'
-  s.dependency 'FirebaseCore', '~> 10.0'
+  s.dependency 'FirebaseCore', '~> 10.18'
   s.dependency 'PromisesObjC', '~> 2.1'
   s.dependency 'GoogleUtilities/Environment', '~> 7.13'
   s.dependency 'GoogleUtilities/UserDefaults', '~> 7.13'

+ 3 - 0
FirebaseAppCheck/CHANGELOG.md

@@ -1,3 +1,6 @@
+# 10.27.0
+- [fixed] [CocoaPods] missing symbol error for FIRGetLoggerLevel. (#12899)
+
 # 10.25.0
 - [changed] Removed usages of user defaults API to eliminate required reason impact.
 

+ 1 - 1
FirebaseAppCheckInterop.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseAppCheckInterop'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'Interfaces that allow other Firebase SDKs to use AppCheck functionality.'
 
   s.description      = <<-DESC

+ 1 - 1
FirebaseAppDistribution.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseAppDistribution'
-  s.version          = '10.27.0-beta'
+  s.version          = '10.28.0-beta'
   s.summary          = 'App Distribution for Firebase iOS SDK.'
 
   s.description      = <<-DESC

+ 9 - 19
FirebaseAppDistribution/Sources/FIRAppDistributionUIService.m

@@ -23,13 +23,10 @@
 
 @implementation FIRAppDistributionUIService
 
-API_AVAILABLE(ios(9.0))
-SFSafariViewController *_safariVC;
-
 API_AVAILABLE(ios(12.0))
 ASWebAuthenticationSession *_webAuthenticationVC;
 
-API_AVAILABLE(ios(11.0))
+// TODO: Remove this when the deployment target becomes iOS 12+
 SFAuthenticationSession *_safariAuthenticationVC;
 
 - (instancetype)init {
@@ -74,7 +71,7 @@ SFAuthenticationSession *_safariAuthenticationVC;
     if ([error code] == ASWebAuthenticationSessionErrorCodeCanceledLogin) {
       return [self getAppDistributionError:FIRAppDistributionErrorAuthenticationCancelled];
     }
-  } else if (@available(iOS 11.0, *)) {
+  } else {
     if ([error code] == SFAuthenticationErrorCanceledLogin) {
       return [self getAppDistributionError:FIRAppDistributionErrorAuthenticationCancelled];
     }
@@ -110,7 +107,7 @@ SFAuthenticationSession *_safariAuthenticationVC;
     _webAuthenticationVC = authenticationVC;
 
     [authenticationVC start];
-  } else if (@available(iOS 11.0, *)) {
+  } else {
     _safariAuthenticationVC = [[SFAuthenticationSession alloc]
               initWithURL:URL
         callbackURLScheme:callbackURL
@@ -123,13 +120,6 @@ SFAuthenticationSession *_safariAuthenticationVC;
         }];
 
     [_safariAuthenticationVC start];
-  } else if (@available(iOS 9.0, *)) {
-    SFSafariViewController *safariVC = [[SFSafariViewController alloc] initWithURL:URL];
-
-    safariVC.delegate = self;
-    _safariVC = safariVC;
-    [self->_safariHostingViewController presentViewController:safariVC animated:YES completion:nil];
-    self.registrationFlowCompletion = completion;
   }
 }
 
@@ -244,16 +234,16 @@ SFAuthenticationSession *_safariAuthenticationVC;
 
   self.registrationFlowCompletion = nil;
 
-  if (@available(iOS 11.0, *)) {
-    _safariAuthenticationVC = nil;
-  } else if (@available(iOS 12.0, *)) {
+  if (@available(iOS 12.0, *)) {
     _webAuthenticationVC = nil;
-  } else if (@available(iOS 9.0, *)) {
-    _safariVC = nil;
   }
+  // TODO: Remove this when the deployment target becomes iOS 12+
+  // `_safariAuthenticationVC` is cleared unconditionally just in case;
+  // It’s supposed to be assigned only when run on iOS 11.
+  _safariAuthenticationVC = nil;
 }
 
-- (void)safariViewControllerDidFinish:(SFSafariViewController *)controller NS_AVAILABLE_IOS(9.0) {
+- (void)safariViewControllerDidFinish:(SFSafariViewController *)controller {
   NSError *error =
       [[self class] getAppDistributionError:FIRAppDistributionErrorAuthenticationCancelled];
   [self logRegistrationCompletion:error authType:[SFSafariViewController description]];

+ 1 - 1
FirebaseAuth.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseAuth'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'Apple platform client for Firebase Authentication'
 
   s.description      = <<-DESC

+ 1 - 1
FirebaseAuthInterop.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseAuthInterop'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'Interfaces that allow other Firebase SDKs to use Auth functionality.'
 
   s.description      = <<-DESC

+ 1 - 1
FirebaseCore.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseCore'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'Firebase Core'
 
   s.description      = <<-DESC

+ 2 - 1
FirebaseCore/Sources/FIRApp.m

@@ -830,6 +830,7 @@ static FIRApp *sDefaultApp;
     @"FIRAuthComponent" : @"fire-auth",
     @"FIRFunctionsComponent" : @"fire-fun",
     @"FIRStorageComponent" : @"fire-str",
+    @"FIRVertexAIComponent" : @"fire-vertex",
   };
   for (NSString *className in swiftComponents.allKeys) {
     Class klass = NSClassFromString(className);
@@ -856,7 +857,7 @@ static FIRApp *sDefaultApp;
 #pragma mark - App Life Cycle
 
 - (void)subscribeForAppDidBecomeActiveNotifications {
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
   NSNotificationName notificationName = UIApplicationDidBecomeActiveNotification;
 #elif TARGET_OS_OSX
   NSNotificationName notificationName = NSApplicationDidBecomeActiveNotification;

+ 1 - 1
FirebaseCore/Sources/FIROptions.m

@@ -284,7 +284,7 @@ static dispatch_once_t sDefaultOptionsDictionaryOnceToken;
     // The unit tests are set up to catch anything that does not properly convert.
     NSString *version = FIRFirebaseVersion();
     NSArray *components = [version componentsSeparatedByString:@"."];
-    NSString *major = [components objectAtIndex:0];
+    NSString *major = [NSString stringWithFormat:@"%02d", [[components objectAtIndex:0] intValue]];
     NSString *minor = [NSString stringWithFormat:@"%02d", [[components objectAtIndex:1] intValue]];
     NSString *patch = [NSString stringWithFormat:@"%02d", [[components objectAtIndex:2] intValue]];
     kFIRLibraryVersionID = [NSString stringWithFormat:@"%@%@%@000", major, minor, patch];

+ 1 - 1
FirebaseCore/Tests/Unit/FIRAppTest.m

@@ -862,7 +862,7 @@ NSString *const kFIRTestAppName2 = @"test-app-name-2";
 }
 
 - (NSNotificationName)appDidBecomeActiveNotificationName {
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
   return UIApplicationDidBecomeActiveNotification;
 #elif TARGET_OS_OSX
   return NSApplicationDidBecomeActiveNotification;

+ 6 - 6
FirebaseCore/Tests/Unit/FIROptionsTest.m

@@ -624,7 +624,7 @@ extern NSString *const kFIRLibraryVersionID;
   int minor = (versionString[2] - '0') * 10 + versionString[3] - '0';
   int patch = (versionString[4] - '0') * 10 + versionString[5] - '0';
   NSString *str = [NSString stringWithFormat:@"%d.%d.%d", major, minor, patch];
-  XCTAssertEqualObjects(str, FIRFirebaseVersion());
+  XCTAssertTrue([FIRFirebaseVersion() hasPrefix:str]);
 }
 
 // Repeat test with more Objective-C.
@@ -638,11 +638,11 @@ extern NSString *const kFIRLibraryVersionID;
   NSRange major = NSMakeRange(0, 2);
   NSRange minor = NSMakeRange(2, 2);
   NSRange patch = NSMakeRange(4, 2);
-  NSString *str =
-      [NSString stringWithFormat:@"%@.%d.%d", [kFIRLibraryVersionID substringWithRange:major],
-                                 [[kFIRLibraryVersionID substringWithRange:minor] intValue],
-                                 [[kFIRLibraryVersionID substringWithRange:patch] intValue]];
-  XCTAssertEqualObjects(str, FIRFirebaseVersion());
+  NSString *str = [NSString
+      stringWithFormat:@"%d.%d.%d", [[kFIRLibraryVersionID substringWithRange:major] intValue],
+                       [[kFIRLibraryVersionID substringWithRange:minor] intValue],
+                       [[kFIRLibraryVersionID substringWithRange:patch] intValue]];
+  XCTAssertTrue([FIRFirebaseVersion() hasPrefix:str]);
 }
 
 #pragma mark - Helpers

+ 1 - 1
FirebaseCoreExtension.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
     s.name             = 'FirebaseCoreExtension'
-    s.version          = '10.27.0'
+    s.version          = '10.28.0'
     s.summary          = 'Extended FirebaseCore APIs for Firebase product SDKs'
 
     s.description      = <<-DESC

+ 1 - 1
FirebaseCoreInternal.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseCoreInternal'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'APIs for internal FirebaseCore usage.'
 
   s.description      = <<-DESC

+ 1 - 1
FirebaseCrashlytics.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseCrashlytics'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'Best and lightest-weight crash reporting for mobile, desktop and tvOS.'
   s.description      = 'Firebase Crashlytics helps you track, prioritize, and fix stability issues that erode app quality.'
   s.homepage         = 'https://firebase.google.com/'

+ 1 - 1
FirebaseDatabase.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseDatabase'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'Firebase Realtime Database'
 
   s.description      = <<-DESC

+ 1 - 1
FirebaseDatabase/CHANGELOG.md

@@ -1,4 +1,4 @@
-# Unreleased
+# 10.27.0
 - [changed] Update internal socket implementation to use `NSURLSessionWebSocket` where
   available. (#12883)
 

+ 1 - 2
FirebaseDatabase/Sources/Core/FPersistentConnection.m

@@ -1256,8 +1256,7 @@ static void reachabilityCallback(SCNetworkReachabilityRef ref,
 - (void)sendConnectStats {
     NSMutableDictionary *stats = [NSMutableDictionary dictionary];
 
-#if TARGET_OS_IOS || TARGET_OS_TV ||                                           \
-    (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
     if (self.config.persistenceEnabled) {
         stats[@"persistence.ios.enabled"] = @1;
     }

+ 2 - 4
FirebaseDatabase/Sources/Core/FRepo.m

@@ -52,8 +52,7 @@
 #import "FirebaseDatabase/Sources/Utilities/Tuples/FTupleTransaction.h"
 #import <dlfcn.h>
 
-#if TARGET_OS_IOS || TARGET_OS_TV ||                                           \
-    (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 #import <UIKit/UIKit.h>
 #endif
 
@@ -816,8 +815,7 @@
 
 // Targetted compilation is ONLY for testing. UIKit is weak-linked in actual
 // release build.
-#if TARGET_OS_IOS || TARGET_OS_TV ||                                           \
-    (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
     // The idea is to wait until any outstanding sets get written to disk. Since
     // the sets might still be in our dispatch queue, we wait for the dispatch
     // queue to catch up and for persistence to catch up. This may be

+ 1 - 2
FirebaseDatabase/Sources/Persistence/FLevelDBStorageEngine.m

@@ -275,8 +275,7 @@ static NSString *trackedQueryKeysKey(NSUInteger trackedQueryId, NSString *key) {
 }
 
 + (NSString *)firebaseDir {
-#if TARGET_OS_IOS || TARGET_OS_WATCH ||                                        \
-    (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_WATCH || TARGET_OS_VISION
     NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(
         NSDocumentDirectory, NSUserDomainMask, YES);
     NSString *documentsDir = [dirPaths objectAtIndex:0];

+ 1 - 2
FirebaseDatabase/Sources/Realtime/FWebSocketConnection.m

@@ -164,8 +164,7 @@ static NSString *const kGoogleAppIDHeader = @"X-Firebase-GMPID";
 
 // Targetted compilation is ONLY for testing. UIKit is weak-linked in actual
 // release build.
-#if TARGET_OS_IOS || TARGET_OS_TV ||                                           \
-    (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
     Class uiDeviceClass = NSClassFromString(@"UIDevice");
     if (uiDeviceClass) {
         systemVersion = [uiDeviceClass currentDevice].systemVersion;

+ 1 - 5
FirebaseDatabase/Tests/Integration/FIRDatabaseTests.m

@@ -453,11 +453,7 @@ static NSString *kFirebaseTestAltNamespace = @"https://foobar.firebaseio.com";
   __block BOOL done = NO;
   [database.reference.childByAutoId observeSingleEventOfType:FIRDataEventTypeValue
                                                    withBlock:^(FIRDataSnapshot *snapshot) {
-                                                     if (@available(iOS 10.0, macOS 10.12, *)) {
-                                                       dispatch_assert_queue(callbackQueue);
-                                                     } else {
-                                                       NSAssert(YES, @"Test requires iOS 10");
-                                                     }
+                                                     dispatch_assert_queue(callbackQueue);
                                                      done = YES;
                                                    }];
   WAIT_FOR(done);

+ 1 - 1
FirebaseDynamicLinks.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseDynamicLinks'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'Firebase Dynamic Links'
 
   s.description      = <<-DESC

+ 3 - 0
FirebaseDynamicLinks/CHANGELOG.md

@@ -1,3 +1,6 @@
+# 10.27.0
+- [added] Added deprecation warning in advance of August 25, 2025 Dynamic Links service shutdown. (#12995)
+
 # 10.3.0
 - [fixed] Fixes issue where `utmParametersDictionary` / `minimumAppVersion` were not provided and their value were set to `[NSNull null]` instead of `nil`.
 

+ 8 - 9
FirebaseDynamicLinks/Sources/FIRDLDefaultRetrievalProcessV2.m

@@ -176,6 +176,9 @@ NS_ASSUME_NONNULL_BEGIN
 - (nullable NSURL *)uniqueMatchLinkToCheck {
   _clipboardContentAtMatchProcessStart = nil;
   NSString *pasteboardContents = [self retrievePasteboardContents];
+  if (!pasteboardContents) {
+    return nil;
+  }
   NSInteger linkStringMinimumLength =
       expectedCopiedLinkStringSuffix.length + /* ? or & */ 1 + /* http:// */ 7;
   if ((pasteboardContents.length >= linkStringMinimumLength) &&
@@ -201,21 +204,17 @@ NS_ASSUME_NONNULL_BEGIN
   return nil;
 }
 
-- (NSString *)retrievePasteboardContents {
+- (nullable NSString *)retrievePasteboardContents {
   if (![self isPasteboardRetrievalEnabled]) {
     // Pasteboard check for dynamic link is disabled by user.
-    return @"";
+    return nil;
   }
 
-  NSString *pasteboardContents = @"";
-  if (@available(iOS 10.0, *)) {
-    if ([[UIPasteboard generalPasteboard] hasURLs]) {
-      pasteboardContents = [UIPasteboard generalPasteboard].string;
-    }
+  if ([[UIPasteboard generalPasteboard] hasURLs]) {
+    return [UIPasteboard generalPasteboard].string;
   } else {
-    pasteboardContents = [UIPasteboard generalPasteboard].string;
+    return nil;
   }
-  return pasteboardContents;
 }
 
 /**

+ 2 - 1
FirebaseDynamicLinks/Sources/Public/FirebaseDynamicLinks/FIRDynamicLinks.h

@@ -31,7 +31,8 @@ NS_ASSUME_NONNULL_BEGIN
  * @abstract A class that checks for pending Dynamic Links and parses URLs.
  *     This class is available on iOS only.
  */
-
+DEPRECATED_MSG_ATTRIBUTE(
+    "Firebase Dynamic Links is deprecated and the service will shut down on August 25, 2025.")
 NS_EXTENSION_UNAVAILABLE_IOS("Firebase Dynamic Links is not supported for iOS extensions.")
 API_UNAVAILABLE(macos, tvos, watchos)
 NS_SWIFT_NAME(DynamicLinks)

+ 2 - 2
FirebaseFirestore.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseFirestore'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'Google Cloud Firestore'
   s.description      = <<-DESC
 Google Cloud Firestore is a NoSQL document database built for automatic scaling, high performance, and ease of application development.
@@ -37,7 +37,7 @@ Google Cloud Firestore is a NoSQL document database built for automatic scaling,
 
   s.dependency 'FirebaseCore', '~> 10.0'
   s.dependency 'FirebaseCoreExtension', '~> 10.0'
-  s.dependency 'FirebaseFirestoreInternal', '10.27.0'
+  s.dependency 'FirebaseFirestoreInternal', '10.28.0'
   s.dependency 'FirebaseSharedSwift', '~> 10.0'
 
 end

+ 1 - 1
FirebaseFirestoreInternal.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseFirestoreInternal'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'Google Cloud Firestore'
 
   s.description      = <<-DESC

+ 1 - 1
FirebaseFunctions.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseFunctions'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'Cloud Functions for Firebase'
 
   s.description      = <<-DESC

+ 1 - 1
FirebaseInAppMessaging.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseInAppMessaging'
-  s.version          = '10.27.0-beta'
+  s.version          = '10.28.0-beta'
   s.summary          = 'Firebase In-App Messaging for iOS'
 
   s.description      = <<-DESC

+ 1 - 1
FirebaseInAppMessaging/CHANGELOG.md

@@ -1,4 +1,4 @@
-# Unreleased
+# 10.27.0
 - [fixed] Fixed crash at app start that affected CocoaPods users using static
   frameworks (#12882).
 

+ 2 - 2
FirebaseInAppMessaging/Sources/Analytics/FIRIAMAnalyticsEventLoggerImpl.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import <GoogleUtilities/GULUserDefaults.h>
 
@@ -176,4 +176,4 @@ static NSString *const kFIAMUserDefaualtsKeyForRemoveUserPropertyTimeInSeconds =
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Analytics/FIRIAMClearcutHttpRequestSender.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseCore/Extension/FirebaseCoreInternal.h"
 
@@ -204,4 +204,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 7 - 17
FirebaseInAppMessaging/Sources/Analytics/FIRIAMClearcutLogStorage.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import <UIKit/UIKit.h>
 
@@ -95,14 +95,12 @@ static NSString *const kEventExtensionJson = @"extension_js";
                                              selector:@selector(appWillBecomeInactive:)
                                                  name:UIApplicationWillResignActiveNotification
                                                object:nil];
-#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
     if (@available(iOS 13.0, tvOS 13.0, *)) {
       [[NSNotificationCenter defaultCenter] addObserver:self
                                                selector:@selector(appWillBecomeInactive:)
                                                    name:UISceneWillDeactivateNotification
                                                  object:nil];
     }
-#endif  // defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
 
     @try {
       [self loadFromCachePath:cachePath];
@@ -169,19 +167,11 @@ static NSString *const kEventExtensionJson = @"extension_js";
   id fetchedClearcutRetryRecords;
   NSData *data = [NSData dataWithContentsOfFile:filePath];
   if (data) {
-    if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, *)) {
-      fetchedClearcutRetryRecords = [NSKeyedUnarchiver
-          unarchivedObjectOfClasses:[NSSet setWithObjects:[FIRIAMClearcutLogRecord class],
-                                                          [NSMutableArray class], nil]
-                           fromData:data
-                              error:nil];
-    } else {
-      // Fallback on earlier versions
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-      fetchedClearcutRetryRecords = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
-#pragma clang diagnostic pop
-    }
+    fetchedClearcutRetryRecords = [NSKeyedUnarchiver
+        unarchivedObjectOfClasses:[NSSet setWithObjects:[FIRIAMClearcutLogRecord class],
+                                                        [NSMutableArray class], nil]
+                         fromData:data
+                            error:nil];
   }
   if (fetchedClearcutRetryRecords) {
     @synchronized(self) {
@@ -209,4 +199,4 @@ static NSString *const kEventExtensionJson = @"extension_js";
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Analytics/FIRIAMClearcutLogger.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseCore/Extension/FirebaseCoreInternal.h"
 
@@ -214,4 +214,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 4
FirebaseInAppMessaging/Sources/Analytics/FIRIAMClearcutUploader.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import <GoogleUtilities/GULUserDefaults.h>
 #import <UIKit/UIKit.h>
@@ -102,14 +102,12 @@ static NSString *FIRIAM_UserDefaultsKeyForNextValidClearcutUploadTimeInMills =
                                              selector:@selector(scheduleNextSendFromForeground:)
                                                  name:UIApplicationWillEnterForegroundNotification
                                                object:nil];
-#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
     if (@available(iOS 13.0, tvOS 13.0, *)) {
       [[NSNotificationCenter defaultCenter] addObserver:self
                                                selector:@selector(scheduleNextSendFromForeground:)
                                                    name:UISceneWillEnterForegroundNotification
                                                  object:nil];
     }
-#endif  // defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
     _userDefaults = userDefaults ? userDefaults : [GULUserDefaults standardUserDefaults];
     // it would be 0 if it does not exist, which is equvilent to saying that
     // you can send now
@@ -246,4 +244,4 @@ static NSString *FIRIAM_UserDefaultsKeyForNextValidClearcutUploadTimeInMills =
 
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Data/FIRIAMFetchResponseParser.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseCore/Extension/FirebaseCoreInternal.h"
 
@@ -399,4 +399,4 @@
 
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Data/FIRIAMMessageContentDataWithImageURL.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseCore/Extension/FirebaseCoreInternal.h"
 
@@ -206,4 +206,4 @@ static NSInteger const SuccessHTTPStatusCode = 200;
 
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Data/FIRIAMMessageDefinition.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseInAppMessaging/Sources/Private/Data/FIRIAMMessageDefinition.h"
 
@@ -109,4 +109,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Data/FIRIAMRenderingEffectSetting.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseInAppMessaging/Sources/Private/Data/FIRIAMRenderingEffectSetting.h"
 
@@ -34,4 +34,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 0 - 4
FirebaseInAppMessaging/Sources/DefaultUI/Banner/FIRIAMBannerViewController.m

@@ -161,18 +161,14 @@ static const CGFloat kSwipeUpThreshold = -10.0f;
 
   // Calculate status bar height.
   CGFloat statusBarHeight = 0;
-#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
   if (@available(iOS 13.0, tvOS 13.0, *)) {
     UIStatusBarManager *manager =
         [UIApplication sharedApplication].keyWindow.windowScene.statusBarManager;
 
     statusBarHeight = manager.statusBarFrame.size.height;
   } else {
-#endif
     statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
-#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
   }
-#endif
 
   // Pin title label below status bar with cushion.
   [[self.titleLabel.topAnchor constraintEqualToAnchor:self.view.topAnchor

+ 0 - 2
FirebaseInAppMessaging/Sources/DefaultUI/FIRIAMBaseRenderingViewController.m

@@ -55,7 +55,6 @@ static const NSTimeInterval kMinValidImpressionTime = 3.0;
                                            selector:@selector(appDidBecomeActive:)
                                                name:UIApplicationDidBecomeActiveNotification
                                              object:nil];
-#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
   if (@available(iOS 13.0, tvOS 13.0, *)) {
     [[NSNotificationCenter defaultCenter] addObserver:self
                                              selector:@selector(appWillBecomeInactive:)
@@ -67,7 +66,6 @@ static const NSTimeInterval kMinValidImpressionTime = 3.0;
                                                  name:UISceneDidActivateNotification
                                                object:nil];
   }
-#endif  // defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
   self.aggregateImpressionTimeInSeconds = 0;
 }
 

+ 0 - 10
FirebaseInAppMessaging/Sources/DefaultUI/FIRIAMRenderingWindowHelper.m

@@ -28,15 +28,11 @@
   static dispatch_once_t onceToken;
 
   dispatch_once(&onceToken, ^{
-#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
     if (@available(iOS 13.0, tvOS 13.0, *)) {
       UIWindowForModal = [[self class] iOS13PlusWindow];
     } else {
-#endif  // defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
       UIWindowForModal = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
-#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
     }
-#endif  // defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
     UIWindowForModal.windowLevel = UIWindowLevelNormal;
   });
   return UIWindowForModal;
@@ -47,23 +43,18 @@
   static dispatch_once_t onceToken;
 
   dispatch_once(&onceToken, ^{
-#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
     if (@available(iOS 13.0, tvOS 13.0, *)) {
       UIWindowForBanner = [[self class] iOS13PlusBannerWindow];
     } else {
-#endif  // defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
       UIWindowForBanner =
           [[FIRIAMBannerViewUIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
-#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
     }
-#endif
     UIWindowForBanner.windowLevel = UIWindowLevelNormal;
   });
 
   return UIWindowForBanner;
 }
 
-#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
 + (UIWindow *)iOS13PlusWindow API_AVAILABLE(ios(13.0)) {
   UIWindowScene *foregroundedScene = [[UIApplication sharedApplication] fir_foregroundWindowScene];
   if (foregroundedScene.delegate) {
@@ -82,7 +73,6 @@
   }
 }
 
-#endif
 @end
 
 #endif  // TARGET_OS_IOS

+ 1 - 5
FirebaseInAppMessaging/Sources/DefaultUI/ImageOnly/FIRIAMImageOnlyViewController.m

@@ -124,11 +124,7 @@
   CGFloat maxImageViewHeight = self.view.window.frame.size.height - minimalMargine * 2;
 
   // Factor in space for the top notch on iPhone X*.
-#if defined(__IPHONE_11_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000
-  if (@available(iOS 11.0, *)) {
-    maxImageViewHeight -= self.view.safeAreaInsets.top;
-  }
-#endif  // defined(__IPHONE_11_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000
+  maxImageViewHeight -= self.view.safeAreaInsets.top;
 
   CGFloat adjustedImageViewHeight = self.imageOriginalSize.height;
   CGFloat adjustedImageViewWidth = self.imageOriginalSize.width;

+ 1 - 5
FirebaseInAppMessaging/Sources/DefaultUI/Modal/FIRIAMModalViewController.m

@@ -288,11 +288,7 @@ struct TitleBodyButtonHeightInfo {
                           TopBottomPaddingAroundMsgCard * 2;
 
     // Factor in space for the top notch on iPhone X*.
-#if defined(__IPHONE_11_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000
-    if (@available(iOS 11.0, *)) {
-      heightCalcReference -= self.view.safeAreaInsets.top;
-    }
-#endif  // defined(__IPHONE_11_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000
+    heightCalcReference -= self.view.safeAreaInsets.top;
   }
 
   FIRLogDebug(kFIRLoggerInAppMessagingDisplay, @"I-FID300004",

+ 2 - 2
FirebaseInAppMessaging/Sources/DisplayTrigger/FIRIAMDisplayTriggerDefinition.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseInAppMessaging/Sources/Private/DisplayTrigger/FIRIAMDisplayTriggerDefinition.h"
 
@@ -43,4 +43,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/FIRCore+InAppMessaging.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import <Foundation/Foundation.h>
 #import "FirebaseInAppMessaging/Sources/FIRCore+InAppMessaging.h"
@@ -23,4 +23,4 @@
 NSString *const kFirebaseInAppMessagingErrorDomain = @"com.firebase.inappmessaging";
 FIRLoggerService kFIRLoggerInAppMessaging = @"[FirebaseInAppMessaging]";
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/FIRInAppMessaging.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseInAppMessaging/Sources/Public/FirebaseInAppMessaging/FIRInAppMessaging.h"
 
@@ -145,4 +145,4 @@ static BOOL _autoBootstrapOnFIRAppInit = YES;
 
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 7 - 17
FirebaseInAppMessaging/Sources/Flows/FIRIAMActivityLogger.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import <UIKit/UIKit.h>
 
@@ -113,14 +113,12 @@ static NSString *const kDetailArchiveKey = @"detail";
                                              selector:@selector(appWillBecomeInactive:)
                                                  name:UIApplicationWillResignActiveNotification
                                                object:nil];
-#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
     if (@available(iOS 13.0, tvOS 13.0, *)) {
       [[NSNotificationCenter defaultCenter] addObserver:self
                                                selector:@selector(appWillBecomeInactive:)
                                                    name:UISceneWillDeactivateNotification
                                                  object:nil];
     }
-#endif  // defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
     if (loadFromCache) {
       @try {
         [self loadFromCachePath:nil];
@@ -157,19 +155,11 @@ static NSString *const kDetailArchiveKey = @"detail";
   id fetchedActivityRecords;
   NSData *data = [NSData dataWithContentsOfFile:filePath];
   if (data) {
-    if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, *)) {
-      fetchedActivityRecords = [NSKeyedUnarchiver
-          unarchivedObjectOfClasses:[NSSet setWithObjects:[FIRIAMActivityRecord class],
-                                                          [NSMutableArray class], nil]
-                           fromData:data
-                              error:nil];
-    } else {
-      // Fallback on earlier versions
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-      fetchedActivityRecords = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
-#pragma clang diagnostic pop
-    }
+    fetchedActivityRecords = [NSKeyedUnarchiver
+        unarchivedObjectOfClasses:[NSSet setWithObjects:[FIRIAMActivityRecord class],
+                                                        [NSMutableArray class], nil]
+                         fromData:data
+                            error:nil];
   }
   if (fetchedActivityRecords) {
     @synchronized(self) {
@@ -245,4 +235,4 @@ static NSString *const kDetailArchiveKey = @"detail";
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Flows/FIRIAMBookKeeper.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import <GoogleUtilities/GULUserDefaults.h>
 
@@ -264,4 +264,4 @@ static NSTimeInterval kMaxFetchWaitTimeInSeconds = 3 * 24 * 60 * 60;
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Flows/FIRIAMClientInfoFetcher.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseCore/Extension/FirebaseCoreInternal.h"
 #import "FirebaseInstallations/Source/Library/Private/FirebaseInstallationsInternal.h"
@@ -133,4 +133,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Flows/FIRIAMDisplayCheckOnAnalyticEventsFlow.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseCore/Extension/FirebaseCoreInternal.h"
 #import "Interop/Analytics/Public/FIRAnalyticsInterop.h"
@@ -68,4 +68,4 @@
 
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 4
FirebaseInAppMessaging/Sources/Flows/FIRIAMDisplayCheckOnAppForegroundFlow.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseCore/Extension/FirebaseCoreInternal.h"
 
@@ -33,7 +33,6 @@
          selector:@selector(checkAndDisplayNextAppForegroundMessageFromForeground:)
              name:UIApplicationWillEnterForegroundNotification
            object:nil];
-#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
   if (@available(iOS 13.0, tvOS 13.0, *)) {
     [[NSNotificationCenter defaultCenter]
         addObserver:self
@@ -41,7 +40,6 @@
                name:UISceneWillEnterForegroundNotification
              object:nil];
   }
-#endif  // defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
 }
 
 - (void)checkAndDisplayNextAppForegroundMessageFromForeground:(NSNotification *)notification {
@@ -67,4 +65,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Flows/FIRIAMDisplayCheckOnFetchDoneNotificationFlow.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseCore/Extension/FirebaseCoreInternal.h"
 
@@ -64,4 +64,4 @@ extern NSString *const kFIRIAMFetchIsDoneNotification;
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Flows/FIRIAMDisplayCheckTriggerFlow.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseInAppMessaging/Sources/Private/Flows/FIRIAMDisplayCheckTriggerFlow.h"
 
@@ -34,4 +34,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 6 - 6
FirebaseInAppMessaging/Sources/Flows/FIRIAMDisplayExecutor.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import <UIKit/UIKit.h>
 #import "FirebaseCore/Extension/FirebaseCoreInternal.h"
@@ -355,7 +355,6 @@
   [alert addAction:defaultAction];
 
   dispatch_async(dispatch_get_main_queue(), ^{
-#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
     if (@available(iOS 13.0, tvOS 13.0, *)) {
       UIWindowScene *foregroundedScene =
           [[UIApplication sharedApplication] fir_foregroundWindowScene];
@@ -364,10 +363,11 @@
         return;
       }
       self.alertWindow = [[UIWindow alloc] initWithWindowScene:foregroundedScene];
-    }
-#else  // defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
-    self.alertWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
+#if TARGET_OS_IOS || TARGET_OS_TV
+    } else {
+      self.alertWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
 #endif
+    }
     UIViewController *alertViewController = [[UIViewController alloc] init];
     self.alertWindow.rootViewController = alertViewController;
     self.alertWindow.hidden = NO;
@@ -778,4 +778,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Flows/FIRIAMFetchFlow.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseCore/Extension/FirebaseCoreInternal.h"
 
@@ -267,4 +267,4 @@ NSString *const kFIRIAMFetchIsDoneNotification = @"FIRIAMFetchIsDoneNotification
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 4
FirebaseInAppMessaging/Sources/Flows/FIRIAMFetchOnAppForegroundFlow.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseCore/Extension/FirebaseCoreInternal.h"
 
@@ -29,14 +29,12 @@
                                            selector:@selector(appWillEnterForeground:)
                                                name:UIApplicationWillEnterForegroundNotification
                                              object:nil];
-#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
   if (@available(iOS 13.0, tvOS 13.0, *)) {
     [[NSNotificationCenter defaultCenter] addObserver:self
                                              selector:@selector(appWillEnterForeground:)
                                                  name:UISceneWillEnterForegroundNotification
                                                object:nil];
   }
-#endif  // defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
 }
 
 - (void)appWillEnterForeground:(NSNotification *)notification {
@@ -61,4 +59,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Flows/FIRIAMMessageClientCache.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseCore/Extension/FirebaseCoreInternal.h"
 
@@ -238,4 +238,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Flows/FIRIAMMsgFetcherUsingRestful.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseCore/Extension/FirebaseCoreInternal.h"
 
@@ -277,4 +277,4 @@ static NSInteger const SuccessHTTPStatusCode = 200;
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Flows/FIRIAMServerMsgFetchStorage.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseCore/Extension/FirebaseCoreInternal.h"
 
@@ -66,4 +66,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/RenderingObjects/FIRInAppMessagingRenderingDataClasses.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import <Foundation/Foundation.h>
 
@@ -371,4 +371,4 @@ NSString *const FIRIAMTestMessageID = @"test_message_id";
 
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Runtime/FIRIAMActionURLFollower.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import <Foundation/Foundation.h>
 #import <UIKit/UIKit.h>
@@ -227,4 +227,4 @@ NS_EXTENSION_UNAVAILABLE("Firebase In App Messaging is not supported for iOS ext
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Runtime/FIRIAMRuntimeManager.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import <GoogleUtilities/GULUserDefaults.h>
 
@@ -446,4 +446,4 @@ static NSString *const kFirebaseInAppMessagingAutoDataCollectionKey =
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Runtime/FIRIAMSDKModeManager.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import <GoogleUtilities/GULUserDefaults.h>
 
@@ -117,4 +117,4 @@ NSInteger const kFIRIAMMaxFetchInNewlyInstalledMode = 5;
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Runtime/FIRIAMSDKSettings.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseInAppMessaging/Sources/Private/Runtime/FIRIAMSDKSettings.h"
 
@@ -37,4 +37,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Runtime/FIRInAppMessaging+Bootstrap.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseInAppMessaging/Sources/Private/Runtime/FIRInAppMessaging+Bootstrap.h"
 
@@ -136,4 +136,4 @@ static NSString *_fiamServerHostName = @"firebaseinappmessaging.googleapis.com";
 
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Util/FIRIAMElapsedTimeTracker.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseInAppMessaging/Sources/Util/FIRIAMElapsedTimeTracker.h"
 @interface FIRIAMElapsedTimeTracker ()
@@ -58,4 +58,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Util/FIRIAMTimeFetcher.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseInAppMessaging/Sources/Private/Util/FIRIAMTimeFetcher.h"
 
@@ -25,4 +25,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Util/NSString+FIRInterlaceStrings.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseInAppMessaging/Sources/Private/Util/NSString+FIRInterlaceStrings.h"
 
@@ -44,4 +44,4 @@
 
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Util/UIApplication+FIRForegroundWindowScene.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseInAppMessaging/Sources/Private/Util/UIApplication+FIRForegroundWindowScene.h"
 
@@ -37,4 +37,4 @@
 
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 2 - 2
FirebaseInAppMessaging/Sources/Util/UIColor+FIRIAMHexString.m

@@ -15,7 +15,7 @@
  */
 
 #import <TargetConditionals.h>
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
 
 #import "FirebaseInAppMessaging/Sources/Util/UIColor+FIRIAMHexString.h"
 
@@ -41,4 +41,4 @@
 }
 @end
 
-#endif  // TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#endif  // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION

+ 1 - 1
FirebaseInstallations.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseInstallations'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'Firebase Installations'
 
   s.description      = <<-DESC

+ 1 - 1
FirebaseMLModelDownloader.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseMLModelDownloader'
-  s.version          = '10.27.0-beta'
+  s.version          = '10.28.0-beta'
   s.summary          = 'Firebase ML Model Downloader'
 
   s.description      = <<-DESC

+ 3 - 5
FirebaseMLModelDownloader/Sources/FileDownloader.swift

@@ -63,11 +63,9 @@ class ModelFileDownloader: NSObject, FileDownloader {
     self.conditions = conditions
     configuration = URLSessionConfiguration.ephemeral
     /// Wait for network connectivity.
-    if #available(iOS 11.0, macOS 10.13, macCatalyst 13.0, tvOS 11.0, watchOS 4.0, *) {
-      self.configuration.waitsForConnectivity = true
-      /// Wait for 10 minutes.
-      self.configuration.timeoutIntervalForResource = 600
-    }
+    configuration.waitsForConnectivity = true
+    /// Wait for 10 minutes.
+    configuration.timeoutIntervalForResource = 600
     configuration.allowsCellularAccess = conditions.allowsCellularAccess
   }
 

+ 4 - 12
FirebaseMLModelDownloader/Sources/ModelInfoRetriever.swift

@@ -523,18 +523,10 @@ extension ModelInfoRetriever {
 
   /// Parse date from string - used to get download URL expiry time.
   private static func getDateFromString(_ strDate: String) -> Date? {
-    if #available(iOS 11, macOS 10.13, macCatalyst 13.0, tvOS 11.0, watchOS 4.0, *) {
-      let dateFormatter = ISO8601DateFormatter()
-      dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
-      dateFormatter.formatOptions = [.withFractionalSeconds]
-      return dateFormatter.date(from: strDate)
-    } else {
-      let dateFormatter = DateFormatter()
-      dateFormatter.locale = Locale(identifier: "en-US_POSIX")
-      dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
-      dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
-      return dateFormatter.date(from: strDate)
-    }
+    let dateFormatter = ISO8601DateFormatter()
+    dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
+    dateFormatter.formatOptions = [.withFractionalSeconds]
+    return dateFormatter.date(from: strDate)
   }
 
   /// Return model info created from server response.

+ 1 - 1
FirebaseMessaging.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseMessaging'
-  s.version          = '10.27.0'
+  s.version          = '10.28.0'
   s.summary          = 'Firebase Messaging'
 
   s.description      = <<-DESC

+ 1 - 1
FirebaseMessaging/CHANGELOG.md

@@ -1,4 +1,4 @@
-# Unreleased
+# 10.27.0
 - [fixed] Fixed bug preventing Messaging from working with a custom sqlite3
   dependency (#12900).
 

+ 0 - 5
FirebaseMessaging/Sources/FIRMessaging.m

@@ -49,13 +49,8 @@
 static NSString *const kFIRMessagingMessageViaAPNSRootKey = @"aps";
 static NSString *const kFIRMessagingReachabilityHostname = @"www.google.com";
 
-#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
 const NSNotificationName FIRMessagingRegistrationTokenRefreshedNotification =
     @"com.firebase.messaging.notif.fcm-token-refreshed";
-#else
-NSString *const FIRMessagingRegistrationTokenRefreshedNotification =
-    @"com.firebase.messaging.notif.fcm-token-refreshed";
-#endif  // defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
 
 NSString *const kFIRMessagingUserDefaultsKeyAutoInitEnabled =
     @"com.firebase.messaging.auto-init.enabled";  // Auto Init Enabled key stored in NSUserDefaults

+ 1 - 4
FirebaseMessaging/Sources/FIRMessagingContextManagerService.m

@@ -13,11 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 ||                                          \
-    __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_14 || __TV_OS_VERSION_MAX_ALLOWED >= __TV_10_0 || \
-    __WATCH_OS_VERSION_MAX_ALLOWED >= __WATCHOS_3_0 || TARGET_OS_MACCATALYST
+
 #import <UserNotifications/UserNotifications.h>
-#endif
 
 #import "FirebaseMessaging/Sources/FIRMessagingContextManagerService.h"
 

+ 1 - 2
FirebaseMessaging/Sources/FIRMessagingUtilities.m

@@ -311,8 +311,7 @@ BOOL FIRMessagingIsProductionApp(void) {
 #if TARGET_OS_OSX || TARGET_OS_MACCATALYST
   NSString *path = [[[[NSBundle mainBundle] resourcePath] stringByDeletingLastPathComponent]
       stringByAppendingPathComponent:@"embedded.provisionprofile"];
-#elif TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH || \
-    (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#elif TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH || TARGET_OS_VISION
   NSString *path = [[[NSBundle mainBundle] bundlePath]
       stringByAppendingPathComponent:@"embedded.mobileprovision"];
 #endif

+ 1 - 1
FirebaseMessaging/Sources/Token/FIRMessagingAuthKeychain.m

@@ -92,7 +92,7 @@ NSString *const kFIRMessagingKeychainWildcardIdentifier = @"*";
   NSMutableDictionary *keychainQuery = [self keychainQueryForService:service account:account];
   NSMutableArray<NSData *> *results;
   keychainQuery[(__bridge id)kSecReturnData] = (__bridge id)kCFBooleanTrue;
-#if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION)
+#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_VISION
   keychainQuery[(__bridge id)kSecReturnAttributes] = (__bridge id)kCFBooleanTrue;
   keychainQuery[(__bridge id)kSecMatchLimit] = (__bridge id)kSecMatchLimitAll;
   // FIRMessagingKeychain should only take a query and return a result, will handle the query here.

+ 2 - 5
FirebaseMessaging/Tests/UnitTests/FIRMessagingContextManagerServiceTest.m

@@ -13,12 +13,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 ||                                          \
-    __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_14 || __TV_OS_VERSION_MAX_ALLOWED >= __TV_10_0 || \
-    __WATCH_OS_VERSION_MAX_ALLOWED >= __WATCHOS_3_0 || TARGET_OS_MACCATALYST
-#import <UserNotifications/UserNotifications.h>
-#endif
+
 #import <OCMock/OCMock.h>
+#import <UserNotifications/UserNotifications.h>
 #import <XCTest/XCTest.h>
 
 #import "FirebaseMessaging/Sources/FIRMessagingContextManagerService.h"

+ 1 - 8
FirebaseMessaging/Tests/UnitTests/FIRMessagingRemoteNotificationsProxyTest.m

@@ -14,11 +14,8 @@
  * limitations under the License.
  */
 
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 || \
-    __TV_OS_VERSION_MAX_ALLOWED >= __TV_10_0 || __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_14
-#import <UserNotifications/UserNotifications.h>
-#endif
 #import <OCMock/OCMock.h>
+#import <UserNotifications/UserNotifications.h>
 #import <XCTest/XCTest.h>
 
 #import <GoogleUtilities/GULAppDelegateSwizzler.h>
@@ -95,8 +92,6 @@
 
 @end
 
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 || \
-    __TV_OS_VERSION_MAX_ALLOWED >= __TV_10_0 || __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_14
 #pragma mark - Incompete UNUserNotificationCenterDelegate
 @interface IncompleteUserNotificationCenterDelegate : NSObject <UNUserNotificationCenterDelegate>
 @end
@@ -127,8 +122,6 @@
 #endif
 @end
 
-#endif
-
 @interface GULAppDelegateSwizzler (FIRMessagingRemoteNotificationsProxyTest)
 + (void)resetProxyOriginalDelegateOnceToken;
 @end

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor