Răsfoiți Sursa

Revert "Merge branch 'update-password' of https://github.com/firebase/firebase-ios-sdk into add-linkedin"

This reverts commit c5ff4dda98f698c486c257d76262328a874190fc, reversing
changes made to 8111a7956e21bc1a0d25ea9fd604a26af648830f.
Pragati 1 an în urmă
părinte
comite
b12a76628f
100 a modificat fișierele cu 1054 adăugiri și 1744 ștergeri
  1. 10 23
      .github/workflows/abtesting.yml
  2. 1 1
      .github/workflows/analytics.yml
  3. 1 1
      .github/workflows/api_diff_report.yml
  4. 2 2
      .github/workflows/appdistribution.yml
  5. 19 41
      .github/workflows/auth.yml
  6. 2 2
      .github/workflows/core.yml
  7. 1 1
      .github/workflows/core_extension.yml
  8. 2 2
      .github/workflows/core_internal.yml
  9. 11 23
      .github/workflows/crashlytics.yml
  10. 2 2
      .github/workflows/database.yml
  11. 2 2
      .github/workflows/dynamiclinks.yml
  12. 3 3
      .github/workflows/firebase_app_check.yml
  13. 3 3
      .github/workflows/firestore.yml
  14. 2 2
      .github/workflows/functions.yml
  15. 12 14
      .github/workflows/health-metrics-presubmit.yml
  16. 36 0
      .github/workflows/health-metrics-release.yml
  17. 2 2
      .github/workflows/inappmessaging.yml
  18. 2 2
      .github/workflows/installations.yml
  19. 8 8
      .github/workflows/messaging.yml
  20. 2 2
      .github/workflows/mlmodeldownloader.yml
  21. 2 2
      .github/workflows/performance.yml
  22. 15 15
      .github/workflows/prerelease.yml
  23. 15 15
      .github/workflows/release.yml
  24. 2 2
      .github/workflows/remoteconfig.yml
  25. 2 2
      .github/workflows/sessions.yml
  26. 2 2
      .github/workflows/shared-swift.yml
  27. 1 1
      .github/workflows/spectesting.yml
  28. 3 3
      .github/workflows/spm.yml
  29. 13 21
      .github/workflows/storage.yml
  30. 56 45
      .github/workflows/zip.yml
  31. 2 2
      CONTRIBUTING.md
  32. 0 2
      CoreOnly/NOTICES
  33. 0 7
      CoreOnly/Sources/Firebase.h
  34. 0 1
      CoreOnly/Tests/FirebasePodTest/Podfile
  35. 0 9
      Crashlytics/CHANGELOG.md
  36. 7 5
      Crashlytics/Crashlytics/Components/FIRCLSHost.m
  37. 1 3
      Crashlytics/Crashlytics/Components/FIRCLSUserLogging.h
  38. 3 13
      Crashlytics/Crashlytics/Components/FIRCLSUserLogging.m
  39. 0 1
      Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.h
  40. 2 5
      Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.m
  41. 0 30
      Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.h
  42. 0 67
      Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.m
  43. 6 45
      Crashlytics/Crashlytics/FIRCrashlytics.m
  44. 2 3
      Crashlytics/Crashlytics/Handlers/FIRCLSException.h
  45. 15 26
      Crashlytics/Crashlytics/Handlers/FIRCLSException.mm
  46. 6 15
      Crashlytics/Crashlytics/Helpers/FIRCLSFile.m
  47. 1 1
      Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.h
  48. 11 23
      Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.m
  49. 0 1
      Crashlytics/Crashlytics/Models/FIRCLSInternalReport.h
  50. 0 1
      Crashlytics/Crashlytics/Models/FIRCLSInternalReport.m
  51. 1 2
      Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter.h
  52. 1 5
      Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter.m
  53. 0 141
      Crashlytics/Crashlytics/Rollouts/CrashlyticsRemoteConfigManager.swift
  54. 0 44
      Crashlytics/Crashlytics/Rollouts/EncodedRolloutAssignment.swift
  55. 0 38
      Crashlytics/Crashlytics/Rollouts/StringToHexConverter.swift
  56. 1 2
      Crashlytics/Protogen/nanopb/crashlytics.nanopb.c
  57. 1 3
      Crashlytics/Protogen/nanopb/crashlytics.nanopb.h
  58. 0 66
      Crashlytics/Resources/PrivacyInfo.xcprivacy
  59. 5 10
      Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.m
  60. 3 6
      Crashlytics/UnitTests/FIRCLSContextManagerTests.m
  61. 0 31
      Crashlytics/UnitTests/FIRCLSFileTests.m
  62. 20 49
      Crashlytics/UnitTests/FIRCLSInstallIdentifierModelTests.m
  63. 5 5
      Crashlytics/UnitTests/FIRCLSLoggingTests.m
  64. 1 3
      Crashlytics/UnitTests/FIRCLSReportAdapterTests.m
  65. 0 70
      Crashlytics/UnitTests/FIRCLSRolloutsPersistenceManagerTests.m
  66. 1 1
      Crashlytics/UnitTests/FIRRecordExceptionModelTests.m
  67. 0 3
      Crashlytics/UnitTests/Mocks/FIRMockInstallations.h
  68. 0 17
      Crashlytics/UnitTests/Mocks/FIRMockInstallations.m
  69. 0 136
      Crashlytics/UnitTestsSwift/CrashlyticsRemoteConfigManagerTests.swift
  70. BIN
      Crashlytics/upload-symbols
  71. 0 1
      Example/watchOSSample/Podfile
  72. 25 25
      Firebase.podspec
  73. 2 5
      FirebaseABTesting.podspec
  74. 0 18
      FirebaseABTesting/Sources/Resources/PrivacyInfo.xcprivacy
  75. 6 6
      FirebaseAnalytics.podspec
  76. 3 3
      FirebaseAnalyticsOnDeviceConversion.podspec
  77. 1 1
      FirebaseAnalyticsSwift.podspec
  78. 0 2
      FirebaseAnalyticsSwift/Tests/ObjCAPI/ObjCAPITests.m
  79. 0 2
      FirebaseAnalyticsSwift/Tests/SwiftUnit/AnalyticsAPITests.swift
  80. 2 2
      FirebaseAppCheck.podspec
  81. 2 0
      FirebaseAppCheck/Sources/Core/FIRAppCheck.m
  82. 1 1
      FirebaseAppCheckInterop.podspec
  83. 2 2
      FirebaseAppDistribution.podspec
  84. 4 6
      FirebaseAuth.podspec
  85. 1 1
      FirebaseAuth/Interop/CMakeLists.txt
  86. 0 0
      FirebaseAuth/Interop/FIRAuthInterop.h
  87. 0 50
      FirebaseAuth/Sources/Resources/PrivacyInfo.xcprivacy
  88. 18 8
      FirebaseAuth/Sources/Swift/ActionCode/ActionCodeInfo.swift
  89. 10 8
      FirebaseAuth/Sources/Swift/ActionCode/ActionCodeOperation.swift
  90. 43 25
      FirebaseAuth/Sources/Swift/ActionCode/ActionCodeSettings.swift
  91. 24 12
      FirebaseAuth/Sources/Swift/ActionCode/ActionCodeURL.swift
  92. 467 352
      FirebaseAuth/Sources/Swift/Auth/Auth.swift
  93. 17 14
      FirebaseAuth/Sources/Swift/Auth/AuthComponent.swift
  94. 21 15
      FirebaseAuth/Sources/Swift/Auth/AuthDataResult.swift
  95. 15 11
      FirebaseAuth/Sources/Swift/Auth/AuthDispatcher.swift
  96. 14 7
      FirebaseAuth/Sources/Swift/Auth/AuthOperationType.swift
  97. 6 4
      FirebaseAuth/Sources/Swift/Auth/AuthSettings.swift
  98. 38 23
      FirebaseAuth/Sources/Swift/Auth/AuthTokenResult.swift
  99. 3 3
      FirebaseAuth/Sources/Swift/AuthProvider/AuthCredential.swift
  100. 0 1
      FirebaseAuth/Sources/Swift/AuthProvider/AuthProviderStrings.swift

+ 10 - 23
.github/workflows/abtesting.yml

@@ -29,7 +29,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -38,13 +38,10 @@ jobs:
       run: scripts/setup_bundler.sh
     - name: Xcode
       run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
-    - uses: nick-fields/retry@v3
-      with:
-        timeout_minutes: 120
-        max_attempts: 3
-        retry_on: error
-        retry_wait_seconds: 120
-        command: scripts/pod_lib_lint.rb FirebaseABTesting.podspec --platforms=${{ matrix.target }}
+    - name: Build and test
+      run: |
+        scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseABTesting.podspec \
+          --platforms=${{ matrix.target }}
 
   spm:
     # Don't run on private repo unless it is a PR.
@@ -57,7 +54,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -68,13 +65,8 @@ jobs:
       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 ABTestingUnit ${{ matrix.target }} spm
+    - name: Unit Tests
+      run: scripts/third_party/travis/retry.sh ./scripts/build.sh ABTestingUnit ${{ matrix.target }} spm
 
   catalyst:
     # Don't run on private repo unless it is a PR.
@@ -89,13 +81,8 @@ jobs:
     - uses: ruby/setup-ruby@v1
     - name: Setup Bundler
       run: scripts/setup_bundler.sh
-    - uses: nick-fields/retry@v3
-      with:
-        timeout_minutes: 120
-        max_attempts: 3
-        retry_on: error
-        retry_wait_seconds: 120
-        command: scripts/test_catalyst.sh FirebaseABTesting test FirebaseABTesting-Unit-unit
+    - name: Setup project and Build for Catalyst
+      run: scripts/test_catalyst.sh FirebaseABTesting test FirebaseABTesting-Unit-unit
 
   quickstart:
     # Don't run on private repo unless it is a PR.

+ 1 - 1
.github/workflows/analytics.yml

@@ -28,7 +28,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
 
     steps:

+ 1 - 1
.github/workflows/api_diff_report.yml

@@ -82,7 +82,7 @@ jobs:
             --commit $GITHUB_SHA \
             --run_id ${{github.run_id}}
 
-      - uses: actions/upload-artifact@v4
+      - uses: actions/upload-artifact@v3
         if: ${{ !cancelled() }}
         with:
           name: api_info_and_report

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

@@ -27,7 +27,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -52,7 +52,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

+ 19 - 41
.github/workflows/auth.yml

@@ -33,7 +33,7 @@ jobs:
             xcode: Xcode_14.2
             tests: --skip-tests
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
             tests:
     runs-on: ${{ matrix.os }}
     steps:
@@ -45,14 +45,12 @@ jobs:
       run: scripts/configure_test_keychain.sh
     - name: Xcode
       run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
-#TODO: Restore warnings check after resolution of #11693
-    - uses: nick-fields/retry@v3
-      with:
-        timeout_minutes: 120
-        max_attempts: 3
-        retry_on: error
-        retry_wait_seconds: 120
-        command: scripts/pod_lib_lint.rb ${{ matrix.podspec }} --platforms=${{ matrix.target }} ${{ matrix.tests }} --allow-warnings
+    - name: Build and test
+# TODO: Restore warnings check after resolution of #11693
+#      run: scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb ${{ matrix.podspec }} --platforms=${{ matrix.target }}
+      run: |
+        scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb ${{ matrix.podspec }} --platforms=${{ matrix.target }} \
+         ${{ matrix.tests }} --allow-warnings
 
   integration-tests:
     # Don't run on private repo unless it is a PR.
@@ -60,7 +58,7 @@ jobs:
 
     env:
       plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
-    runs-on: macos-13
+    runs-on: macos-12
     steps:
     - uses: actions/checkout@v4
     - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126
@@ -87,15 +85,9 @@ jobs:
           FirebaseAuth/Tests/SampleSwift/Sample.entitlements "$plist_secret"
         scripts/decrypt_gha_secret.sh scripts/gha-encrypted/AuthSample/Credentials.swift.gpg \
           FirebaseAuth/Tests/SampleSwift/SwiftApiTests/Credentials.swift "$plist_secret"
-    - name: Xcode
-      run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer
-    - uses: nick-fields/retry@v3
-      with:
-        timeout_minutes: 120
-        max_attempts: 3
-        retry_on: error
-        retry_wait_seconds: 120
-        command: ([ -z $plist_secret ] || scripts/build.sh Auth iOS)
+
+    - name: BuildAndTest # can be replaced with pod lib lint with CocoaPods 1.10
+      run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/build.sh Auth iOS)
 
   spm:
     # Don't run on private repo unless it is a PR.
@@ -109,7 +101,7 @@ jobs:
             xcode: Xcode_14.2
             test: spm
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
             test: spmbuildonly
     runs-on: ${{ matrix.os }}
     steps:
@@ -121,13 +113,8 @@ jobs:
       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/third_party/travis/retry.sh ./scripts/build.sh AuthUnit ${{ matrix.target }} ${{ matrix.test }}
+    - name: Unit Tests
+      run: scripts/third_party/travis/retry.sh ./scripts/build.sh AuthUnit ${{ matrix.target }} ${{ matrix.test }}
 
   catalyst:
     # Don't run on private repo unless it is a PR.
@@ -141,13 +128,9 @@ jobs:
     - uses: ruby/setup-ruby@v1
     - name: Setup Bundler
       run: scripts/setup_bundler.sh
-    - uses: nick-fields/retry@v3
-      with:
-        timeout_minutes: 120
-        max_attempts: 3
-        retry_on: error
-        retry_wait_seconds: 120
-        command: scripts/test_catalyst.sh FirebaseAuth build FirebaseAuth-Unit-unit
+    - name: Setup project and Build for Catalyst
+      # Only build the unit tests on Catalyst. Their keychain reliance causes several failures.
+      run: scripts/test_catalyst.sh FirebaseAuth build FirebaseAuth-Unit-unit
 
   quickstart:
     # Don't run on private repo unless it is a PR.
@@ -214,10 +197,5 @@ jobs:
       run: scripts/setup_bundler.sh
     - name: Configure test keychain
       run: scripts/configure_test_keychain.sh
-    - 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 FirebaseAuth.podspec --platforms=${{ matrix.target }} ${{ matrix.flags }}
+    - name: PodLibLint Auth Cron
+      run: scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseAuth.podspec --platforms=${{ matrix.target }} ${{ matrix.flags }}

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

@@ -27,7 +27,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -50,7 +50,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

+ 1 - 1
.github/workflows/core_extension.yml

@@ -25,7 +25,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

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

@@ -23,7 +23,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -46,7 +46,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

+ 11 - 23
.github/workflows/crashlytics.yml

@@ -31,7 +31,7 @@ jobs:
             xcode: Xcode_14.2
             tests: --skip-tests
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
             tests:
     runs-on: ${{ matrix.os }}
     steps:
@@ -41,13 +41,10 @@ jobs:
       run: scripts/setup_bundler.sh
     - name: Xcode
       run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
-    - uses: nick-fields/retry@v3
-      with:
-        timeout_minutes: 120
-        max_attempts: 3
-        retry_on: error
-        retry_wait_seconds: 120
-        command: scripts/pod_lib_lint.rb FirebaseCrashlytics.podspec --platforms=${{ matrix.target }} ${{ matrix.tests }}
+    - name: Build and test
+      run: |
+        scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseCrashlytics.podspec --platforms=${{ matrix.target }} \
+         ${{ matrix.tests }}
 
   spm:
     # Don't run on private repo unless it is a PR.
@@ -60,7 +57,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -71,13 +68,9 @@ jobs:
       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/third_party/travis/retry.sh ./scripts/build.sh FirebaseCrashlyticsUnit ${{ matrix.target }} spm
+    - name: Unit Tests
+      run: scripts/third_party/travis/retry.sh ./scripts/build.sh FirebaseCrashlyticsUnit ${{ matrix.target }} spm
+
 
   catalyst:
     # Don't run on private repo unless it is a PR.
@@ -92,13 +85,8 @@ jobs:
     - uses: ruby/setup-ruby@v1
     - name: Setup Bundler
       run: scripts/setup_bundler.sh
-    - uses: nick-fields/retry@v3
-      with:
-        timeout_minutes: 120
-        max_attempts: 3
-        retry_on: error
-        retry_wait_seconds: 120
-        command: scripts/test_catalyst.sh FirebaseCrashlytics test FirebaseCrashlytics-Unit-unit
+    - name: Setup project and Build for Catalyst
+      run: scripts/test_catalyst.sh FirebaseCrashlytics test FirebaseCrashlytics-Unit-unit
 
   quickstart:
     # Don't run on private repo unless it is a PR.

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

@@ -33,7 +33,7 @@ jobs:
             xcode: Xcode_14.2
             tests: --skip-tests
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
             tests: --test-specs=unit
     runs-on: ${{ matrix.os }}
     steps:
@@ -75,7 +75,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

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

@@ -27,7 +27,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -49,7 +49,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

+ 3 - 3
.github/workflows/firebase_app_check.yml

@@ -28,7 +28,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -72,7 +72,7 @@ jobs:
       run: scripts/third_party/travis/retry.sh ./scripts/build.sh FirebaseAppCheckUnit iOS spm ${{ matrix.diagnostic }}
     - name: Upload raw logs if failed
       if: ${{ failure() }}
-      uses: actions/upload-artifact@v4
+      uses: actions/upload-artifact@v2
       with:
         name: failure-xcodebuild-raw-logs
         path: xcodebuild.log
@@ -107,7 +107,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

+ 3 - 3
.github/workflows/firestore.yml

@@ -369,7 +369,7 @@ jobs:
     - name: Setup Bundler
       run: ./scripts/setup_bundler.sh
     - name: Xcode
-      run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer
+      run: sudo xcode-select -s /Applications/Xcode_15.1.app/Contents/Developer
 
     - name: Pod lib lint
       # TODO(#9565, b/227461966): Remove --no-analyze when absl is fixed.
@@ -411,7 +411,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
 
     steps:
@@ -445,7 +445,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     needs: check
     env:

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

@@ -35,7 +35,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -93,7 +93,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

+ 12 - 14
.github/workflows/health-metrics-presubmit.yml

@@ -75,7 +75,7 @@ jobs:
       run: scripts/setup_bundler.sh
     - name: Build and test
       run: ./scripts/health_metrics/pod_test_code_coverage_report.sh --sdk=FirebaseABTesting --platform=${{ matrix.target }}
-    - uses: actions/upload-artifact@v3
+    - uses: actions/upload-artifact@v2
       with:
         name: codecoverage
         path: /Users/runner/*.xcresult
@@ -95,7 +95,7 @@ jobs:
       run: scripts/setup_bundler.sh
     - name: Build and test
       run: ./scripts/health_metrics/pod_test_code_coverage_report.sh --sdk=FirebaseAuth --platform=${{ matrix.target }}
-    - uses: actions/upload-artifact@v3
+    - uses: actions/upload-artifact@v2
       with:
         name: codecoverage
         path: /Users/runner/*.xcresult
@@ -118,9 +118,7 @@ jobs:
       run: scripts/setup_bundler.sh
     - name: Build and test
       run: ./scripts/health_metrics/pod_test_code_coverage_report.sh --sdk=FirebaseDatabase --platform=${{ matrix.target }}
-      # TODO: Make sure that https://github.com/actions/upload-artifact/issues/478 is resolved
-      # before going to actions/upload-artifact@v4.
-    - uses: actions/upload-artifact@v3
+    - uses: actions/upload-artifact@v2
       with:
         name: codecoverage
         path: /Users/runner/*.xcresult
@@ -143,7 +141,7 @@ jobs:
       run: scripts/setup_bundler.sh
     - name: Build and test
       run: ./scripts/health_metrics/pod_test_code_coverage_report.sh --sdk=FirebaseDynamicLinks --platform=${{ matrix.target }}
-    - uses: actions/upload-artifact@v3
+    - uses: actions/upload-artifact@v2
       with:
         name: codecoverage
         path: /Users/runner/*.xcresult
@@ -169,7 +167,7 @@ jobs:
       run: |
         export EXPERIMENTAL_MODE=true
         ./scripts/health_metrics/pod_test_code_coverage_report.sh --sdk=FirebaseFirestore --platform=${{ matrix.target }}
-    - uses: actions/upload-artifact@v3
+    - uses: actions/upload-artifact@v2
       with:
         name: codecoverage
         path: /Users/runner/*.xcresult
@@ -192,7 +190,7 @@ jobs:
       run: scripts/setup_bundler.sh
     - name: Build and test
       run: ./scripts/health_metrics/pod_test_code_coverage_report.sh --sdk=FirebaseFunctions --platform=${{ matrix.target }}
-    - uses: actions/upload-artifact@v3
+    - uses: actions/upload-artifact@v2
       with:
         name: codecoverage
         path: /Users/runner/*.xcresult
@@ -215,7 +213,7 @@ jobs:
       run: scripts/setup_bundler.sh
     - name: Build and test
       run: ./scripts/health_metrics/pod_test_code_coverage_report.sh --sdk=FirebaseInAppMessaging --platform=${{ matrix.target }}
-    - uses: actions/upload-artifact@v3
+    - uses: actions/upload-artifact@v2
       with:
         name: codecoverage
         path: /Users/runner/*.xcresult
@@ -238,7 +236,7 @@ jobs:
       run: scripts/setup_bundler.sh
     - name: Build and test
       run: ./scripts/health_metrics/pod_test_code_coverage_report.sh --sdk=FirebaseMessaging --platform=${{ matrix.target }}
-    - uses: actions/upload-artifact@v3
+    - uses: actions/upload-artifact@v2
       with:
         name: codecoverage
         path: /Users/runner/*.xcresult
@@ -263,7 +261,7 @@ jobs:
       run: gem install xcpretty
     - name: Build and test
       run: ./scripts/health_metrics/pod_test_code_coverage_report.sh --sdk=FirebasePerformance --platform=${{ matrix.target }}
-    - uses: actions/upload-artifact@v3
+    - uses: actions/upload-artifact@v2
       with:
         name: codecoverage
         path: /Users/runner/*.xcresult
@@ -286,7 +284,7 @@ jobs:
       run: scripts/setup_bundler.sh
     - name: Build and test
       run: ./scripts/health_metrics/pod_test_code_coverage_report.sh --sdk=FirebaseRemoteConfig --platform=${{ matrix.target }}
-    - uses: actions/upload-artifact@v3
+    - uses: actions/upload-artifact@v2
       with:
         name: codecoverage
         path: /Users/runner/*.xcresult
@@ -309,7 +307,7 @@ jobs:
       run: scripts/setup_bundler.sh
     - name: Build and test
       run: ./scripts/health_metrics/pod_test_code_coverage_report.sh --sdk=FirebaseStorage --platform=${{ matrix.target }}
-    - uses: actions/upload-artifact@v3
+    - uses: actions/upload-artifact@v2
       with:
         name: codecoverage
         path: /Users/runner/*.xcresult
@@ -336,7 +334,7 @@ jobs:
           scripts/decrypt_gha_secret.sh scripts/gha-encrypted/metrics_service_access.json.gpg \
           metrics-access.json "${{ env.METRICS_SERVICE_SECRET }}"
           gcloud auth activate-service-account --key-file metrics-access.json
-      - uses: actions/download-artifact@v3
+      - uses: actions/download-artifact@v2
         id: download
         with:
           path: /Users/runner/test

+ 36 - 0
.github/workflows/health-metrics-release.yml

@@ -0,0 +1,36 @@
+name: health-metrics-release
+
+on:
+  release:
+    types: [published]
+
+env:
+  gpg_passphrase: ${{ secrets.GHASecretsGPGPassphrase1 }}
+
+
+concurrency:
+    group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
+    cancel-in-progress: true
+
+jobs:
+  release-diffing:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v4
+      - name: Set up Google Cloud SDK
+        uses: google-github-actions/setup-gcloud@main
+      - name: Authenticate Google Cloud SDK
+        run: |
+          scripts/decrypt_gha_secret.sh \
+            scripts/gha-encrypted/metrics_service_access.json.gpg \
+            service_account.json \
+            "${{ env.gpg_passphrase }}"
+          gcloud auth activate-service-account --key-file service_account.json
+      - name: Produce health metric diff reports
+        uses: FirebaseExtended/github-actions/health-metrics/release-diffing@master
+        with:
+          repo: ${{ github.repository }}
+          ref: ${{ github.ref }}
+          commit: ${{ github.sha }}
+          releaseId: ${{ github.event.release.id }}

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

@@ -29,7 +29,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -75,7 +75,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

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

@@ -31,7 +31,7 @@ jobs:
             xcode: Xcode_14.2
             test-specs: unit,integration
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
             test-specs: unit
     runs-on: ${{ matrix.os }}
     steps:
@@ -69,7 +69,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

+ 8 - 8
.github/workflows/messaging.yml

@@ -48,7 +48,7 @@ jobs:
         scripts/decrypt_gha_secret.sh scripts/gha-encrypted/messaging-sample-plist.gpg \
           FirebaseMessaging/Tests/IntegrationTests/Resources/GoogleService-Info.plist "$plist_secret"
     - name: Xcode
-      run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer
+      run: sudo xcode-select -s /Applications/Xcode_15.1.app/Contents/Developer
     - name: BuildAndTest
       run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/build.sh Messaging all)
 
@@ -65,7 +65,7 @@ jobs:
             xcode: Xcode_14.2
             tests: --test-specs=unit
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
             tests: --skip-tests
     runs-on: ${{ matrix.os }}
     steps:
@@ -89,7 +89,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -130,7 +130,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -192,7 +192,7 @@ jobs:
             xcode: Xcode_14.2
             tests: --test-specs=unit
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
             tests: --skip-tests
     runs-on: ${{ matrix.os }}
     steps:
@@ -226,7 +226,7 @@ jobs:
     - name: Prereqs
       run: scripts/install_prereqs.sh MessagingSample iOS
     - name: Xcode
-      run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer
+      run: sudo xcode-select -s /Applications/Xcode_15.1.app/Contents/Developer
     - name: Build
       run: ([ -z $plist_secret ] || scripts/build.sh MessagingSample iOS)
 
@@ -251,7 +251,7 @@ jobs:
     - name: Prereqs
       run: scripts/install_prereqs.sh SwiftUISample iOS
     - name: Xcode
-      run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer
+      run: sudo xcode-select -s /Applications/Xcode_15.1.app/Contents/Developer
     - name: Build
       run: ([ -z $plist_secret ] || scripts/build.sh SwiftUISample iOS)
 
@@ -276,7 +276,7 @@ jobs:
     - name: Prereqs
       run: scripts/install_prereqs.sh MessagingSampleStandaloneWatchApp watchOS
     - name: Xcode
-      run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer
+      run: sudo xcode-select -s /Applications/Xcode_15.1.app/Contents/Developer
     - name: Build
       run: ([ -z $plist_secret ] || scripts/build.sh MessagingSampleStandaloneWatchApp watchOS)
 

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

@@ -27,7 +27,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -80,7 +80,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

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

@@ -60,7 +60,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -132,7 +132,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

+ 15 - 15
.github/workflows/prerelease.yml

@@ -62,7 +62,7 @@ jobs:
       if: ${{ always() }}
       run: |
         rm -rf oss-bot-access.txt
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v3
       with:
         name: firebase-ios-sdk
         path: |
@@ -80,7 +80,7 @@ jobs:
       targeted_pod: FirebaseCore
     steps:
     - uses: actions/checkout@v4
-    - uses: actions/download-artifact@v4
+    - uses: actions/download-artifact@v3
       with:
         name: firebase-ios-sdk
         path: ${{ env.local_sdk_repo_dir }}
@@ -122,7 +122,7 @@ jobs:
       targeted_pod: ${{ matrix.podspec }}
     steps:
     - uses: actions/checkout@v4
-    - uses: actions/download-artifact@v4
+    - uses: actions/download-artifact@v3
       with:
         name: firebase-ios-sdk
         path: ${{ env.local_sdk_repo_dir }}
@@ -234,7 +234,7 @@ jobs:
       env:
         LEGACY: true
       run: scripts/remove_data.sh config release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_abtesting
@@ -266,7 +266,7 @@ jobs:
       run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Authentication false)
     - name: Remove data before upload
       run: scripts/remove_data.sh authentication release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_auth
@@ -315,7 +315,7 @@ jobs:
       env:
         LEGACY: true
       run: scripts/remove_data.sh crashlytics release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_crashlytics
@@ -351,7 +351,7 @@ jobs:
       run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Database false swift)
     - name: Remove data before upload
       run: scripts/remove_data.sh database release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_database
@@ -393,7 +393,7 @@ jobs:
       run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh DynamicLinks true swift)
     - name: Remove data before upload
       run: scripts/remove_data.sh dynamiclinks release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_dynamiclinks
@@ -428,7 +428,7 @@ jobs:
             scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Firestore false)
     - name: Remove data before upload
       run: scripts/remove_data.sh firestore release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_firestore
@@ -469,7 +469,7 @@ jobs:
             scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Functions true swift)
     - name: Remove data before upload
       run: scripts/remove_data.sh functions release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_functions
@@ -507,7 +507,7 @@ jobs:
             scripts/third_party/travis/retry.sh scripts/test_quickstart.sh InAppMessaging true swift)
     - name: Remove data before upload
       run: scripts/remove_data.sh inappmessaging release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_inappmessaging
@@ -545,7 +545,7 @@ jobs:
             scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Messaging false swift)
     - name: Remove data before upload
       run: scripts/remove_data.sh messaging release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_messaging
@@ -577,7 +577,7 @@ jobs:
       run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Config true)
     - name: Remove data before upload
       run: scripts/remove_data.sh config release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_config
@@ -614,7 +614,7 @@ jobs:
       run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Storage true swift)
     - name: Remove data before upload
       run: scripts/remove_data.sh storage release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_storage
@@ -651,7 +651,7 @@ jobs:
       run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Performance true swift)
     - name: Remove data before upload
       run: scripts/remove_data.sh performance release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_performance

+ 15 - 15
.github/workflows/release.yml

@@ -66,7 +66,7 @@ jobs:
       if: ${{ always() }}
       run: |
         rm -rf bot-access.txt
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v3
       with:
         name: firebase-ios-sdk
         path: |
@@ -84,7 +84,7 @@ jobs:
       targeted_pod: FirebaseCore
     steps:
     - uses: actions/checkout@v4
-    - uses: actions/download-artifact@v4
+    - uses: actions/download-artifact@v3
       with:
         name: firebase-ios-sdk
         path: ${{ env.local_sdk_repo_dir }}
@@ -124,7 +124,7 @@ jobs:
       targeted_pod: ${{ matrix.podspec }}
     steps:
     - uses: actions/checkout@v4
-    - uses: actions/download-artifact@v4
+    - uses: actions/download-artifact@v3
       with:
         name: firebase-ios-sdk
         path: ${{ env.local_sdk_repo_dir }}
@@ -185,7 +185,7 @@ jobs:
       env:
         LEGACY: true
       run: scripts/remove_data.sh config release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_abtesting
@@ -217,7 +217,7 @@ jobs:
       run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Authentication false)
     - name: Remove data before upload
       run: scripts/remove_data.sh authentication release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_auth
@@ -266,7 +266,7 @@ jobs:
       env:
         LEGACY: true
       run: scripts/remove_data.sh crashlytics release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_crashlytics
@@ -302,7 +302,7 @@ jobs:
       run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Database false swift)
     - name: Remove data before upload
       run: scripts/remove_data.sh database release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_database
@@ -344,7 +344,7 @@ jobs:
       run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh DynamicLinks true swift)
     - name: Remove data before upload
       run: scripts/remove_data.sh dynamiclinks release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_dynamiclinks
@@ -379,7 +379,7 @@ jobs:
             scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Firestore false)
     - name: Remove data before upload
       run: scripts/remove_data.sh firestore release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_firestore
@@ -420,7 +420,7 @@ jobs:
             scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Functions true swift)
     - name: Remove data before upload
       run: scripts/remove_data.sh functions release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_functions
@@ -458,7 +458,7 @@ jobs:
             scripts/third_party/travis/retry.sh scripts/test_quickstart.sh InAppMessaging true swift)
     - name: Remove data before upload
       run: scripts/remove_data.sh inappmessaging release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_inappmessaging
@@ -496,7 +496,7 @@ jobs:
             scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Messaging false swift)
     - name: Remove data before upload
       run: scripts/remove_data.sh messaging release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_messaging
@@ -528,7 +528,7 @@ jobs:
       run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Config true)
     - name: Remove data before upload
       run: scripts/remove_data.sh config release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_config
@@ -565,7 +565,7 @@ jobs:
       run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Storage true swift)
     - name: Remove data before upload
       run: scripts/remove_data.sh storage release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_storage
@@ -602,7 +602,7 @@ jobs:
       run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Performance true swift)
     - name: Remove data before upload
       run: scripts/remove_data.sh performance release_testing
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_performance

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

@@ -68,7 +68,7 @@ jobs:
             tests:
           # Flaky tests on CI
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
             tests: --skip-tests
     runs-on: ${{ matrix.os }}
     steps:
@@ -95,7 +95,7 @@ jobs:
             xcode: Xcode_14.2
             test: spm
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
             test: spmbuildonly
     runs-on: ${{ matrix.os }}
     steps:

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

@@ -31,7 +31,7 @@ jobs:
             tests:
           # Flaky tests on CI
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
             tests: --skip-tests
     runs-on: ${{ matrix.os }}
     steps:
@@ -57,7 +57,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

+ 2 - 2
.github/workflows/shared-swift.yml

@@ -29,7 +29,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -52,7 +52,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

+ 1 - 1
.github/workflows/spectesting.yml

@@ -66,7 +66,7 @@ jobs:
         swift run podspecs-tester --git-root "${GITHUB_WORKSPACE}" --podspec ${PODSPEC} --skip-tests --temp-log-dir "${GITHUB_WORKSPACE}/specTestingLogs"
     - name: Upload Failed Testing Logs
       if: failure()
-      uses: actions/upload-artifact@v4
+      uses: actions/upload-artifact@v2
       with:
         name: specTestingLogs
         path: specTestingLogs/*.txt

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

@@ -34,7 +34,7 @@ jobs:
             test: spm
           # The integration tests are slow and flaky on Xcode 15, so just build.
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
             test: spmbuildonly
     runs-on: ${{ matrix.os }}
     steps:
@@ -62,7 +62,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -89,7 +89,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4

+ 13 - 21
.github/workflows/storage.yml

@@ -25,7 +25,7 @@ jobs:
         language: [Swift, ObjC]
         include:
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     env:
       plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
     runs-on: ${{ matrix.os }}
@@ -51,13 +51,8 @@ jobs:
           FirebaseStorage/Tests/Integration/Credentials.swift "$plist_secret"
     - name: Xcode
       run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
-    - uses: nick-fields/retry@v3
-      with:
-        timeout_minutes: 120
-        max_attempts: 3
-        retry_on: error
-        retry_wait_seconds: 120
-        command: ([ -z $plist_secret ] || scripts/build.sh Storage${{ matrix.language }} all)
+    - name: BuildAndTest # can be replaced with pod lib lint with CocoaPods 1.10
+      run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/build.sh Storage${{ matrix.language }} all)
 
   spm:
     # Don't run on private repo unless it is a PR.
@@ -68,7 +63,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -93,7 +88,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
@@ -112,18 +107,13 @@ jobs:
   quickstart:
     # Don't run on private repo unless it is a PR.
     if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request'
-    # TODO: See #12399 and restore Objective-C testing for Xcode 15 if GHA is fixed.
     strategy:
       matrix:
         include:
           - os: macos-12
             xcode: Xcode_14.2
-          - swift: swift
-            os: macos-13
-            xcode: Xcode_15.2
-          - swift: swift
-            os: macos-13
-            xcode: Xcode_15.2
+          - os: macos-13
+            xcode: Xcode_15.1
     env:
       plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
       signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
@@ -139,8 +129,10 @@ jobs:
           quickstart-ios/storage/GoogleService-Info.plist "$plist_secret"
     - name: Xcode
       run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
-    - name: Test quickstart
-      run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Storage true ${{ matrix.swift }})
+    - name: Test objc quickstart
+      run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Storage true)
+    - name: Test swift quickstart
+      run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Storage true swift)
 
   quickstart-ftl-cron-only:
     # Don't run on private repo.
@@ -184,7 +176,7 @@ jobs:
             xcode: Xcode_14.2
             tests: --skip-tests
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
             tests: --test-specs=unit
     runs-on: ${{ matrix.os }}
     steps:
@@ -212,7 +204,7 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     needs: pod-lib-lint
     steps:

+ 56 - 45
.github/workflows/zip.yml

@@ -44,7 +44,7 @@ jobs:
          mkdir -p release_zip_dir
          sh -x scripts/build_zip.sh release_zip_dir \
            "${{ github.event.inputs.custom_spec_repos || 'https://github.com/firebase/SpecsStaging.git' }}"
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v1
       with:
         name: Firebase-release-zip-zip
         # Zip the entire output directory since the builder adds subdirectories we don't know the
@@ -85,7 +85,7 @@ jobs:
          sh -x scripts/build_zip.sh \
            zip_output_dir "${{ github.event.inputs.custom_spec_repos || 'https://github.com/firebase/SpecsStaging.git,https://github.com/firebase/SpecsDev.git' }}" \
            build-head
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v1
       with:
         name: Firebase-actions-dir
         # Zip the entire output directory since the builder adds subdirectories we don't know the
@@ -99,6 +99,7 @@ jobs:
     env:
       plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
       signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
+      FRAMEWORK_DIR: "Firebase-actions-dir"
       SDK: "ABTesting"
     strategy:
       matrix:
@@ -107,12 +108,12 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
     - name: Get framework dir
-      uses: actions/download-artifact@v4
+      uses: actions/download-artifact@v1
       with:
         name: Firebase-actions-dir
     - uses: ruby/setup-ruby@v1
@@ -121,7 +122,7 @@ jobs:
     - name: Move frameworks
       run: |
         mkdir -p "${HOME}"/ios_frameworks/
-        find "${GITHUB_WORKSPACE}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
+        find "${GITHUB_WORKSPACE}/${FRAMEWORK_DIR}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
     - uses: actions/checkout@v4
     - name: Xcode
       run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
@@ -147,7 +148,7 @@ jobs:
         LEGACY: true
       if: ${{ failure() }}
       run: scripts/remove_data.sh abtesting
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_abtesting
@@ -160,6 +161,7 @@ jobs:
     env:
       plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
       signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
+      FRAMEWORK_DIR: "Firebase-actions-dir"
       SDK:  "Authentication"
     strategy:
       matrix:
@@ -168,12 +170,12 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
     - name: Get framework dir
-      uses: actions/download-artifact@v4
+      uses: actions/download-artifact@v1
       with:
         name: Firebase-actions-dir
     - uses: ruby/setup-ruby@v1
@@ -182,7 +184,7 @@ jobs:
     - name: Move frameworks
       run: |
         mkdir -p "${HOME}"/ios_frameworks/
-        find "${GITHUB_WORKSPACE}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
+        find "${GITHUB_WORKSPACE}/${FRAMEWORK_DIR}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
     - name: Xcode
       run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
     - name: Setup Swift Quickstart
@@ -200,7 +202,7 @@ jobs:
     - name: Remove data before upload
       if: ${{ failure() }}
       run: scripts/remove_data.sh authentiation
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_auth
@@ -213,6 +215,7 @@ jobs:
     env:
       plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
       signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
+      FRAMEWORK_DIR: "Firebase-actions-dir"
       SDK: "Config"
     strategy:
       matrix:
@@ -221,12 +224,12 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
     - name: Get framework dir
-      uses: actions/download-artifact@v4
+      uses: actions/download-artifact@v1
       with:
         name: Firebase-actions-dir
     - uses: ruby/setup-ruby@v1
@@ -235,7 +238,7 @@ jobs:
     - name: Move frameworks
       run: |
         mkdir -p "${HOME}"/ios_frameworks/
-        find "${GITHUB_WORKSPACE}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
+        find "${GITHUB_WORKSPACE}/${FRAMEWORK_DIR}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
     - name: Xcode
       run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
     - name: Setup Swift Quickstart
@@ -251,7 +254,7 @@ jobs:
     - name: Remove data before upload
       if: ${{ failure() }}
       run: scripts/remove_data.sh config
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_config
@@ -264,6 +267,7 @@ jobs:
     env:
       plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
       signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
+      FRAMEWORK_DIR: "Firebase-actions-dir"
       SDK: "Crashlytics"
     strategy:
       matrix:
@@ -272,12 +276,12 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
     - name: Get framework dir
-      uses: actions/download-artifact@v4
+      uses: actions/download-artifact@v1
       with:
         name: Firebase-actions-dir
     - uses: ruby/setup-ruby@v1
@@ -286,7 +290,7 @@ jobs:
     - name: Move frameworks
       run: |
         mkdir -p "${HOME}"/ios_frameworks/
-        find "${GITHUB_WORKSPACE}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
+        find "${GITHUB_WORKSPACE}/${FRAMEWORK_DIR}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
     - uses: actions/checkout@v4
     - name: Xcode
       run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
@@ -325,7 +329,7 @@ jobs:
         LEGACY: true
       if: ${{ failure() }}
       run: scripts/remove_data.sh crashlytics
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_crashlytics
@@ -338,6 +342,7 @@ jobs:
     env:
       plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
       signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
+      FRAMEWORK_DIR: "Firebase-actions-dir"
       SDK: "Database"
     strategy:
       matrix:
@@ -347,12 +352,12 @@ jobs:
             xcode: Xcode_14.2
           # TODO: Building FirebaseUI fails on Xcode 15 because it needs to sign the resources.
           # - os: macos-13
-          #   xcode: Xcode_15.2
+          #   xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
     - name: Get framework dir
-      uses: actions/download-artifact@v4
+      uses: actions/download-artifact@v1
       with:
         name: Firebase-actions-dir
     - uses: ruby/setup-ruby@v1
@@ -361,7 +366,7 @@ jobs:
     - name: Move frameworks
       run: |
         mkdir -p "${HOME}"/ios_frameworks/
-        find "${GITHUB_WORKSPACE}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
+        find "${GITHUB_WORKSPACE}/${FRAMEWORK_DIR}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
     - uses: actions/checkout@v4
     - name: Xcode
       run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
@@ -381,7 +386,7 @@ jobs:
     - name: Remove data before upload
       if: ${{ failure() }}
       run: scripts/remove_data.sh database
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts database
@@ -394,6 +399,7 @@ jobs:
     env:
       plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
       signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
+      FRAMEWORK_DIR: "Firebase-actions-dir"
       SDK: "DynamicLinks"
     strategy:
       matrix:
@@ -402,12 +408,12 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
     - name: Get framework dir
-      uses: actions/download-artifact@v4
+      uses: actions/download-artifact@v1
       with:
         name: Firebase-actions-dir
     - uses: ruby/setup-ruby@v1
@@ -416,7 +422,7 @@ jobs:
     - name: Move frameworks
       run: |
         mkdir -p "${HOME}"/ios_frameworks/
-        find "${GITHUB_WORKSPACE}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
+        find "${GITHUB_WORKSPACE}/${FRAMEWORK_DIR}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
     - name: Setup Objc Quickstart
       run: SAMPLE="$SDK" TARGET="${SDK}Example" scripts/setup_quickstart_framework.sh \
                                                "${HOME}"/ios_frameworks/Firebase/FirebaseDynamicLinks/* \
@@ -440,7 +446,7 @@ jobs:
     - name: Remove data before upload
       if: ${{ failure() }}
       run: scripts/remove_data.sh dynamiclinks
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_dynamiclinks
@@ -453,6 +459,7 @@ jobs:
     env:
       plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
       signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
+      FRAMEWORK_DIR: "Firebase-actions-dir"
       SDK: "Firestore"
     strategy:
       matrix:
@@ -462,12 +469,12 @@ jobs:
             xcode: Xcode_14.2
           # TODO: Building FirebaseUI fails on Xcode 15 because it needs to sign the resources.
           # - os: macos-13
-          #   xcode: Xcode_15.2
+          #   xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
     - name: Get framework dir
-      uses: actions/download-artifact@v4
+      uses: actions/download-artifact@v1
       with:
         name: Firebase-actions-dir
     - uses: ruby/setup-ruby@v1
@@ -476,7 +483,7 @@ jobs:
     - name: Move frameworks
       run: |
         mkdir -p "${HOME}"/ios_frameworks/
-        find "${GITHUB_WORKSPACE}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
+        find "${GITHUB_WORKSPACE}/${FRAMEWORK_DIR}" -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 \
@@ -494,7 +501,7 @@ jobs:
     - name: Remove data before upload
       if: ${{ failure() }}
       run: scripts/remove_data.sh firestore
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_firestore
@@ -505,6 +512,7 @@ jobs:
     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:
+      FRAMEWORK_DIR: "Firebase-actions-dir"
       FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1
     runs-on: macos-13
     steps:
@@ -512,7 +520,7 @@ jobs:
         run: sudo xcode-select -s /Applications/Xcode_14.1.app/Contents/Developer
       - uses: actions/checkout@v4
       - name: Get framework dir
-        uses: actions/download-artifact@v4
+        uses: actions/download-artifact@v1
         with:
           name: Firebase-actions-dir
       - uses: ruby/setup-ruby@v1
@@ -523,7 +531,7 @@ jobs:
       - name: Move frameworks
         run: |
           mkdir -p "${HOME}"/ios_frameworks/
-          find "${GITHUB_WORKSPACE}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
+          find "${GITHUB_WORKSPACE}/${FRAMEWORK_DIR}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
       - uses: actions/checkout@v4
       - name: Check linked Firestore.xcframework for unlinked symbols.
         run: |
@@ -538,6 +546,7 @@ jobs:
     env:
       plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
       signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
+      FRAMEWORK_DIR: "Firebase-actions-dir"
       SDK: "InAppMessaging"
     strategy:
       matrix:
@@ -546,12 +555,12 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
     - name: Get framework dir
-      uses: actions/download-artifact@v4
+      uses: actions/download-artifact@v1
       with:
         name: Firebase-actions-dir
     - uses: ruby/setup-ruby@v1
@@ -560,7 +569,7 @@ jobs:
     - name: Move frameworks
       run: |
         mkdir -p "${HOME}"/ios_frameworks/
-        find "${GITHUB_WORKSPACE}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
+        find "${GITHUB_WORKSPACE}/${FRAMEWORK_DIR}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
     - uses: actions/checkout@v4
     - name: Setup quickstart
       run: SAMPLE="$SDK" TARGET="${SDK}Example" scripts/setup_quickstart_framework.sh \
@@ -581,10 +590,10 @@ jobs:
     - name: Remove data before upload
       if: ${{ failure() }}
       run: scripts/remove_data.sh inappmessaging
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
-        name: quickstart_artifacts_inappmessaging
+        name: quickstart_artifacts_ihappmessaging
         path: quickstart-ios/
 
   quickstart_framework_messaging:
@@ -594,6 +603,7 @@ jobs:
     env:
       plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
       signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
+      FRAMEWORK_DIR: "Firebase-actions-dir"
       SDK: "Messaging"
     strategy:
       matrix:
@@ -602,12 +612,12 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
     - name: Get framework dir
-      uses: actions/download-artifact@v4
+      uses: actions/download-artifact@v1
       with:
         name: Firebase-actions-dir
     - uses: ruby/setup-ruby@v1
@@ -616,7 +626,7 @@ jobs:
     - name: Move frameworks
       run: |
         mkdir -p "${HOME}"/ios_frameworks/
-        find "${GITHUB_WORKSPACE}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
+        find "${GITHUB_WORKSPACE}/${FRAMEWORK_DIR}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
     - uses: actions/checkout@v4
     - name: Setup quickstart
       run: SAMPLE="$SDK" TARGET="${SDK}Example" scripts/setup_quickstart_framework.sh \
@@ -636,7 +646,7 @@ jobs:
     - name: Remove data before upload
       if: ${{ failure() }}
       run: scripts/remove_data.sh messaging
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_messaging
@@ -649,6 +659,7 @@ jobs:
     env:
       plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
       signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
+      FRAMEWORK_DIR: "Firebase-actions-dir"
       SDK: "Storage"
     strategy:
       matrix:
@@ -657,12 +668,12 @@ jobs:
           - os: macos-12
             xcode: Xcode_14.2
           - os: macos-13
-            xcode: Xcode_15.2
+            xcode: Xcode_15.1
     runs-on: ${{ matrix.os }}
     steps:
     - uses: actions/checkout@v4
     - name: Get framework dir
-      uses: actions/download-artifact@v4
+      uses: actions/download-artifact@v1
       with:
         name: Firebase-actions-dir
     - uses: ruby/setup-ruby@v1
@@ -671,7 +682,7 @@ jobs:
     - name: Move frameworks
       run: |
         mkdir -p "${HOME}"/ios_frameworks/
-        find "${GITHUB_WORKSPACE}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
+        find "${GITHUB_WORKSPACE}/${FRAMEWORK_DIR}" -name "Firebase*latest.zip" -exec unzip -d "${HOME}"/ios_frameworks/ {} +
     - uses: actions/checkout@v4
     - name: Setup quickstart
       env:
@@ -702,7 +713,7 @@ jobs:
         LEGACY: true
       if: ${{ failure() }}
       run: scripts/remove_data.sh storage
-    - uses: actions/upload-artifact@v4
+    - uses: actions/upload-artifact@v2
       if: ${{ failure() }}
       with:
         name: quickstart_artifacts_storage

+ 2 - 2
CONTRIBUTING.md

@@ -132,7 +132,7 @@ To develop Firebase software, **install**:
    To install [clang-format] and [mint] using [Homebrew]:
 
     ```console
-    brew install clang-format@18
+    brew install clang-format@17
     brew install mint
     ```
 
@@ -187,7 +187,7 @@ To learn more about running tests with Swift Package Manager, visit the
 #### **[CocoaPods]**
 
 [CocoaPods] is another popular dependency manager used in Apple development.
-Firebase supports development with CocoaPods 1.12.0 (or later). If you choose to
+Firebase supports development with CocoaPods 1.10.0 (or later). If you choose to
 develop using CocoaPods, it's recommend to use
 [`cocoapods-generate`][cocoapods-generate], a plugin that generates a
 [workspace] from a [podspec]. This plugin allows you to quickly generate a

+ 0 - 2
CoreOnly/NOTICES

@@ -18,7 +18,6 @@ FirebaseMessaging
 FirebaseMessagingInterop
 FirebasePerformance
 FirebaseRemoteConfig
-FirebaseRemoteConfigInterop
 FirebaseSessions
 FirebaseStorage
 GTMSessionFetcher
@@ -254,7 +253,6 @@ record keeping.)
   27287199
   27287880
   27287883
-  263291445
 
   OpenSSL License
   ---------------

+ 0 - 7
CoreOnly/Sources/Firebase.h

@@ -32,13 +32,6 @@
 
   #if __has_include(<FirebaseAuth/FirebaseAuth.h>)
     #import <FirebaseAuth/FirebaseAuth.h>
-    #if __has_include("FirebaseAuth-umbrella.h")
-      #if __has_include(<UIKit/UIKit.h>)
-        #import <UIKit/UIKit.h>
-      #endif
-      #import <FirebaseAuthInterop/FIRAuthInterop.h>
-      #import <FirebaseAuth/FirebaseAuth-Swift.h>
-    #endif
   #endif
 
   #if __has_include(<FirebaseCrashlytics/FirebaseCrashlytics.h>)

+ 0 - 1
CoreOnly/Tests/FirebasePodTest/Podfile

@@ -33,7 +33,6 @@ target 'FirebasePodTest' do
   pod 'FirebaseAppCheckInterop', :path => '../../../'
   pod 'FirebaseAuthInterop', :path => '../../../'
   pod 'FirebaseMessagingInterop', :path => '../../../'
-  pod 'FirebaseRemoteConfigInterop', :path => '../../../'
   pod 'FirebaseCoreInternal', :path => '../../../'
   pod 'FirebaseCoreExtension', :path => '../../../'
   pod 'FirebaseSessions', :path => '../../../'

+ 0 - 9
Crashlytics/CHANGELOG.md

@@ -1,12 +1,3 @@
-# 10.23.0
-- [added] Updated upload-symbols to 13.7 with VisionPro build phase support. (#12306)
-- [changed] Added support for Crashlytics to report metadata about Remote Config keys and values.
-
-# 10.22.0
-- [fixed] Force validation or rotation of FIDs for FirebaseSessions.
-- [changed] Removed calls to statfs in the Crashlytics SDK to comply with Apple Privacy Manifests. This change removes support for collecting Disk Space Free in Crashlytics reports.
-- [fixed] Fixed FirebaseSessions crash on startup that occurs in release mode in Xcode 15.3 and other build configurations. (#11403)
-
 # 10.16.0
 - [fixed] Fixed a memory leak regression when generating session events (#11725).
 

+ 7 - 5
Crashlytics/Crashlytics/Components/FIRCLSHost.m

@@ -15,6 +15,7 @@
 #include "Crashlytics/Crashlytics/Components/FIRCLSHost.h"
 
 #include <mach/mach.h>
+#include <sys/mount.h>
 #include <sys/sysctl.h>
 
 #import "Crashlytics/Crashlytics/Components/FIRCLSApplication.h"
@@ -179,15 +180,16 @@ bool FIRCLSHostRecord(FIRCLSFile* file) {
 }
 
 void FIRCLSHostWriteDiskUsage(FIRCLSFile* file) {
+  struct statfs tStats;
+
   FIRCLSFileWriteSectionStart(file, "storage");
 
   FIRCLSFileWriteHashStart(file);
 
-  // Due to Apple Privacy Manifests, Crashlytics is not collecting
-  // disk space using statfs. When we find a solution, we can update
-  // this to actually track disk space correctly.
-  FIRCLSFileWriteHashEntryUint64(file, "free", 0);
-  FIRCLSFileWriteHashEntryUint64(file, "total", 0);
+  if (statfs(_firclsContext.readonly->host.documentDirectoryPath, &tStats) == 0) {
+    FIRCLSFileWriteHashEntryUint64(file, "free", tStats.f_bavail * tStats.f_bsize);
+    FIRCLSFileWriteHashEntryUint64(file, "total", tStats.f_blocks * tStats.f_bsize);
+  }
 
   FIRCLSFileWriteHashEnd(file);
 

+ 1 - 3
Crashlytics/Crashlytics/Components/FIRCLSUserLogging.h

@@ -81,9 +81,7 @@ void FIRCLSUserLoggingRecordUserKeysAndValues(NSDictionary* keysAndValues);
 void FIRCLSUserLoggingRecordInternalKeyValue(NSString* key, id value);
 void FIRCLSUserLoggingWriteInternalKeyValue(NSString* key, NSString* value);
 
-void FIRCLSUserLoggingRecordError(NSError* error,
-                                  NSDictionary<NSString*, id>* additionalUserInfo,
-                                  NSString* rolloutsInfoJSON);
+void FIRCLSUserLoggingRecordError(NSError* error, NSDictionary<NSString*, id>* additionalUserInfo);
 
 NSDictionary* FIRCLSUserLoggingGetCompactedKVEntries(FIRCLSUserLoggingKVStorage* storage,
                                                      bool decodeHex);

+ 3 - 13
Crashlytics/Crashlytics/Components/FIRCLSUserLogging.m

@@ -355,8 +355,7 @@ static void FIRCLSUserLoggingWriteError(FIRCLSFile *file,
                                         NSError *error,
                                         NSDictionary<NSString *, id> *additionalUserInfo,
                                         NSArray *addresses,
-                                        uint64_t timestamp,
-                                        NSString *rolloutsInfoJSON) {
+                                        uint64_t timestamp) {
   FIRCLSFileWriteSectionStart(file, "error");
   FIRCLSFileWriteHashStart(file);
   FIRCLSFileWriteHashEntryHexEncodedString(file, "domain", [[error domain] UTF8String]);
@@ -375,20 +374,12 @@ static void FIRCLSUserLoggingWriteError(FIRCLSFile *file,
   FIRCLSUserLoggingRecordErrorUserInfo(file, "info", [error userInfo]);
   FIRCLSUserLoggingRecordErrorUserInfo(file, "extra_info", additionalUserInfo);
 
-  // rollouts
-  if (rolloutsInfoJSON) {
-    FIRCLSFileWriteHashKey(file, "rollouts");
-    FIRCLSFileWriteStringUnquoted(file, [rolloutsInfoJSON UTF8String]);
-    FIRCLSFileWriteHashEnd(file);
-  }
-
   FIRCLSFileWriteHashEnd(file);
   FIRCLSFileWriteSectionEnd(file);
 }
 
 void FIRCLSUserLoggingRecordError(NSError *error,
-                                  NSDictionary<NSString *, id> *additionalUserInfo,
-                                  NSString *rolloutsInfoJSON) {
+                                  NSDictionary<NSString *, id> *additionalUserInfo) {
   if (!error) {
     return;
   }
@@ -405,8 +396,7 @@ void FIRCLSUserLoggingRecordError(NSError *error,
   FIRCLSUserLoggingWriteAndCheckABFiles(
       &_firclsContext.readonly->logging.errorStorage,
       &_firclsContext.writable->logging.activeErrorLogPath, ^(FIRCLSFile *file) {
-        FIRCLSUserLoggingWriteError(file, error, additionalUserInfo, addresses, timestamp,
-                                    rolloutsInfoJSON);
+        FIRCLSUserLoggingWriteError(file, error, additionalUserInfo, addresses, timestamp);
       });
 }
 

+ 0 - 1
Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.h

@@ -28,7 +28,6 @@
 @property(nonatomic, readonly) NSOperationQueue *operationQueue;
 @property(nonatomic, readonly) FIRCLSFileManager *fileManager;
 @property(nonatomic, copy) NSString *fiid;
-@property(nonatomic, copy) NSString *authToken;
 
 - (void)prepareAndSubmitReport:(FIRCLSInternalReport *)report
            dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken

+ 2 - 5
Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.m

@@ -95,10 +95,8 @@
         // urgent mode. Since urgent mode happens when the app is in a crash loop,
         // we can safely assume users aren't rotating their FIID, so this can be skipped.
         if (!urgent) {
-          [self.installIDModel regenerateInstallIDIfNeededWithBlock:^(
-                                   NSString *_Nonnull newFIID, NSString *_Nonnull authToken) {
+          [self.installIDModel regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull newFIID) {
             self.fiid = [newFIID copy];
-            self.authToken = [authToken copy];
           }];
         } else {
           FIRCLSWarningLog(
@@ -188,8 +186,7 @@
   FIRCLSReportAdapter *adapter = [[FIRCLSReportAdapter alloc] initWithPath:path
                                                                googleAppId:self.googleAppID
                                                             installIDModel:self.installIDModel
-                                                                      fiid:self.fiid
-                                                                 authToken:self.authToken];
+                                                                      fiid:self.fiid];
 
   GDTCOREvent *event = [self.googleTransport eventForTransport];
   event.dataObject = adapter;

+ 0 - 30
Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.h

@@ -1,30 +0,0 @@
-// Copyright 2024 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#if SWIFT_PACKAGE
-@import FirebaseCrashlyticsSwift;
-#else  // Swift Package Manager
-#import <FirebaseCrashlytics/FirebaseCrashlytics-Swift.h>
-#endif  // CocoaPods
-
-@interface FIRCLSRolloutsPersistenceManager : NSObject <FIRCLSPersistenceLog>
-
-- (instancetype _Nullable)initWithFileManager:(FIRCLSFileManager *_Nonnull)fileManager;
-- (instancetype _Nonnull)init NS_UNAVAILABLE;
-+ (instancetype _Nonnull)new NS_UNAVAILABLE;
-
-- (void)updateRolloutsStateToPersistenceWithRollouts:(NSData *_Nonnull)rollouts
-                                            reportID:(NSString *_Nonnull)reportID;
-- (void)debugLogWithMessage:(NSString *_Nonnull)message;
-@end

+ 0 - 67
Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.m

@@ -1,67 +0,0 @@
-// Copyright 2024 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import <Foundation/Foundation.h>
-#include "Crashlytics/Crashlytics/Components/FIRCLSGlobals.h"
-#include "Crashlytics/Crashlytics/Components/FIRCLSUserLogging.h"
-#import "Crashlytics/Crashlytics/Helpers/FIRCLSLogger.h"
-#import "Crashlytics/Crashlytics/Models/FIRCLSFileManager.h"
-#import "Crashlytics/Crashlytics/Models/FIRCLSInternalReport.h"
-
-#if SWIFT_PACKAGE
-@import FirebaseCrashlyticsSwift;
-#else  // Swift Package Manager
-#import <FirebaseCrashlytics/FirebaseCrashlytics-Swift.h>
-#endif  // CocoaPods
-
-@interface FIRCLSRolloutsPersistenceManager : NSObject <FIRCLSPersistenceLog>
-@property(nonatomic, readonly) FIRCLSFileManager *fileManager;
-@end
-
-@implementation FIRCLSRolloutsPersistenceManager
-- (instancetype)initWithFileManager:(FIRCLSFileManager *)fileManager {
-  self = [super init];
-  if (!self) {
-    return nil;
-  }
-  _fileManager = fileManager;
-  return self;
-}
-
-- (void)updateRolloutsStateToPersistenceWithRollouts:(NSData *_Nonnull)rollouts
-                                            reportID:(NSString *_Nonnull)reportID {
-  NSString *rolloutsPath = [[[_fileManager activePath] stringByAppendingPathComponent:reportID]
-      stringByAppendingPathComponent:FIRCLSReportRolloutsFile];
-  if (![_fileManager fileExistsAtPath:rolloutsPath]) {
-    if (![_fileManager createFileAtPath:rolloutsPath contents:nil attributes:nil]) {
-      FIRCLSDebugLog(@"Could not create rollouts.clsrecord file. Error was code: %d - message: %s",
-                     errno, strerror(errno));
-    }
-  }
-
-  NSFileHandle *rolloutsFile = [NSFileHandle fileHandleForUpdatingAtPath:rolloutsPath];
-
-  dispatch_sync(FIRCLSGetLoggingQueue(), ^{
-    [rolloutsFile seekToEndOfFile];
-    [rolloutsFile writeData:rollouts];
-    NSData *newLineData = [@"\n" dataUsingEncoding:NSUTF8StringEncoding];
-    [rolloutsFile writeData:newLineData];
-  });
-}
-
-- (void)debugLogWithMessage:(NSString *_Nonnull)message {
-  FIRCLSDebugLog(message);
-}
-
-@end

+ 6 - 45
Crashlytics/Crashlytics/FIRCrashlytics.m

@@ -31,7 +31,6 @@
 #import "Crashlytics/Crashlytics/Helpers/FIRCLSDefines.h"
 #include "Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h"
 #include "Crashlytics/Crashlytics/Helpers/FIRCLSUtility.h"
-#import "Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.h"
 #import "Crashlytics/Crashlytics/Models/FIRCLSFileManager.h"
 #import "Crashlytics/Crashlytics/Models/FIRCLSSettings.h"
 #import "Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.h"
@@ -48,7 +47,6 @@
 #import "Crashlytics/Crashlytics/Controllers/FIRCLSNotificationManager.h"
 #import "Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.h"
 #import "Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.h"
-#import "Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.h"
 #import "Crashlytics/Crashlytics/Private/FIRCLSExistingReportManager_Private.h"
 #import "Crashlytics/Crashlytics/Private/FIRCLSOnDemandModel_Private.h"
 #import "Crashlytics/Crashlytics/Private/FIRExceptionModel_Private.h"
@@ -60,12 +58,6 @@
 #import <GoogleDataTransport/GoogleDataTransport.h>
 
 @import FirebaseSessions;
-@import FirebaseRemoteConfigInterop;
-#if SWIFT_PACKAGE
-@import FirebaseCrashlyticsSwift;
-#else  // Swift Package Manager
-#import <FirebaseCrashlytics/FirebaseCrashlytics-Swift.h>
-#endif  // CocoaPods
 
 #if TARGET_OS_IPHONE
 #import <UIKit/UIKit.h>
@@ -84,10 +76,7 @@ NSString *const FIRCLSGoogleTransportMappingID = @"1206";
 @protocol FIRCrashlyticsInstanceProvider <NSObject>
 @end
 
-@interface FIRCrashlytics () <FIRLibrary,
-                              FIRCrashlyticsInstanceProvider,
-                              FIRSessionsSubscriber,
-                              FIRRolloutsStateSubscriber>
+@interface FIRCrashlytics () <FIRLibrary, FIRCrashlyticsInstanceProvider, FIRSessionsSubscriber>
 
 @property(nonatomic) BOOL didPreviouslyCrash;
 @property(nonatomic, copy) NSString *googleAppID;
@@ -102,8 +91,6 @@ NSString *const FIRCLSGoogleTransportMappingID = @"1206";
 
 @property(nonatomic, strong) FIRCLSAnalyticsManager *analyticsManager;
 
-@property(nonatomic, strong) FIRCLSRemoteConfigManager *remoteConfigManager;
-
 // Dependencies common to each of the Controllers
 @property(nonatomic, strong) FIRCLSManagerData *managerData;
 
@@ -117,8 +104,7 @@ NSString *const FIRCLSGoogleTransportMappingID = @"1206";
                     appInfo:(NSDictionary *)appInfo
               installations:(FIRInstallations *)installations
                   analytics:(id<FIRAnalyticsInterop>)analytics
-                   sessions:(id<FIRSessionsProvider>)sessions
-               remoteConfig:(id<FIRRemoteConfigInterop>)remoteConfig {
+                   sessions:(id<FIRSessionsProvider>)sessions {
   self = [super init];
 
   if (self) {
@@ -203,19 +189,8 @@ NSString *const FIRCLSGoogleTransportMappingID = @"1206";
     }] catch:^void(NSError *error) {
       FIRCLSErrorLog(@"Crash reporting failed to initialize with error: %@", error);
     }];
-
-    // RemoteConfig subscription should be made after session report directory created.
-    if (remoteConfig) {
-      FIRCLSDebugLog(@"Registering RemoteConfig SDK subscription for rollouts data");
-
-      FIRCLSRolloutsPersistenceManager *persistenceManager =
-          [[FIRCLSRolloutsPersistenceManager alloc] initWithFileManager:_fileManager];
-      _remoteConfigManager =
-          [[FIRCLSRemoteConfigManager alloc] initWithRemoteConfig:remoteConfig
-                                              persistenceDelegate:persistenceManager];
-          [remoteConfig registerRolloutsStateSubscriber:self for:FIRRemoteConfigConstants.FIRNamespaceGoogleMobilePlatform];
-    }
   }
+
   return self;
 }
 
@@ -240,7 +215,6 @@ NSString *const FIRCLSGoogleTransportMappingID = @"1206";
 
     id<FIRAnalyticsInterop> analytics = FIR_COMPONENT(FIRAnalyticsInterop, container);
     id<FIRSessionsProvider> sessions = FIR_COMPONENT(FIRSessionsProvider, container);
-    id<FIRRemoteConfigInterop> remoteConfig = FIR_COMPONENT(FIRRemoteConfigInterop, container);
 
     FIRInstallations *installations = [FIRInstallations installationsWithApp:container.app];
 
@@ -250,8 +224,7 @@ NSString *const FIRCLSGoogleTransportMappingID = @"1206";
                                        appInfo:NSBundle.mainBundle.infoDictionary
                                  installations:installations
                                      analytics:analytics
-                                      sessions:sessions
-                                  remoteConfig:remoteConfig];
+                                      sessions:sessions];
   };
 
   FIRComponent *component =
@@ -404,13 +377,11 @@ NSString *const FIRCLSGoogleTransportMappingID = @"1206";
 }
 
 - (void)recordError:(NSError *)error userInfo:(NSDictionary<NSString *, id> *)userInfo {
-  NSString *rolloutsInfoJSON = [_remoteConfigManager getRolloutAssignmentsEncodedJsonString];
-  FIRCLSUserLoggingRecordError(error, userInfo, rolloutsInfoJSON);
+  FIRCLSUserLoggingRecordError(error, userInfo);
 }
 
 - (void)recordExceptionModel:(FIRExceptionModel *)exceptionModel {
-  NSString *rolloutsInfoJSON = [_remoteConfigManager getRolloutAssignmentsEncodedJsonString];
-  FIRCLSExceptionRecordModel(exceptionModel, rolloutsInfoJSON);
+  FIRCLSExceptionRecordModel(exceptionModel);
 }
 
 - (void)recordOnDemandExceptionModel:(FIRExceptionModel *)exceptionModel {
@@ -436,14 +407,4 @@ NSString *const FIRCLSGoogleTransportMappingID = @"1206";
   return FIRSessionsSubscriberNameCrashlytics;
 }
 
-#pragma mark - FIRRolloutsStateSubscriber
-- (void)rolloutsStateDidChange:(FIRRolloutsState *_Nonnull)rolloutsState {
-  if (!_remoteConfigManager) {
-    FIRCLSDebugLog(@"rolloutsStateDidChange gets called without init the rc manager.");
-    return;
-  }
-  NSString *currentReportID = _managerData.executionIDModel.executionID;
-  [_remoteConfigManager updateRolloutsStateWithRolloutsState:rolloutsState
-                                                    reportID:currentReportID];
-}
 @end

+ 2 - 3
Crashlytics/Crashlytics/Handlers/FIRCLSException.h

@@ -60,7 +60,7 @@ void FIRCLSExceptionRaiseTestObjCException(void) __attribute((noreturn));
 void FIRCLSExceptionRaiseTestCppException(void) __attribute((noreturn));
 
 #ifdef __OBJC__
-void FIRCLSExceptionRecordModel(FIRExceptionModel* exceptionModel, NSString* rolloutsInfoJSON);
+void FIRCLSExceptionRecordModel(FIRExceptionModel* exceptionModel);
 NSString* FIRCLSExceptionRecordOnDemandModel(FIRExceptionModel* exceptionModel,
                                              int previousRecordedOnDemandExceptions,
                                              int previousDroppedOnDemandExceptions);
@@ -68,8 +68,7 @@ void FIRCLSExceptionRecordNSException(NSException* exception);
 void FIRCLSExceptionRecord(FIRCLSExceptionType type,
                            const char* name,
                            const char* reason,
-                           NSArray<FIRStackFrame*>* frames,
-                           NSString* rolloutsInfoJSON);
+                           NSArray<FIRStackFrame*>* frames);
 NSString* FIRCLSExceptionRecordOnDemand(FIRCLSExceptionType type,
                                         const char* name,
                                         const char* reason,

+ 15 - 26
Crashlytics/Crashlytics/Handlers/FIRCLSException.mm

@@ -82,11 +82,11 @@ void FIRCLSExceptionInitialize(FIRCLSExceptionReadOnlyContext *roContext,
   rwContext->customExceptionCount = 0;
 }
 
-void FIRCLSExceptionRecordModel(FIRExceptionModel *exceptionModel, NSString *rolloutsInfoJSON) {
+void FIRCLSExceptionRecordModel(FIRExceptionModel *exceptionModel) {
   const char *name = [[exceptionModel.name copy] UTF8String];
   const char *reason = [[exceptionModel.reason copy] UTF8String] ?: "";
-  FIRCLSExceptionRecord(FIRCLSExceptionTypeCustom, name, reason, [exceptionModel.stackTrace copy],
-                        rolloutsInfoJSON);
+
+  FIRCLSExceptionRecord(FIRCLSExceptionTypeCustom, name, reason, [exceptionModel.stackTrace copy]);
 }
 
 NSString *FIRCLSExceptionRecordOnDemandModel(FIRExceptionModel *exceptionModel,
@@ -122,7 +122,7 @@ void FIRCLSExceptionRecordNSException(NSException *exception) {
   }
 
   FIRCLSExceptionRecord(FIRCLSExceptionTypeObjectiveC, [name UTF8String], [reason UTF8String],
-                        frames, nil);
+                        frames);
 }
 
 static void FIRCLSExceptionRecordFrame(FIRCLSFile *file, FIRStackFrame *frame) {
@@ -175,8 +175,7 @@ void FIRCLSExceptionWrite(FIRCLSFile *file,
                           FIRCLSExceptionType type,
                           const char *name,
                           const char *reason,
-                          NSArray<FIRStackFrame *> *frames,
-                          NSString *rolloutsInfoJSON) {
+                          NSArray<FIRStackFrame *> *frames) {
   FIRCLSFileWriteSectionStart(file, "exception");
 
   FIRCLSFileWriteHashStart(file);
@@ -197,12 +196,6 @@ void FIRCLSExceptionWrite(FIRCLSFile *file,
     FIRCLSFileWriteArrayEnd(file);
   }
 
-  if (rolloutsInfoJSON) {
-    FIRCLSFileWriteHashKey(file, "rollouts");
-    FIRCLSFileWriteStringUnquoted(file, [rolloutsInfoJSON UTF8String]);
-    FIRCLSFileWriteHashEnd(file);
-  }
-
   FIRCLSFileWriteHashEnd(file);
 
   FIRCLSFileWriteSectionEnd(file);
@@ -211,8 +204,7 @@ void FIRCLSExceptionWrite(FIRCLSFile *file,
 void FIRCLSExceptionRecord(FIRCLSExceptionType type,
                            const char *name,
                            const char *reason,
-                           NSArray<FIRStackFrame *> *frames,
-                           NSString *rolloutsInfoJSON) {
+                           NSArray<FIRStackFrame *> *frames) {
   if (!FIRCLSContextIsInitialized()) {
     return;
   }
@@ -232,7 +224,7 @@ void FIRCLSExceptionRecord(FIRCLSExceptionType type,
         return;
       }
 
-      FIRCLSExceptionWrite(&file, type, name, reason, frames, nil);
+      FIRCLSExceptionWrite(&file, type, name, reason, frames);
 
       // We only want to do this work if we have the expectation that we'll actually crash
       FIRCLSHandler(&file, mach_thread_self(), NULL);
@@ -243,7 +235,7 @@ void FIRCLSExceptionRecord(FIRCLSExceptionType type,
     FIRCLSUserLoggingWriteAndCheckABFiles(
         &_firclsContext.readonly->logging.customExceptionStorage,
         &_firclsContext.writable->logging.activeCustomExceptionPath, ^(FIRCLSFile *file) {
-          FIRCLSExceptionWrite(file, type, name, reason, frames, rolloutsInfoJSON);
+          FIRCLSExceptionWrite(file, type, name, reason, frames);
         });
   }
 
@@ -279,7 +271,6 @@ NSString *FIRCLSExceptionRecordOnDemand(FIRCLSExceptionType type,
 
   // Create new report and copy into it the current state of custom keys and log and the sdk.log,
   // binary_images.clsrecord, and metadata.clsrecord files.
-  // Also copy rollouts.clsrecord if applicable.
   NSError *error = nil;
   BOOL copied = [fileManager.underlyingFileManager copyItemAtPath:currentReportPath
                                                            toPath:newReportPath
@@ -352,7 +343,7 @@ NSString *FIRCLSExceptionRecordOnDemand(FIRCLSExceptionType type,
     FIRCLSSDKLog("Unable to open log file for on demand custom exception\n");
     return nil;
   }
-  FIRCLSExceptionWrite(&file, type, name, reason, frames, nil);
+  FIRCLSExceptionWrite(&file, type, name, reason, frames);
   FIRCLSHandler(&file, mach_thread_self(), NULL);
   FIRCLSFileClose(&file);
 
@@ -406,21 +397,19 @@ static void FIRCLSCatchAndRecordActiveException(std::type_info *typeInfo) {
 #endif
     }
   } catch (const char *exc) {
-    FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, "const char *", exc, nil, nil);
+    FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, "const char *", exc, nil);
   } catch (const std::string &exc) {
-    FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, "std::string", exc.c_str(), nil, nil);
+    FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, "std::string", exc.c_str(), nil);
   } catch (const std::exception &exc) {
-    FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, FIRCLSExceptionDemangle(name), exc.what(), nil,
-                          nil);
+    FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, FIRCLSExceptionDemangle(name), exc.what(), nil);
   } catch (const std::exception *exc) {
-    FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, FIRCLSExceptionDemangle(name), exc->what(), nil,
-                          nil);
+    FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, FIRCLSExceptionDemangle(name), exc->what(), nil);
   } catch (const std::bad_alloc &exc) {
     // it is especially important to avoid demangling in this case, because the expetation at this
     // point is that all allocations could fail
-    FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, "std::bad_alloc", exc.what(), nil, nil);
+    FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, "std::bad_alloc", exc.what(), nil);
   } catch (...) {
-    FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, FIRCLSExceptionDemangle(name), "", nil, nil);
+    FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, FIRCLSExceptionDemangle(name), "", nil);
   }
 }
 

+ 6 - 15
Crashlytics/Crashlytics/Helpers/FIRCLSFile.m

@@ -33,8 +33,7 @@ static const size_t FIRCLSUInt64StringBufferLength = 21;
 static const size_t FIRCLSStringBufferLength = 16;
 const size_t FIRCLSWriteBufferLength = 1000;
 
-static bool FIRCLSFileInit(
-    FIRCLSFile* file, const char* path, int fdm, bool appendMode, bool bufferWrites);
+static bool FIRCLSFileInit(FIRCLSFile* file, int fdm, bool appendMode, bool bufferWrites);
 
 static void FIRCLSFileWriteToFileDescriptorOrBuffer(FIRCLSFile* file,
                                                     const char* string,
@@ -56,8 +55,7 @@ static void FIRCLSFileWriteCollectionEntryEpilog(FIRCLSFile* file);
 #define CLS_FILE_DEBUG_LOGGING 0
 
 #pragma mark - File Structure
-static bool FIRCLSFileInit(
-    FIRCLSFile* file, const char* path, int fd, bool appendMode, bool bufferWrites) {
+static bool FIRCLSFileInit(FIRCLSFile* file, int fd, bool appendMode, bool bufferWrites) {
   if (!file) {
     FIRCLSSDKLog("Error: file is null\n");
     return false;
@@ -85,16 +83,9 @@ static bool FIRCLSFileInit(
 
   file->writtenLength = 0;
   if (appendMode) {
-    NSError* attributesError;
-    NSString* objCPath = [NSString stringWithCString:path encoding:NSUTF8StringEncoding];
-    NSDictionary* fileAttributes =
-        [[NSFileManager defaultManager] attributesOfItemAtPath:objCPath error:&attributesError];
-    if (attributesError != nil) {
-      FIRCLSErrorLog(@"Failed to read filesize from %@ with error %@", objCPath, attributesError);
-      return false;
-    }
-    NSNumber* fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
-    long long currentFileSize = [fileSizeNumber longLongValue];
+    struct stat fileStats;
+    fstat(fd, &fileStats);
+    off_t currentFileSize = fileStats.st_size;
     if (currentFileSize > 0) {
       file->writtenLength += currentFileSize;
     }
@@ -142,7 +133,7 @@ bool FIRCLSFileInitWithPathMode(FIRCLSFile* file,
     }
   }
 
-  return FIRCLSFileInit(file, path, fd, appendMode, bufferWrites);
+  return FIRCLSFileInit(file, fd, appendMode, bufferWrites);
 }
 
 bool FIRCLSFileClose(FIRCLSFile* file) {

+ 1 - 1
Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.h

@@ -44,7 +44,7 @@ NS_ASSUME_NONNULL_BEGIN
  *  - Concern 2: Whatever the FIID is, we should send it with the Crash report so we're in sync with
  * Sessions and other Firebase SDKs
  */
-- (BOOL)regenerateInstallIDIfNeededWithBlock:(void (^)(NSString *fiid, NSString *authToken))block;
+- (BOOL)regenerateInstallIDIfNeededWithBlock:(void (^)(NSString *fiid))block;
 
 @end
 

+ 11 - 23
Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.m

@@ -98,45 +98,33 @@ static unsigned long long FIRCLSInstallationsWaitTime = 10 * NSEC_PER_SEC;
 
 #pragma mark Privacy Shield
 
-- (BOOL)regenerateInstallIDIfNeededWithBlock:(void (^)(NSString *fiid, NSString *authToken))block {
+- (BOOL)regenerateInstallIDIfNeededWithBlock:(void (^)(NSString *fiid))block {
   BOOL __block didRotate = false;
-  NSString __block *authTokenComplete = @"";
-  NSString __block *currentIIDComplete = @"";
 
-  // Installations Completions run async, so wait a reasonable amount of time for it to finish.
-  dispatch_group_t workingGroup = dispatch_group_create();
+  dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
 
-  dispatch_group_enter(workingGroup);
-  [self.installations
-      authTokenWithCompletion:^(FIRInstallationsAuthTokenResult *_Nullable tokenResult,
-                                NSError *_Nullable error) {
-        authTokenComplete = tokenResult.authToken;
-        dispatch_group_leave(workingGroup);
-      }];
-
-  dispatch_group_enter(workingGroup);
+  // This runs Completion async, so wait a reasonable amount of time for it to finish.
   [self.installations
       installationIDWithCompletion:^(NSString *_Nullable currentIID, NSError *_Nullable error) {
-        currentIIDComplete = currentIID;
+        // Provide the IID to the callback. For this case we don't care
+        // if the FIID is null because it's the best we can do - we just want
+        // to send up the same FIID that is sent by other SDKs (eg. the Sessions SDK).
+        block(currentIID);
+
         didRotate = [self rotateCrashlyticsInstallUUIDWithIID:currentIID error:error];
 
         if (didRotate) {
           FIRCLSInfoLog(@"Rotated Crashlytics Install UUID because Firebase Install ID changed");
         }
-        dispatch_group_leave(workingGroup);
+        dispatch_semaphore_signal(semaphore);
       }];
 
-  intptr_t result = dispatch_group_wait(
-      workingGroup, dispatch_time(DISPATCH_TIME_NOW, FIRCLSInstallationsWaitTime));
-
+  intptr_t result = dispatch_semaphore_wait(
+      semaphore, dispatch_time(DISPATCH_TIME_NOW, FIRCLSInstallationsWaitTime));
   if (result != 0) {
     FIRCLSErrorLog(@"Crashlytics timed out while checking for Firebase Installation ID");
   }
 
-  // Provide the IID to the callback. For this case we don't care
-  // if the FIID is null because it's the best we can do - we just want
-  // to send up the same FIID that is sent by other SDKs (eg. the Sessions SDK).
-  block(currentIIDComplete, authTokenComplete);
   return didRotate;
 }
 

+ 0 - 1
Crashlytics/Crashlytics/Models/FIRCLSInternalReport.h

@@ -36,7 +36,6 @@ extern NSString *const FIRCLSReportInternalIncrementalKVFile;
 extern NSString *const FIRCLSReportInternalCompactedKVFile;
 extern NSString *const FIRCLSReportUserIncrementalKVFile;
 extern NSString *const FIRCLSReportUserCompactedKVFile;
-extern NSString *const FIRCLSReportRolloutsFile;
 
 @class FIRCLSFileManager;
 

+ 0 - 1
Crashlytics/Crashlytics/Models/FIRCLSInternalReport.m

@@ -41,7 +41,6 @@ NSString *const FIRCLSReportInternalIncrementalKVFile = @"internal_incremental_k
 NSString *const FIRCLSReportInternalCompactedKVFile = @"internal_compacted_kv.clsrecord";
 NSString *const FIRCLSReportUserIncrementalKVFile = @"user_incremental_kv.clsrecord";
 NSString *const FIRCLSReportUserCompactedKVFile = @"user_compacted_kv.clsrecord";
-NSString *const FIRCLSReportRolloutsFile = @"rollouts.clsrecord";
 
 @interface FIRCLSInternalReport () {
   NSString *_identifier;

+ 1 - 2
Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter.h

@@ -35,6 +35,5 @@
 - (instancetype)initWithPath:(NSString *)folderPath
                  googleAppId:(NSString *)googleAppID
               installIDModel:(FIRCLSInstallIdentifierModel *)installIDModel
-                        fiid:(NSString *)fiid
-                   authToken:(NSString *)authToken;
+                        fiid:(NSString *)fiid;
 @end

+ 1 - 5
Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter.m

@@ -30,7 +30,6 @@
 
 @property(nonatomic, strong) FIRCLSInstallIdentifierModel *installIDModel;
 @property(nonatomic, copy) NSString *fiid;
-@property(nonatomic, copy) NSString *authToken;
 
 @end
 
@@ -39,15 +38,13 @@
 - (instancetype)initWithPath:(NSString *)folderPath
                  googleAppId:(NSString *)googleAppID
               installIDModel:(FIRCLSInstallIdentifierModel *)installIDModel
-                        fiid:(NSString *)fiid
-                   authToken:(NSString *)authToken {
+                        fiid:(NSString *)fiid {
   self = [super init];
   if (self) {
     _folderPath = folderPath;
     _googleAppID = googleAppID;
     _installIDModel = installIDModel;
     _fiid = [fiid copy];
-    _authToken = [authToken copy];
 
     [self loadMetaDataFile];
 
@@ -159,7 +156,6 @@
   report.installation_uuid = FIRCLSEncodeString(self.installIDModel.installID);
   report.firebase_installation_id = FIRCLSEncodeString(self.fiid);
   report.app_quality_session_id = FIRCLSEncodeString(self.identity.app_quality_session_id);
-  report.firebase_authentication_token = FIRCLSEncodeString(self.authToken);
   report.build_version = FIRCLSEncodeString(self.application.build_version);
   report.display_version = FIRCLSEncodeString(self.application.display_version);
   report.apple_payload = [self protoFilesPayload];

+ 0 - 141
Crashlytics/Crashlytics/Rollouts/CrashlyticsRemoteConfigManager.swift

@@ -1,141 +0,0 @@
-// Copyright 2023 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-import FirebaseRemoteConfigInterop
-import Foundation
-
-@objc(FIRCLSPersistenceLog)
-public protocol CrashlyticsPersistenceLog {
-  func updateRolloutsStateToPersistence(rollouts: Data, reportID: String)
-  func debugLog(message: String)
-}
-
-@objc(FIRCLSRemoteConfigManager)
-public class CrashlyticsRemoteConfigManager: NSObject {
-  public static let maxRolloutAssignments = 128
-  public static let maxParameterValueLength = 256
-
-  private let lock = NSLock()
-  private var _rolloutAssignment: [RolloutAssignment] = []
-
-  var remoteConfig: RemoteConfigInterop
-  var persistenceDelegate: CrashlyticsPersistenceLog
-
-  @objc public var rolloutAssignment: [RolloutAssignment] {
-    lock.lock()
-    defer { lock.unlock() }
-    let copy = _rolloutAssignment
-    return copy
-  }
-
-  @objc public init(remoteConfig: RemoteConfigInterop,
-                    persistenceDelegate: CrashlyticsPersistenceLog) {
-    self.remoteConfig = remoteConfig
-    self.persistenceDelegate = persistenceDelegate
-  }
-
-  @objc public func updateRolloutsState(rolloutsState: RolloutsState, reportID: String) {
-    lock.lock()
-    _rolloutAssignment = normalizeRolloutAssignment(assignments: Array(rolloutsState.assignments))
-    lock.unlock()
-
-    // Writring to persistence
-    if let rolloutsData =
-      getRolloutsStateEncodedJsonData() {
-      persistenceDelegate.updateRolloutsStateToPersistence(
-        rollouts: rolloutsData,
-        reportID: reportID
-      )
-    }
-  }
-
-  /// Return string format: [{RolloutAssignment1}, {RolloutAssignment2}, {RolloutAssignment3}...]
-  /// This will get inserted into each clsrcord for non-fatal events.
-  /// Return a string type because later `FIRCLSFileWriteStringUnquoted` takes string as input
-  @objc public func getRolloutAssignmentsEncodedJsonString() -> String? {
-    let encodeData = getRolloutAssignmentsEncodedJsonData()
-    if let data = encodeData {
-      return String(data: data, encoding: .utf8)
-    }
-
-    let debugInfo = encodeData?.debugDescription ?? "nil"
-    persistenceDelegate.debugLog(message: String(
-      format: "Failed to serialize rollouts: %@",
-      arguments: [debugInfo]
-    ))
-
-    return nil
-  }
-}
-
-private extension CrashlyticsRemoteConfigManager {
-  func normalizeRolloutAssignment(assignments: [RolloutAssignment]) -> [RolloutAssignment] {
-    var validatedAssignments = assignments
-    if assignments.count > CrashlyticsRemoteConfigManager.maxRolloutAssignments {
-      persistenceDelegate
-        .debugLog(
-          message: "Rollouts excess the maximum number of assignments can pass to Crashlytics"
-        )
-      validatedAssignments =
-        Array(assignments[..<CrashlyticsRemoteConfigManager.maxRolloutAssignments])
-    }
-
-    _ = validatedAssignments.map { assignment in
-      if assignment.parameterValue.count > CrashlyticsRemoteConfigManager.maxParameterValueLength {
-        debugPrint(
-          "Rollouts excess the maximum length of parameter value can pass to Crashlytics",
-          assignment.parameterValue
-        )
-        let upperBound = String.Index(
-          utf16Offset: CrashlyticsRemoteConfigManager.maxParameterValueLength,
-          in: assignment.parameterValue
-        )
-        let slicedParameterValue = assignment.parameterValue[..<upperBound]
-        assignment.parameterValue = String(slicedParameterValue)
-      }
-    }
-
-    return validatedAssignments
-  }
-
-  // Helper for later convert Data to String. Because `FIRCLSFileWriteStringUnquoted` takes string
-  // as input
-  func getRolloutAssignmentsEncodedJsonData() -> Data? {
-    let contentEncodedRolloutAssignments = rolloutAssignment.map { assignment in
-      EncodedRolloutAssignment(assignment: assignment)
-    }
-
-    let encoder = JSONEncoder()
-    encoder.keyEncodingStrategy = .convertToSnakeCase
-    encoder.outputFormatting = .sortedKeys
-    let encodeData = try? encoder.encode(contentEncodedRolloutAssignments)
-    return encodeData
-  }
-
-  /// Return string format: {"rollouts": [{RolloutAssignment1}, {RolloutAssignment2},
-  /// {RolloutAssignment3}...]}
-  /// This will get stored in the separate rollouts.clsrecord
-  /// Return a data  type because later `[NSFileHandler writeData:]` takes data as input
-  func getRolloutsStateEncodedJsonData() -> Data? {
-    let contentEncodedRolloutAssignments = rolloutAssignment.map { assignment in
-      EncodedRolloutAssignment(assignment: assignment)
-    }
-
-    let state = EncodedRolloutsState(assignments: contentEncodedRolloutAssignments)
-    let encoder = JSONEncoder()
-    encoder.keyEncodingStrategy = .convertToSnakeCase
-    let encodeData = try? encoder.encode(state)
-    return encodeData
-  }
-}

+ 0 - 44
Crashlytics/Crashlytics/Rollouts/EncodedRolloutAssignment.swift

@@ -1,44 +0,0 @@
-// Copyright 2024 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-import FirebaseRemoteConfigInterop
-import Foundation
-
-@objc(FIRCLSEncodedRolloutsState)
-class EncodedRolloutsState: NSObject, Codable {
-  @objc public private(set) var rollouts: [EncodedRolloutAssignment]
-
-  @objc public init(assignments: [EncodedRolloutAssignment]) {
-    rollouts = assignments
-    super.init()
-  }
-}
-
-@objc(FIRCLSEncodedRolloutAssignment)
-class EncodedRolloutAssignment: NSObject, Codable {
-  @objc public private(set) var rolloutId: String
-  @objc public private(set) var variantId: String
-  @objc public private(set) var templateVersion: Int64
-  @objc public private(set) var parameterKey: String
-  @objc public private(set) var parameterValue: String
-
-  public init(assignment: RolloutAssignment) {
-    rolloutId = FileUtility.stringToHexConverter(for: assignment.rolloutId)
-    variantId = FileUtility.stringToHexConverter(for: assignment.variantId)
-    templateVersion = assignment.templateVersion
-    parameterKey = FileUtility.stringToHexConverter(for: assignment.parameterKey)
-    parameterValue = FileUtility.stringToHexConverter(for: assignment.parameterValue)
-    super.init()
-  }
-}

+ 0 - 38
Crashlytics/Crashlytics/Rollouts/StringToHexConverter.swift

@@ -1,38 +0,0 @@
-// Copyright 2024 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-import Foundation
-
-// This is a swift rewrite for the logic in FIRCLSFile for the function FIRCLSFileHexEncodeString()
-@objc(FIRCLSwiftFileUtility)
-public class FileUtility: NSObject {
-  @objc public static func stringToHexConverter(for string: String) -> String {
-    let hexMap = "0123456789abcdef"
-
-    var processedString = ""
-    let utf8Array = string.utf8.map { UInt8($0) }
-    for c in utf8Array {
-      let index1 = String.Index(
-        utf16Offset: Int(c >> 4),
-        in: hexMap
-      )
-      let index2 = String.Index(
-        utf16Offset: Int(c & 0x0F),
-        in: hexMap
-      )
-      processedString = processedString + String(hexMap[index1]) + String(hexMap[index2])
-    }
-    return processedString
-  }
-}

+ 1 - 2
Crashlytics/Protogen/nanopb/crashlytics.nanopb.c

@@ -26,7 +26,7 @@
 
 
 
-const pb_field_t google_crashlytics_Report_fields[11] = {
+const pb_field_t google_crashlytics_Report_fields[10] = {
     PB_FIELD(  1, BYTES   , SINGULAR, POINTER , FIRST, google_crashlytics_Report, sdk_version, sdk_version, 0),
     PB_FIELD(  3, BYTES   , SINGULAR, POINTER , OTHER, google_crashlytics_Report, gmp_app_id, sdk_version, 0),
     PB_FIELD(  4, UENUM   , SINGULAR, STATIC  , OTHER, google_crashlytics_Report, platform, gmp_app_id, 0),
@@ -36,7 +36,6 @@ const pb_field_t google_crashlytics_Report_fields[11] = {
     PB_FIELD( 10, MESSAGE , SINGULAR, STATIC  , OTHER, google_crashlytics_Report, apple_payload, display_version, &google_crashlytics_FilesPayload_fields),
     PB_FIELD( 16, BYTES   , SINGULAR, POINTER , OTHER, google_crashlytics_Report, firebase_installation_id, apple_payload, 0),
     PB_FIELD( 17, BYTES   , SINGULAR, POINTER , OTHER, google_crashlytics_Report, app_quality_session_id, firebase_installation_id, 0),
-    PB_FIELD( 19, BYTES   , SINGULAR, POINTER , OTHER, google_crashlytics_Report, firebase_authentication_token, app_quality_session_id, 0),
     PB_LAST_FIELD
 };
 

+ 1 - 3
Crashlytics/Protogen/nanopb/crashlytics.nanopb.h

@@ -61,7 +61,6 @@ typedef struct _google_crashlytics_Report {
     google_crashlytics_FilesPayload apple_payload;
     pb_bytes_array_t *firebase_installation_id;
     pb_bytes_array_t *app_quality_session_id;
-    pb_bytes_array_t *firebase_authentication_token;
 /* @@protoc_insertion_point(struct:google_crashlytics_Report) */
 } google_crashlytics_Report;
 
@@ -85,13 +84,12 @@ typedef struct _google_crashlytics_Report {
 #define google_crashlytics_Report_installation_uuid_tag 5
 #define google_crashlytics_Report_firebase_installation_id_tag 16
 #define google_crashlytics_Report_app_quality_session_id_tag 17
-#define google_crashlytics_Report_firebase_authentication_token 19
 #define google_crashlytics_Report_build_version_tag 6
 #define google_crashlytics_Report_display_version_tag 7
 #define google_crashlytics_Report_apple_payload_tag 10
 
 /* Struct field encoding specification for nanopb */
-extern const pb_field_t google_crashlytics_Report_fields[11];
+extern const pb_field_t google_crashlytics_Report_fields[10];
 extern const pb_field_t google_crashlytics_FilesPayload_fields[2];
 extern const pb_field_t google_crashlytics_FilesPayload_File_fields[3];
 

+ 0 - 66
Crashlytics/Resources/PrivacyInfo.xcprivacy

@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-        <key>NSPrivacyTracking</key>
-        <false/>
-        <key>NSPrivacyTrackingDomains</key>
-        <array>
-        </array>
-        <key>NSPrivacyCollectedDataTypes</key>
-        <array>
-                <dict>
-                        <key>NSPrivacyCollectedDataType</key>
-                        <string>NSPrivacyCollectedDataTypeCrashData</string>
-                        <key>NSPrivacyCollectedDataTypeLinked</key>
-                        <false/>
-                        <key>NSPrivacyCollectedDataTypeTracking</key>
-                        <false/>
-                        <key>NSPrivacyCollectedDataTypePurposes</key>
-                        <array>
-                                <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
-                        </array>
-                </dict>
-                <dict>
-                        <key>NSPrivacyCollectedDataType</key>
-                        <string>NSPrivacyCollectedDataTypeOtherDiagnosticData</string>
-                        <key>NSPrivacyCollectedDataTypeLinked</key>
-                        <false/>
-                        <key>NSPrivacyCollectedDataTypeTracking</key>
-                        <false/>
-                        <key>NSPrivacyCollectedDataTypePurposes</key>
-                        <array>
-                                <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
-                        </array>
-                </dict>
-        </array>
-        <key>NSPrivacyAccessedAPITypes</key>
-        <array>
-                <dict>
-                        <key>NSPrivacyAccessedAPIType</key>
-                        <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
-                        <key>NSPrivacyAccessedAPITypeReasons</key>
-                        <array>
-                                <string>C617.1</string>
-                        </array>
-                </dict>
-                <dict>
-                        <key>NSPrivacyAccessedAPIType</key>
-                        <string>NSPrivacyAccessedAPICategorySystemBootTime</string>
-                        <key>NSPrivacyAccessedAPITypeReasons</key>
-                        <array>
-                                <string>35F9.1</string>
-                        </array>
-                </dict>
-                <dict>
-                        <key>NSPrivacyAccessedAPIType</key>
-                        <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
-                        <key>NSPrivacyAccessedAPITypeReasons</key>
-                        <array>
-                                <string>CA92.1</string>
-                        </array>
-                </dict>
-        </array>
-</dict>
-</plist>
-

+ 5 - 10
Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.m

@@ -42,6 +42,8 @@ static void FIRCLSMachOHeaderValues(FIRCLSMachOSliceRef slice,
 static bool FIRCLSMachOSliceIsValid(FIRCLSMachOSliceRef slice);
 
 bool FIRCLSMachOFileInitWithPath(FIRCLSMachOFileRef file, const char* path) {
+  struct stat statBuffer;
+
   if (!file || !path) {
     return false;
   }
@@ -56,23 +58,16 @@ bool FIRCLSMachOFileInitWithPath(FIRCLSMachOFileRef file, const char* path) {
     return false;
   }
 
-  NSError* attributesError;
-  NSString* objCPath = [NSString stringWithCString:path encoding:NSUTF8StringEncoding];
-  NSDictionary* fileAttributes =
-      [[NSFileManager defaultManager] attributesOfItemAtPath:objCPath error:&attributesError];
-  if (attributesError != nil) {
+  if (fstat(file->fd, &statBuffer) == -1) {
     close(file->fd);
     return false;
   }
-  NSNumber* fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
-  long long currentFileSize = [fileSizeNumber longLongValue];
-  NSFileAttributeType fileType = [fileAttributes objectForKey:NSFileType];
 
   // We need some minimum size for this to even be a possible mach-o file.  I believe
   // its probably quite a bit bigger than this, but this at least covers something.
   // We also need it to be a regular file.
-  file->mappedSize = (size_t)currentFileSize;
-  if (currentFileSize < 16 || ![fileType isEqualToString:NSFileTypeRegular]) {
+  file->mappedSize = (size_t)statBuffer.st_size;
+  if (statBuffer.st_size < 16 || !(statBuffer.st_mode & S_IFREG)) {
     close(file->fd);
     return false;
   }

+ 3 - 6
Crashlytics/UnitTests/FIRCLSContextManagerTests.m

@@ -75,8 +75,7 @@ NSString *const TestContextSessionID2 = @"TestContextSessionID2";
   FIRCLSReportAdapter *adapter = [[FIRCLSReportAdapter alloc] initWithPath:self.report.path
                                                                googleAppId:@"TestGoogleAppID"
                                                             installIDModel:self.installIDModel
-                                                                      fiid:@"TestFIID"
-                                                                 authToken:@"TestAuthToken"];
+                                                                      fiid:@"TestFIID"];
 
   XCTAssertEqualObjects(adapter.identity.app_quality_session_id, @"");
 }
@@ -93,8 +92,7 @@ NSString *const TestContextSessionID2 = @"TestContextSessionID2";
   FIRCLSReportAdapter *adapter = [[FIRCLSReportAdapter alloc] initWithPath:self.report.path
                                                                googleAppId:@"TestGoogleAppID"
                                                             installIDModel:self.installIDModel
-                                                                      fiid:@"TestFIID"
-                                                                 authToken:@"TestAuthToken"];
+                                                                      fiid:@"TestFIID"];
   NSLog(@"reportPath: %@", self.report.path);
 
   XCTAssertEqualObjects(adapter.identity.app_quality_session_id, TestContextSessionID2);
@@ -112,8 +110,7 @@ NSString *const TestContextSessionID2 = @"TestContextSessionID2";
   FIRCLSReportAdapter *adapter = [[FIRCLSReportAdapter alloc] initWithPath:self.report.path
                                                                googleAppId:@"TestGoogleAppID"
                                                             installIDModel:self.installIDModel
-                                                                      fiid:@"TestFIID"
-                                                                 authToken:@"TestAuthToken"];
+                                                                      fiid:@"TestFIID"];
   NSLog(@"reportPath: %@", self.report.path);
 
   XCTAssertEqualObjects(adapter.identity.app_quality_session_id, TestContextSessionID2);

+ 0 - 31
Crashlytics/UnitTests/FIRCLSFileTests.m

@@ -14,12 +14,6 @@
 
 #include "Crashlytics/Crashlytics/Helpers/FIRCLSFile.h"
 
-#if SWIFT_PACKAGE
-@import FirebaseCrashlyticsSwift;
-#else  // Swift Package Manager
-#import <FirebaseCrashlytics/FirebaseCrashlytics-Swift.h>
-#endif  // CocoaPods
-
 #import <XCTest/XCTest.h>
 
 @interface FIRCLSFileTests : XCTestCase
@@ -175,31 +169,6 @@
                         buffered ? @"" : @"un");
 }
 
-// This is the test to compare FIRCLSwiftFileUtility.stringToHexConverter(for:) and
-// FIRCLSFileWriteHexEncodedString return the same hex encoding value
-- (void)testHexEncodingStringObjcAndSwiftResultsSame {
-  NSString *testedValueString = @"是themis的测试数据,输入中文";
-
-  FIRCLSFile *unbufferedFile = &_unbufferedFile;
-  FIRCLSFileWriteHashStart(unbufferedFile);
-  FIRCLSFileWriteHashEntryHexEncodedString(unbufferedFile, "hex", [testedValueString UTF8String]);
-  FIRCLSFileWriteHashEnd(unbufferedFile);
-  NSString *contentsFromObjcHexEncoding = [self contentsOfFileAtPath:self.unbufferedPath];
-
-  FIRCLSFile *bufferedFile = &_bufferedFile;
-  NSString *encodedValue = [FIRCLSwiftFileUtility stringToHexConverterFor:testedValueString];
-  FIRCLSFileWriteHashStart(bufferedFile);
-  FIRCLSFileWriteHashKey(bufferedFile, "hex");
-  FIRCLSFileWriteStringUnquoted(bufferedFile, "\"");
-  FIRCLSFileWriteStringUnquoted(bufferedFile, [encodedValue UTF8String]);
-  FIRCLSFileWriteStringUnquoted(bufferedFile, "\"");
-  FIRCLSFileWriteHashEnd(bufferedFile);
-  FIRCLSFileFlushWriteBuffer(bufferedFile);
-  NSString *contentsFromSwiftHexEncoding = [self contentsOfFileAtPath:self.bufferedPath];
-
-  XCTAssertTrue([contentsFromObjcHexEncoding isEqualToString:contentsFromSwiftHexEncoding]);
-}
-
 #pragma mark -
 
 - (void)testHexEncodingLongString {

+ 20 - 49
Crashlytics/UnitTests/FIRCLSInstallIdentifierModelTests.m

@@ -66,13 +66,10 @@ static NSString *const FIRCLSTestHashOfTestInstanceID =
       [[FIRCLSInstallIdentifierModel alloc] initWithInstallations:iid];
   XCTAssertNotNil(model.installID);
 
-  BOOL didRotate = [model
-      regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid, NSString *_Nonnull authToken){
-      }];
+  BOOL didRotate = [model regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid){
+  }];
   sleep(1);
 
-  XCTAssertTrue(iid.authTokenFinished);
-  XCTAssertTrue(iid.installationIDFinished);
   XCTAssertFalse(didRotate);
   XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID);
   XCTAssertNil([_defaults objectForKey:FABInstallationADIDKey]);
@@ -88,13 +85,10 @@ static NSString *const FIRCLSTestHashOfTestInstanceID =
       [[FIRCLSInstallIdentifierModel alloc] initWithInstallations:iid];
   XCTAssertNotNil(model.installID);
 
-  BOOL didRotate = [model
-      regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid, NSString *_Nonnull authToken){
-      }];
+  BOOL didRotate = [model regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid){
+  }];
 
   XCTAssertFalse(didRotate);
-  XCTAssertTrue(iid.authTokenFinished);
-  XCTAssertTrue(iid.installationIDFinished);
   XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID);
   XCTAssertNil([_defaults objectForKey:FABInstallationADIDKey]);
   XCTAssertEqualObjects(nil, [_defaults objectForKey:FIRCLSInstallationIIDHashKey]);
@@ -141,13 +135,10 @@ static NSString *const FIRCLSTestHashOfTestInstanceID =
       [[FIRCLSInstallIdentifierModel alloc] initWithInstallations:iid];
   XCTAssertNotNil(model.installID);
 
-  BOOL didRotate = [model
-      regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid, NSString *_Nonnull authToken){
-      }];
+  BOOL didRotate = [model regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid){
+  }];
   XCTAssertTrue(didRotate);
 
-  XCTAssertTrue(iid.authTokenFinished);
-  XCTAssertTrue(iid.installationIDFinished);
   // Test that the UUID changed.
   XCTAssertNotEqualObjects(model.installID, @"old_uuid");
   XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID);
@@ -167,13 +158,10 @@ static NSString *const FIRCLSTestHashOfTestInstanceID =
       [[FIRCLSInstallIdentifierModel alloc] initWithInstallations:iid];
   XCTAssertNotNil(model.installID);
 
-  BOOL didRotate = [model
-      regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid, NSString *_Nonnull authToken){
-      }];
+  BOOL didRotate = [model regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid){
+  }];
   XCTAssertFalse(didRotate);
 
-  XCTAssertTrue(iid.authTokenFinished);
-  XCTAssertTrue(iid.installationIDFinished);
   // Test that the UUID changed.
   XCTAssertEqualObjects(model.installID, @"test_uuid");
   XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID);
@@ -192,13 +180,10 @@ static NSString *const FIRCLSTestHashOfTestInstanceID =
       [[FIRCLSInstallIdentifierModel alloc] initWithInstallations:iid];
   XCTAssertNotNil(model.installID);
 
-  BOOL didRotate = [model
-      regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid, NSString *_Nonnull authToken){
-      }];
+  BOOL didRotate = [model regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid){
+  }];
   XCTAssertFalse(didRotate);
 
-  XCTAssertTrue(iid.authTokenFinished);
-  XCTAssertTrue(iid.installationIDFinished);
   // Test that the UUID did not change. The FIID can be nil if
   // there's no FIID cached, so we can't say whether to regenerate
   XCTAssertEqualObjects(model.installID, @"old_uuid");
@@ -217,13 +202,10 @@ static NSString *const FIRCLSTestHashOfTestInstanceID =
       [[FIRCLSInstallIdentifierModel alloc] initWithInstallations:iid];
   XCTAssertNotNil(model.installID);
 
-  BOOL didRotate = [model
-      regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid, NSString *_Nonnull authToken){
-      }];
+  BOOL didRotate = [model regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid){
+  }];
   XCTAssertFalse(didRotate);
 
-  XCTAssertTrue(iid.authTokenFinished);
-  XCTAssertTrue(iid.installationIDFinished);
   // Test that the UUID did not change. The FIID can be nil if
   // there's no FIID cached, so we can't say whether to regenerate
   XCTAssertEqualObjects(model.installID, @"old_uuid");
@@ -244,14 +226,10 @@ static NSString *const FIRCLSTestHashOfTestInstanceID =
       [[FIRCLSInstallIdentifierModel alloc] initWithInstallations:iid];
   XCTAssertNotNil(model.installID);
 
-  BOOL didRotate = [model
-      regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid, NSString *_Nonnull authToken){
-      }];
+  BOOL didRotate = [model regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid){
+  }];
   XCTAssertFalse(didRotate);
 
-  XCTAssertTrue(iid.authTokenFinished);
-  XCTAssertTrue(iid.installationIDFinished);
-
   // Test that the UUID didn't change.
   XCTAssertEqualObjects(model.installID, @"test_uuid");
   XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID);
@@ -270,13 +248,10 @@ static NSString *const FIRCLSTestHashOfTestInstanceID =
       [[FIRCLSInstallIdentifierModel alloc] initWithInstallations:iid];
   XCTAssertNotNil(model.installID);
 
-  BOOL didRotate = [model
-      regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid, NSString *_Nonnull authToken){
-      }];
+  BOOL didRotate = [model regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid){
+  }];
   XCTAssertFalse(didRotate);
 
-  XCTAssertTrue(iid.authTokenFinished);
-  XCTAssertTrue(iid.installationIDFinished);
   // Test that the UUID didn't change.
   XCTAssertEqualObjects(model.installID, @"test_uuid");
   XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID);
@@ -297,9 +272,8 @@ static NSString *const FIRCLSTestHashOfTestInstanceID =
       [[FIRCLSInstallIdentifierModel alloc] initWithInstallations:iid];
   XCTAssertNotNil(model.installID);
 
-  BOOL didRotate = [model
-      regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid, NSString *_Nonnull authToken){
-      }];
+  BOOL didRotate = [model regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid){
+  }];
   XCTAssertFalse(didRotate);
 
   // Test that the UUID didn't change.
@@ -323,13 +297,10 @@ static NSString *const FIRCLSTestHashOfTestInstanceID =
       [[FIRCLSInstallIdentifierModel alloc] initWithInstallations:iid];
   XCTAssertNotNil(model.installID);
 
-  BOOL didRotate = [model
-      regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid, NSString *_Nonnull authToken){
-      }];
+  BOOL didRotate = [model regenerateInstallIDIfNeededWithBlock:^(NSString *_Nonnull fiid){
+  }];
   XCTAssertTrue(didRotate);
 
-  XCTAssertTrue(iid.authTokenFinished);
-  XCTAssertTrue(iid.installationIDFinished);
   // Test that the UUID change.
   XCTAssertNotEqualObjects(model.installID, @"test_uuid");
   XCTAssertEqualObjects([_defaults objectForKey:FABInstallationUUIDKey], model.installID);

+ 5 - 5
Crashlytics/UnitTests/FIRCLSLoggingTests.m

@@ -365,7 +365,7 @@
                                        code:-1
                                    userInfo:@{@"key1" : @"value", @"key2" : @"value2"}];
 
-  FIRCLSUserLoggingRecordError(error, @{@"additional" : @"key"}, nil);
+  FIRCLSUserLoggingRecordError(error, @{@"additional" : @"key"});
 
   NSArray* errors = [self errorAContents];
 
@@ -405,7 +405,7 @@
                                    userInfo:@{@"key1" : @"value", @"key2" : @"value2"}];
 
   for (size_t i = 0; i < _firclsContext.readonly->logging.errorStorage.maxEntries; ++i) {
-    FIRCLSUserLoggingRecordError(error, nil, nil);
+    FIRCLSUserLoggingRecordError(error, nil);
   }
 
   NSArray* errors = [self errorAContents];
@@ -414,7 +414,7 @@
 
   // at this point, if we log one more, we should expect a roll over to the next file
 
-  FIRCLSUserLoggingRecordError(error, nil, nil);
+  FIRCLSUserLoggingRecordError(error, nil);
 
   XCTAssertEqual([[self errorAContents] count], 8, @"");
   XCTAssertEqual([[self errorBContents] count], 1, @"");
@@ -422,7 +422,7 @@
 
   // and our next entry should continue into the B file
 
-  FIRCLSUserLoggingRecordError(error, nil, nil);
+  FIRCLSUserLoggingRecordError(error, nil);
 
   XCTAssertEqual([[self errorAContents] count], 8, @"");
   XCTAssertEqual([[self errorBContents] count], 2, @"");
@@ -432,7 +432,7 @@
 - (void)testLoggedErrorWithNullsInAdditionalInfo {
   NSError* error = [NSError errorWithDomain:@"Domain" code:-1 userInfo:nil];
 
-  FIRCLSUserLoggingRecordError(error, @{@"null-key" : [NSNull null]}, nil);
+  FIRCLSUserLoggingRecordError(error, @{@"null-key" : [NSNull null]});
 
   NSArray* errors = [self errorAContents];
 

+ 1 - 3
Crashlytics/UnitTests/FIRCLSReportAdapterTests.m

@@ -32,7 +32,6 @@
 @end
 
 static NSString *const TestFIID = @"TEST_FIID";
-static NSString *const TestAuthToken = @"TEST_AUTH_TOKEN";
 
 @implementation FIRCLSReportAdapterTests
 
@@ -47,8 +46,7 @@ static NSString *const TestAuthToken = @"TEST_AUTH_TOKEN";
   return [[FIRCLSReportAdapter alloc] initWithPath:path
                                        googleAppId:googleAppID
                                     installIDModel:installIDModel
-                                              fiid:TestFIID
-                                         authToken:TestAuthToken];
+                                              fiid:TestFIID];
 }
 
 /// Attempt sending a proto report to the reporting endpoint

+ 0 - 70
Crashlytics/UnitTests/FIRCLSRolloutsPersistenceManagerTests.m

@@ -1,70 +0,0 @@
-// Copyright 2024 Google
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#import <Foundation/Foundation.h>
-#import <XCTest/XCTest.h>
-
-#import "Crashlytics/Crashlytics/Components/FIRCLSContext.h"
-#import "Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.h"
-#import "Crashlytics/Crashlytics/Models/FIRCLSInternalReport.h"
-#import "Crashlytics/UnitTests/Mocks/FIRCLSTempMockFileManager.h"
-#if SWIFT_PACKAGE
-@import FirebaseCrashlyticsSwift;
-#else  // Swift Package Manager
-#import <FirebaseCrashlytics/FirebaseCrashlytics-Swift.h>
-#endif  // CocoaPods
-
-NSString *reportId = @"1234567";
-
-@interface FIRCLSRolloutsPersistenceManagerTests : XCTestCase
-@property(nonatomic, strong) FIRCLSTempMockFileManager *fileManager;
-@property(nonatomic, strong) FIRCLSRolloutsPersistenceManager *rolloutsPersistenceManager;
-@end
-
-@implementation FIRCLSRolloutsPersistenceManagerTests
-- (void)setUp {
-  [super setUp];
-  FIRCLSContextBaseInit();
-  self.fileManager = [[FIRCLSTempMockFileManager alloc] init];
-  [self.fileManager createReportDirectories];
-  [self.fileManager setupNewPathForExecutionIdentifier:reportId];
-
-  self.rolloutsPersistenceManager =
-      [[FIRCLSRolloutsPersistenceManager alloc] initWithFileManager:self.fileManager];
-}
-
-- (void)tearDown {
-  [self.fileManager removeItemAtPath:_fileManager.rootPath];
-  FIRCLSContextBaseDeinit();
-  [super tearDown];
-}
-
-- (void)testUpdateRolloutsStateToPersistenceWithRollouts {
-  NSString *encodedStateString =
-      @"{rollouts:[{\"parameter_key\":\"6d795f66656174757265\",\"parameter_value\":"
-      @"\"e8bf99e698af7468656d6973e79a84e6b58be8af95e695b0e68daeefbc8ce8be93e585a5e4b8ade69687\","
-      @"\"rollout_id\":\"726f6c6c6f75745f31\",\"template_version\":1,\"variant_id\":"
-      @"\"636f6e74726f6c\"}]}";
-
-  NSData *data = [encodedStateString dataUsingEncoding:NSUTF8StringEncoding];
-  NSString *rolloutsFilePath =
-      [[[self.fileManager activePath] stringByAppendingPathComponent:reportId]
-          stringByAppendingPathComponent:FIRCLSReportRolloutsFile];
-
-  [self.rolloutsPersistenceManager updateRolloutsStateToPersistenceWithRollouts:data
-                                                                       reportID:reportId];
-  XCTAssertTrue([[NSFileManager defaultManager] fileExistsAtPath:rolloutsFilePath]);
-}
-
-@end

+ 1 - 1
Crashlytics/UnitTests/FIRRecordExceptionModelTests.m

@@ -75,7 +75,7 @@
   FIRExceptionModel *exceptionModel = [FIRExceptionModel exceptionModelWithName:name reason:reason];
   exceptionModel.stackTrace = stackTrace;
 
-  FIRCLSExceptionRecordModel(exceptionModel, nil);
+  FIRCLSExceptionRecordModel(exceptionModel);
 
   NSData *data = [NSData
       dataWithContentsOfFile:[self.reportPath

+ 0 - 3
Crashlytics/UnitTests/Mocks/FIRMockInstallations.h

@@ -16,9 +16,6 @@
 
 @interface FIRMockInstallations : FIRInstallations
 
-@property(nonatomic) BOOL authTokenFinished;
-@property(nonatomic) BOOL installationIDFinished;
-
 - (instancetype)initWithFID:(NSString *)installationID;
 - (instancetype)initWithError:(NSError *)error;
 

+ 0 - 17
Crashlytics/UnitTests/Mocks/FIRMockInstallations.m

@@ -21,24 +21,11 @@
 @property(nonatomic, copy) NSString *installationID;
 @property(nonatomic, strong) NSError *error;
 
-// the init function is not public for the token result, use as a placeholder to mock the token
-// completion block
-@property(nonatomic, strong) FIRInstallationsAuthTokenResult *tokenResult;
-
-@property(nonatomic) BOOL authTokenFinished;
-@property(nonatomic) BOOL installationIDFinished;
-
 @end
 
 @implementation FIRMockInstallationsImpl
 
-- (void)authTokenWithCompletion:(FIRInstallationsTokenHandler)completion {
-  self.authTokenFinished = true;
-  completion(self.tokenResult, self.error);
-}
-
 - (void)installationIDWithCompletion:(FIRInstallationsIDHandler)completion {
-  self.installationIDFinished = true;
   completion(self.installationID, self.error);
 }
 
@@ -54,8 +41,6 @@
   FIRMockInstallationsImpl *mock = [[FIRMockInstallationsImpl alloc] init];
   mock.installationID = [installationID copy];
   mock.error = nil;
-  mock.authTokenFinished = false;
-  mock.installationIDFinished = false;
   self = (id)mock;
   return self;
 }
@@ -64,8 +49,6 @@
   FIRMockInstallationsImpl *mock = [[FIRMockInstallationsImpl alloc] init];
   mock.installationID = nil;
   mock.error = error;
-  mock.authTokenFinished = false;
-  mock.installationIDFinished = false;
   self = (id)mock;
   return self;
 }

+ 0 - 136
Crashlytics/UnitTestsSwift/CrashlyticsRemoteConfigManagerTests.swift

@@ -1,136 +0,0 @@
-// Copyright 2023 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-#if SWIFT_PACKAGE
-  @testable import FirebaseCrashlyticsSwift
-#else
-  @testable import FirebaseCrashlytics
-#endif
-import FirebaseRemoteConfigInterop
-import XCTest
-
-class RemoteConfigConfigMock: RemoteConfigInterop {
-  func registerRolloutsStateSubscriber(_ subscriber: FirebaseRemoteConfigInterop
-    .RolloutsStateSubscriber,
-    for namespace: String) {}
-}
-
-class PersistanceManagerMock: CrashlyticsPersistenceLog {
-  func updateRolloutsStateToPersistence(rollouts: Data, reportID: String) {}
-  func debugLog(message: String) {}
-}
-
-final class CrashlyticsRemoteConfigManagerTests: XCTestCase {
-  let rollouts: RolloutsState = {
-    let assignment1 = RolloutAssignment(
-      rolloutId: "rollout_1",
-      variantId: "control",
-      templateVersion: 1,
-      parameterKey: "my_feature",
-      parameterValue: "false"
-    )
-    let assignment2 = RolloutAssignment(
-      rolloutId: "rollout_2",
-      variantId: "enabled",
-      templateVersion: 1,
-      parameterKey: "themis_big_feature",
-      parameterValue: "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
-    )
-    let rollouts = RolloutsState(assignmentList: [assignment1, assignment2])
-    return rollouts
-  }()
-
-  let singleRollout: RolloutsState = {
-    let assignment1 = RolloutAssignment(
-      rolloutId: "rollout_1",
-      variantId: "control",
-      templateVersion: 1,
-      parameterKey: "my_feature",
-      parameterValue: "这是themis的测试数据,输入中文" // check unicode
-    )
-    let rollouts = RolloutsState(assignmentList: [assignment1])
-    return rollouts
-  }()
-
-  let rcInterop = RemoteConfigConfigMock()
-
-  func testRemoteConfigManagerProperlyProcessRolloutsState() throws {
-    let rcManager = CrashlyticsRemoteConfigManager(
-      remoteConfig: rcInterop,
-      persistenceDelegate: PersistanceManagerMock()
-    )
-    rcManager.updateRolloutsState(rolloutsState: rollouts, reportID: "12R")
-    XCTAssertEqual(rcManager.rolloutAssignment.count, 2)
-
-    for assignment in rollouts.assignments {
-      if assignment.parameterKey == "themis_big_feature" {
-        XCTAssertEqual(
-          assignment.parameterValue.count,
-          CrashlyticsRemoteConfigManager.maxParameterValueLength
-        )
-      }
-    }
-  }
-
-  func testRemoteConfigManagerGenerateEncodedRolloutAssignmentsJson() throws {
-    let expectedString =
-      "[{\"parameter_key\":\"6d795f66656174757265\",\"parameter_value\":\"e8bf99e698af7468656d6973e79a84e6b58be8af95e695b0e68daeefbc8ce8be93e585a5e4b8ade69687\",\"rollout_id\":\"726f6c6c6f75745f31\",\"template_version\":1,\"variant_id\":\"636f6e74726f6c\"}]"
-
-    let rcManager = CrashlyticsRemoteConfigManager(
-      remoteConfig: rcInterop,
-      persistenceDelegate: PersistanceManagerMock()
-    )
-    rcManager.updateRolloutsState(rolloutsState: singleRollout, reportID: "456")
-
-    let string = rcManager.getRolloutAssignmentsEncodedJsonString()
-    XCTAssertEqual(string, expectedString)
-  }
-
-  func testMultiThreadsUpdateRolloutAssignments() throws {
-    let rcManager = CrashlyticsRemoteConfigManager(
-      remoteConfig: rcInterop,
-      persistenceDelegate: PersistanceManagerMock()
-    )
-    DispatchQueue.main.async { [weak self] in
-      if let singleRollout = self?.singleRollout {
-        rcManager.updateRolloutsState(rolloutsState: singleRollout, reportID: "456")
-        XCTAssertEqual(rcManager.rolloutAssignment.count, 1)
-      }
-    }
-
-    DispatchQueue.main.async { [weak self] in
-      if let rollouts = self?.rollouts {
-        rcManager.updateRolloutsState(rolloutsState: rollouts, reportID: "456")
-        XCTAssertEqual(rcManager.rolloutAssignment.count, 2)
-      }
-    }
-  }
-
-  func testMultiThreadsReadAndWriteRolloutAssignments() throws {
-    let rcManager = CrashlyticsRemoteConfigManager(
-      remoteConfig: rcInterop,
-      persistenceDelegate: PersistanceManagerMock()
-    )
-    rcManager.updateRolloutsState(rolloutsState: singleRollout, reportID: "456")
-
-    DispatchQueue.main.async { [weak self] in
-      if let rollouts = self?.rollouts {
-        let oldAssignments = rcManager.rolloutAssignment
-        rcManager.updateRolloutsState(rolloutsState: rollouts, reportID: "456")
-        XCTAssertEqual(rcManager.rolloutAssignment.count, 2)
-        XCTAssertEqual(oldAssignments.count, 1)
-      }
-    }
-    XCTAssertEqual(rcManager.rolloutAssignment.count, 1)
-  }
-}

BIN
Crashlytics/upload-symbols


+ 0 - 1
Example/watchOSSample/Podfile

@@ -19,7 +19,6 @@ target 'SampleWatchAppWatchKitExtension' do
   pod 'FirebaseDatabase', :path => '../../'
   pod 'FirebaseAppCheckInterop', :path => '../../'
   pod 'FirebaseAuthInterop', :path => '../../'
-  pod 'FirebaseRemoteConfigInterop', :path => '../../'
 
   pod 'Firebase/Messaging', :path => '../../'
   pod 'Firebase/Storage', :path => '../../'

+ 25 - 25
Firebase.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'Firebase'
-  s.version          = '10.23.0'
+  s.version          = '10.21.0'
   s.summary          = 'Firebase'
 
   s.description      = <<-DESC
@@ -26,7 +26,7 @@ Simplify your app development, grow your user base, and monetize more effectivel
   s.osx.deployment_target = '10.13'
   s.tvos.deployment_target = '12.0'
 
-  s.cocoapods_version = '>= 1.12.0'
+  s.cocoapods_version = '>= 1.4.0'
 
   s.swift_version = '5.3'
 
@@ -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.23.0'
-    ss.osx.dependency 'FirebaseAnalytics', '~> 10.23.0'
-    ss.tvos.dependency 'FirebaseAnalytics', '~> 10.23.0'
+    ss.ios.dependency 'FirebaseAnalytics', '~> 10.21.0'
+    ss.osx.dependency 'FirebaseAnalytics', '~> 10.21.0'
+    ss.tvos.dependency 'FirebaseAnalytics', '~> 10.21.0'
     ss.dependency 'Firebase/CoreOnly'
   end
 
   s.subspec 'CoreOnly' do |ss|
-    ss.dependency 'FirebaseCore', '10.23.0'
+    ss.dependency 'FirebaseCore', '10.21.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.23.0'
+    ss.dependency 'FirebaseAnalytics/WithoutAdIdSupport', '~> 10.21.0'
     ss.dependency 'Firebase/CoreOnly'
   end
 
   s.subspec 'ABTesting' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseABTesting', '~> 10.23.0'
+    ss.dependency 'FirebaseABTesting', '~> 10.21.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.23.0-beta'
+    ss.ios.dependency 'FirebaseAppDistribution', '~> 10.21.0-beta'
     ss.ios.deployment_target = '11.0'
   end
 
   s.subspec 'AppCheck' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseAppCheck', '~> 10.23.0'
+    ss.dependency 'FirebaseAppCheck', '~> 10.21.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.23.0'
+    ss.dependency 'FirebaseAuth', '~> 10.21.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.23.0'
+    ss.dependency 'FirebaseCrashlytics', '~> 10.21.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.23.0'
+    ss.dependency 'FirebaseDatabase', '~> 10.21.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.23.0'
+    ss.ios.dependency 'FirebaseDynamicLinks', '~> 10.21.0'
     ss.ios.deployment_target = '11.0'
   end
 
   s.subspec 'Firestore' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseFirestore', '~> 10.23.0'
+    ss.dependency 'FirebaseFirestore', '~> 10.21.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.23.0'
+    ss.dependency 'FirebaseFunctions', '~> 10.21.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.23.0-beta'
-    ss.tvos.dependency 'FirebaseInAppMessaging', '~> 10.23.0-beta'
+    ss.ios.dependency 'FirebaseInAppMessaging', '~> 10.21.0-beta'
+    ss.tvos.dependency 'FirebaseInAppMessaging', '~> 10.21.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.23.0'
+    ss.dependency 'FirebaseInstallations', '~> 10.21.0'
   end
 
   s.subspec 'Messaging' do |ss|
     ss.dependency 'Firebase/CoreOnly'
-    ss.dependency 'FirebaseMessaging', '~> 10.23.0'
+    ss.dependency 'FirebaseMessaging', '~> 10.21.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.23.0-beta'
+    ss.dependency 'FirebaseMLModelDownloader', '~> 10.21.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.23.0'
-    ss.tvos.dependency 'FirebasePerformance', '~> 10.23.0'
+    ss.ios.dependency 'FirebasePerformance', '~> 10.21.0'
+    ss.tvos.dependency 'FirebasePerformance', '~> 10.21.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.23.0'
+    ss.dependency 'FirebaseRemoteConfig', '~> 10.21.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.23.0'
+    ss.dependency 'FirebaseStorage', '~> 10.21.0'
     # Standard platforms PLUS watchOS.
     ss.ios.deployment_target = '11.0'
     ss.osx.deployment_target = '10.13'

+ 2 - 5
FirebaseABTesting.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseABTesting'
-  s.version          = '10.23.0'
+  s.version          = '10.21.0'
   s.summary          = 'Firebase ABTesting'
 
   s.description      = <<-DESC
@@ -32,7 +32,7 @@ Firebase Cloud Messaging and Firebase Remote Config in your app.
   s.tvos.deployment_target = tvos_deployment_target
   s.watchos.deployment_target = watchos_deployment_target
 
-  s.cocoapods_version = '>= 1.12.0'
+  s.cocoapods_version = '>= 1.4.0'
   s.prefix_header_file = false
 
   s.swift_version = '5.3'
@@ -43,9 +43,6 @@ Firebase Cloud Messaging and Firebase Remote Config in your app.
    'Interop/Analytics/Public/*.h',
    'FirebaseCore/Extension/*.h',
   ]
-  s.resource_bundles = {
-    "#{s.module_name}_Privacy" => 'FirebaseABTesting/Sources/Resources/PrivacyInfo.xcprivacy'
-  }
   s.requires_arc = base_dir + '*.m'
   s.public_header_files = base_dir + 'Public/FirebaseABTesting/*.h'
   s.pod_target_xcconfig = {

+ 0 - 18
FirebaseABTesting/Sources/Resources/PrivacyInfo.xcprivacy

@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-        <key>NSPrivacyTracking</key>
-        <false/>
-        <key>NSPrivacyTrackingDomains</key>
-        <array>
-        </array>
-        <key>NSPrivacyCollectedDataTypes</key>
-        <array>
-        </array>
-        <key>NSPrivacyAccessedAPITypes</key>
-        <array>
-        </array>
-</dict>
-</plist>
-

+ 6 - 6
FirebaseAnalytics.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
     s.name             = 'FirebaseAnalytics'
-    s.version          = '10.23.0'
+    s.version          = '10.21.0'
     s.summary          = 'Firebase Analytics for iOS'
 
     s.description      = <<-DESC
@@ -13,10 +13,10 @@ Pod::Spec.new do |s|
     s.authors          = 'Google, Inc.'
 
     s.source           = {
-        :http => 'https://dl.google.com/firebase/ios/analytics/dedc8d0f648c53b6/FirebaseAnalytics-10.23.0.tar.gz'
+        :http => 'https://dl.google.com/firebase/ios/analytics/0199e7929b47e2d9/FirebaseAnalytics-10.20.0.tar.gz'
     }
 
-    s.cocoapods_version = '>= 1.12.0'
+    s.cocoapods_version = '>= 1.10.0'
     s.swift_version     = '5.3'
 
     s.ios.deployment_target  = '10.0'
@@ -32,17 +32,17 @@ Pod::Spec.new do |s|
     s.dependency 'GoogleUtilities/MethodSwizzler', '~> 7.11'
     s.dependency 'GoogleUtilities/NSData+zlib', '~> 7.11'
     s.dependency 'GoogleUtilities/Network', '~> 7.11'
-    s.dependency 'nanopb', '>= 2.30908.0', '< 2.30911.0'
+    s.dependency 'nanopb', '>= 2.30908.0', '< 2.30910.0'
 
     s.default_subspecs = 'AdIdSupport'
 
     s.subspec 'AdIdSupport' do |ss|
-        ss.dependency 'GoogleAppMeasurement', '10.23.0'
+        ss.dependency 'GoogleAppMeasurement', '10.21.0'
         ss.vendored_frameworks = 'Frameworks/FirebaseAnalytics.xcframework'
     end
 
     s.subspec 'WithoutAdIdSupport' do |ss|
-        ss.dependency 'GoogleAppMeasurement/WithoutAdIdSupport', '10.23.0'
+        ss.dependency 'GoogleAppMeasurement/WithoutAdIdSupport', '10.21.0'
         ss.vendored_frameworks = 'Frameworks/FirebaseAnalytics.xcframework'
     end
 

+ 3 - 3
FirebaseAnalyticsOnDeviceConversion.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
     s.name             = 'FirebaseAnalyticsOnDeviceConversion'
-    s.version          = '10.23.0'
+    s.version          = '10.21.0'
     s.summary          = 'On device conversion measurement plugin for FirebaseAnalytics. Not intended for direct use.'
 
     s.description      = <<-DESC
@@ -16,9 +16,9 @@ Pod::Spec.new do |s|
       :tag => 'CocoaPods-' + s.version.to_s
     }
 
-    s.cocoapods_version = '>= 1.12.0'
+    s.cocoapods_version = '>= 1.10.2'
 
-    s.dependency 'GoogleAppMeasurementOnDeviceConversion', '10.23.0'
+    s.dependency 'GoogleAppMeasurementOnDeviceConversion', '10.21.0'
 
     s.static_framework = true
 

+ 1 - 1
FirebaseAnalyticsSwift.podspec

@@ -27,7 +27,7 @@ Firebase Analytics is a free, out-of-the-box analytics solution that inspires ac
   s.osx.deployment_target   = osx_deployment_target
   s.tvos.deployment_target  = tvos_deployment_target
 
-  s.cocoapods_version       = '>= 1.12.0'
+  s.cocoapods_version       = '>= 1.10.0'
   s.prefix_header_file      = false
 
   s.source_files = [

+ 0 - 2
FirebaseAnalyticsSwift/Tests/ObjCAPI/ObjCAPITests.m

@@ -60,8 +60,6 @@
 - (void)onDeviceConversionTests:(NSURL *)url {
   [FIRAnalytics initiateOnDeviceConversionMeasurementWithEmailAddress:@"a@.a.com"];
   [FIRAnalytics initiateOnDeviceConversionMeasurementWithPhoneNumber:@"+15555555555"];
-  [FIRAnalytics initiateOnDeviceConversionMeasurementWithHashedEmailAddress:[NSData data]];
-  [FIRAnalytics initiateOnDeviceConversionMeasurementWithHashedPhoneNumber:[NSData data]];
 }
 
 - (NSArray<NSString *> *)eventNames {

+ 0 - 2
FirebaseAnalyticsSwift/Tests/SwiftUnit/AnalyticsAPITests.swift

@@ -73,8 +73,6 @@ final class AnalyticsAPITests {
 
     Analytics.initiateOnDeviceConversionMeasurement(emailAddress: "test@gmail.com")
     Analytics.initiateOnDeviceConversionMeasurement(phoneNumber: "+15555555555")
-    Analytics.initiateOnDeviceConversionMeasurement(hashedEmailAddress: Data())
-    Analytics.initiateOnDeviceConversionMeasurement(hashedPhoneNumber: Data())
 
     // MARK: - EventNames
 

+ 2 - 2
FirebaseAppCheck.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseAppCheck'
-  s.version          = '10.23.0'
+  s.version          = '10.21.0'
   s.summary          = 'Firebase App Check SDK.'
 
   s.description      = <<-DESC
@@ -29,7 +29,7 @@ Pod::Spec.new do |s|
   s.tvos.deployment_target = tvos_deployment_target
   s.watchos.deployment_target = watchos_deployment_target
 
-  s.cocoapods_version = '>= 1.12.0'
+  s.cocoapods_version = '>= 1.4.0'
   s.prefix_header_file = false
 
   base_dir = "FirebaseAppCheck/"

+ 2 - 0
FirebaseAppCheck/Sources/Core/FIRAppCheck.m

@@ -48,6 +48,8 @@ NSString *const kFIRAppCheckAppNameNotificationKey = @"FIRAppCheckAppNameNotific
 
 static id<FIRAppCheckProviderFactory> _providerFactory;
 
+static NSString *const kDummyFACTokenValue = @"eyJlcnJvciI6IlVOS05PV05fRVJST1IifQ==";
+
 @interface FIRAppCheck () <FIRAppCheckInterop, GACAppCheckTokenDelegate>
 @property(class, nullable) id<FIRAppCheckProviderFactory> providerFactory;
 

+ 1 - 1
FirebaseAppCheckInterop.podspec

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

+ 2 - 2
FirebaseAppDistribution.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseAppDistribution'
-  s.version          = '10.23.0-beta'
+  s.version          = '10.21.0-beta'
   s.summary          = 'App Distribution for Firebase iOS SDK.'
 
   s.description      = <<-DESC
@@ -19,7 +19,7 @@ iOS SDK for App Distribution for Firebase.
 
   s.swift_version = '5.3'
 
-  s.cocoapods_version = '>= 1.12.0'
+  s.cocoapods_version = '>= 1.4.0'
   s.prefix_header_file = false
 
   base_dir = "FirebaseAppDistribution/Sources/"

+ 4 - 6
FirebaseAuth.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
   s.name             = 'FirebaseAuth'
-  s.version          = '10.23.0'
+  s.version          = '10.21.0'
   s.summary          = 'Apple platform client for Firebase Authentication'
 
   s.description      = <<-DESC
@@ -31,7 +31,7 @@ supports email and password accounts, as well as several 3rd party authenticatio
   s.tvos.deployment_target = tvos_deployment_target
   s.watchos.deployment_target = watchos_deployment_target
 
-  s.cocoapods_version = '>= 1.12.0'
+  s.cocoapods_version = '>= 1.4.0'
   s.prefix_header_file = false
 
   source = 'FirebaseAuth/Sources/'
@@ -41,9 +41,7 @@ supports email and password accounts, as well as several 3rd party authenticatio
     source + 'Public/FirebaseAuth/*.h'
   ]
   s.public_header_files = source + 'Public/FirebaseAuth/*.h'
-  s.resource_bundles = {
-    "#{s.module_name}_Privacy" => 'FirebaseAuth/Sources/Resources/PrivacyInfo.xcprivacy'
-  }
+
   s.preserve_paths = [
     'FirebaseAuth/README.md',
     'FirebaseAuth/CHANGELOG.md'
@@ -55,7 +53,7 @@ supports email and password accounts, as well as several 3rd party authenticatio
   }
   s.framework = 'Security'
   s.ios.framework = 'SafariServices'
-  s.dependency 'FirebaseAuthInterop', '~> 10.22'
+  s.dependency 'FirebaseAuthInterop', '~> 10.9'
   s.dependency 'FirebaseAppCheckInterop', '~> 10.17'
   s.dependency 'FirebaseCore', '~> 10.0'
   s.dependency 'FirebaseCoreExtension', '~> 10.0'

+ 1 - 1
FirebaseAuth/Interop/CMakeLists.txt

@@ -16,7 +16,7 @@ if(NOT APPLE)
   return()
 endif()
 
-file(GLOB headers Public/FirebaseAuthInterop/*.h)
+file(GLOB headers Public/*.h)
 firebase_ios_generate_dummy_source(FirebaseAuthInterop sources)
 
 firebase_ios_add_framework(

+ 0 - 0
FirebaseAuth/Interop/Public/FirebaseAuthInterop/FIRAuthInterop.h → FirebaseAuth/Interop/FIRAuthInterop.h


+ 0 - 50
FirebaseAuth/Sources/Resources/PrivacyInfo.xcprivacy

@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-        <key>NSPrivacyTracking</key>
-        <false/>
-        <key>NSPrivacyTrackingDomains</key>
-        <array>
-        </array>
-        <key>NSPrivacyCollectedDataTypes</key>
-        <array>
-                <dict>
-                        <key>NSPrivacyCollectedDataType</key>
-                        <string>NSPrivacyCollectedDataTypeOtherDiagnosticData</string>
-                        <key>NSPrivacyCollectedDataTypeLinked</key>
-                        <false/>
-                        <key>NSPrivacyCollectedDataTypeTracking</key>
-                        <false/>
-                        <key>NSPrivacyCollectedDataTypePurposes</key>
-                        <array>
-                                <string>NSPrivacyCollectedDataTypePurposeAnalytics</string>
-                        </array>
-                </dict>
-                <dict>
-                        <key>NSPrivacyCollectedDataType</key>
-                        <string>NSPrivacyCollectedDataTypeUserID</string>
-                        <key>NSPrivacyCollectedDataTypeLinked</key>
-                        <true/>
-                        <key>NSPrivacyCollectedDataTypeTracking</key>
-                        <false/>
-                        <key>NSPrivacyCollectedDataTypePurposes</key>
-                        <array>
-                                <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
-                        </array>
-                </dict>
-        </array>
-        <key>NSPrivacyAccessedAPITypes</key>
-        <array>
-                <dict>
-                        <key>NSPrivacyAccessedAPIType</key>
-                        <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
-                        <key>NSPrivacyAccessedAPITypeReasons</key>
-                        <array>
-                                <string>CA92.1</string>
-                        </array>
-                </dict>
-        </array>
-</dict>
-</plist>
-

+ 18 - 8
FirebaseAuth/Sources/Swift/ActionCode/ActionCodeInfo.swift

@@ -14,16 +14,24 @@
 
 import Foundation
 
-/// Manages information regarding action codes.
+/** @class ActionCodeInfo
+    @brief Manages information regarding action codes.
+ */
 @objc(FIRActionCodeInfo) open class ActionCodeInfo: NSObject {
-  /// The operation being performed.
+  /**
+      @brief The operation being performed.
+   */
   @objc public let operation: ActionCodeOperation
 
-  /// The email address to which the code was sent. The new email address in the case of
-  /// `ActionCodeOperation.recoverEmail`.
+  /** @property email
+      @brief The email address to which the code was sent. The new email address in the case of
+          `ActionCodeOperationRecoverEmail`.
+   */
   @objc public let email: String?
 
-  /// The email that is being recovered in the case of `ActionCodeOperation.recoverEmail`.
+  /** @property previousEmail
+      @brief The email that is being recovered in the case of `ActionCodeOperationRecoverEmail`.
+   */
   @objc public let previousEmail: String?
 
   init(withOperation operation: ActionCodeOperation, email: String, newEmail: String?) {
@@ -37,9 +45,11 @@ import Foundation
     }
   }
 
-  /// Map a request type string to the corresponding operation type.
-  /// - Parameter requestType: Request type returned in in the server response.
-  /// - Returns: The corresponding ActionCodeOperation for the supplied request type.
+  /** @fn actionCodeOperationForRequestType:
+      @brief Returns the corresponding operation type per provided request type string.
+      @param requestType Request type returned in in the server response.
+      @return The corresponding ActionCodeOperation for the supplied request type.
+   */
   class func actionCodeOperation(forRequestType requestType: String?) -> ActionCodeOperation {
     switch requestType {
     case "PASSWORD_RESET": return .passwordReset

+ 10 - 8
FirebaseAuth/Sources/Swift/ActionCode/ActionCodeOperation.swift

@@ -14,26 +14,28 @@
 
 import Foundation
 
-/// Operations which can be performed with action codes.
+/**
+   @brief Operations which can be performed with action codes.
+ */
 @objc(FIRActionCodeOperation) public enum ActionCodeOperation: Int, @unchecked Sendable {
-  /// Action code for unknown operation.
+  /** Action code for unknown operation. */
   case unknown = 0
 
-  /// Action code for password reset operation.
+  /** Action code for password reset operation. */
   case passwordReset = 1
 
-  /// Action code for verify email operation.
+  /** Action code for verify email operation. */
   case verifyEmail = 2
 
-  /// Action code for recover email operation.
+  /** Action code for recover email operation. */
   case recoverEmail = 3
 
-  /// Action code for email link operation.
+  /** Action code for email link operation. */
   case emailLink = 4
 
-  /// Action code for verifying and changing email.
+  /** Action code for verifying and changing email */
   case verifyAndChangeEmail = 5
 
-  /// Action code for reverting second factor addition.
+  /** Action code for reverting second factor addition */
   case revertSecondFactorAddition = 6
 }

+ 43 - 25
FirebaseAuth/Sources/Swift/ActionCode/ActionCodeSettings.swift

@@ -14,49 +14,68 @@
 
 import Foundation
 
-/// Used to set and retrieve settings related to handling action codes.
+/** @class FIRActionCodeSettings
+    @brief Used to set and retrieve settings related to handling action codes.
+ */
 @objc(FIRActionCodeSettings) open class ActionCodeSettings: NSObject {
-  /// This URL represents the state/Continue URL in the form of a universal link.
-  ///
-  /// This URL can should be constructed as a universal link that would either directly open
-  /// the app where the action code would be handled or continue to the app after the action code
-  /// is handled by Firebase.
+  /** @property URL
+      @brief This URL represents the state/Continue URL in the form of a universal link.
+      @remarks This URL can should be constructed as a universal link that would either directly open
+          the app where the action code would be handled or continue to the app after the action code
+          is handled by Firebase.
+   */
   @objc(URL) open var url: URL?
 
-  /// Indicates whether the action code link will open the app directly or after being
-  /// redirected from a Firebase owned web widget.
+  /** @property handleCodeInApp
+      @brief Indicates whether the action code link will open the app directly or after being
+          redirected from a Firebase owned web widget.
+   */
   @objc open var handleCodeInApp: Bool = false
 
-  /// The iOS bundle ID, if available. The default value is the current app's bundle ID.
+  /** @property iOSBundleID
+      @brief The iOS bundle ID, if available. The default value is the current app's bundle ID.
+   */
   @objc open var iOSBundleID: String?
 
-  /// The Android package name, if available.
+  /** @property androidPackageName
+      @brief The Android package name, if available.
+   */
   @objc open var androidPackageName: String?
 
-  /// The minimum Android version supported, if available.
+  /** @property androidMinimumVersion
+      @brief The minimum Android version supported, if available.
+   */
   @objc open var androidMinimumVersion: String?
 
-  /// Indicates whether the Android app should be installed on a device where it is not available.
+  /** @property androidInstallIfNotAvailable
+      @brief Indicates whether the Android app should be installed on a device where it is not
+         available.
+   */
   @objc open var androidInstallIfNotAvailable: Bool = false
 
-  /// The Firebase Dynamic Link domain used for out of band code flow.
+  /** @property dynamicLinkDomain
+      @brief The Firebase Dynamic Link domain used for out of band code flow.
+   */
   @objc open var dynamicLinkDomain: String?
 
-  /// Sets the iOS bundle ID.
+  /** @fn
+      @brief Sets the iOS bundle Id.
+   */
+
   @objc override public init() {
     iOSBundleID = Bundle.main.bundleIdentifier
   }
 
-  /// Sets the Android package name, the flag to indicate whether or not to install the app,
-  /// and the minimum Android version supported.
-  ///
-  /// If `installIfNotAvailable` is set to `true` and the link is opened on an android device, it
-  /// will try to install the app if not already available. Otherwise the web URL is used.
-  /// - Parameters:
-  ///   - androidPackageName: The Android package name.
-  ///   - installIfNotAvailable: Indicates whether or not the app should be installed if not
-  /// available.
-  ///   - minimumVersion: The minimum version of Android supported.
+  /** @fn
+      @brief Sets the Android package name, the flag to indicate whether or not to install the app
+          and the minimum Android version supported.
+      @param androidPackageName The Android package name.
+      @param installIfNotAvailable Indicates whether or not the app should be installed if not
+          available.
+      @param minimumVersion The minimum version of Android supported.
+      @remarks If installIfNotAvailable is set to YES and the link is opened on an android device, it
+          will try to install the app if not already available. Otherwise the web URL is used.
+   */
   @objc open func setAndroidPackageName(_ androidPackageName: String,
                                         installIfNotAvailable: Bool,
                                         minimumVersion: String?) {
@@ -65,7 +84,6 @@ import Foundation
     androidMinimumVersion = minimumVersion
   }
 
-  /// Sets the iOS bundle ID.
   open func setIOSBundleID(_ bundleID: String) {
     iOSBundleID = bundleID
   }

+ 24 - 12
FirebaseAuth/Sources/Swift/ActionCode/ActionCodeURL.swift

@@ -14,29 +14,41 @@
 
 import Foundation
 
-/// This class will allow developers to easily extract information about out of band links.
+/** @class FIRActionCodeURL
+    @brief This class will allow developers to easily extract information about out of band links.
+ */
 @objc(FIRActionCodeURL) open class ActionCodeURL: NSObject {
-  /// Returns the API key from the link. nil, if not provided.
+  /** @property APIKey
+      @brief Returns the API key from the link. nil, if not provided.
+   */
   @objc(APIKey) public let apiKey: String?
 
-  /// Returns the mode of oob action.
-  ///
-  /// The property will be of `ActionCodeOperation` type.
-  /// It will return `.unknown` if no oob action is provided.
+  /** @property operation
+      @brief Returns the mode of oob action. The property will be of `FIRActionCodeOperation` type.
+          It will return `FIRActionCodeOperationUnknown` if no oob action is provided.
+   */
   @objc public let operation: ActionCodeOperation
 
-  /// Returns the email action code from the link. nil, if not provided.
+  /** @property code
+      @brief Returns the email action code from the link. nil, if not provided.
+   */
   @objc public let code: String?
 
-  /// Returns the continue URL from the link. nil, if not provided.
+  /** @property continueURL
+      @brief Returns the continue URL from the link. nil, if not provided.
+   */
   @objc public let continueURL: URL?
 
-  /// Returns the language code from the link. nil, if not provided.
+  /** @property languageCode
+      @brief Returns the language code from the link. nil, if not provided.
+   */
   @objc public let languageCode: String?
 
-  /// Construct an `ActionCodeURL` from an out of band link (e.g. email link).
-  /// - Parameter link: The oob link string used to construct the action code URL.
-  /// - Returns: The ActionCodeURL object constructed based on the oob link provided.
+  /** @fn actionCodeURLWithLink:
+      @brief Construct an `ActionCodeURL` from an out of band link (e.g. email link).
+      @param link The oob link string used to construct the action code URL.
+      @return The `ActionCodeURL` object constructed based on the oob link provided.
+   */
   @objc(actionCodeURLWithLink:) public init?(link: String) {
     var queryItems = ActionCodeURL.parseURL(link)
     if queryItems.count == 0 {

Fișier diff suprimat deoarece este prea mare
+ 467 - 352
FirebaseAuth/Sources/Swift/Auth/Auth.swift


+ 17 - 14
FirebaseAuth/Sources/Swift/Auth/AuthComponent.swift

@@ -12,16 +12,19 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-import Foundation
-
 import FirebaseAppCheckInterop
-import FirebaseAuthInterop
 import FirebaseCore
 import FirebaseCoreExtension
+import Foundation
+
+@available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
+@objc(FIRAuthProvider) protocol AuthProvider {
+  @objc func auth() -> Auth
+}
 
 @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
 @objc(FIRAuthComponent)
-class AuthComponent: NSObject, Library, ComponentLifecycleMaintainer {
+class AuthComponent: NSObject, Library, AuthProvider, ComponentLifecycleMaintainer {
   // MARK: - Private Variables
 
   /// The app associated with all Auth instances in this container.
@@ -44,17 +47,17 @@ class AuthComponent: NSObject, Library, ComponentLifecycleMaintainer {
   // MARK: - Library conformance
 
   static func componentsToRegister() -> [Component] {
-    let authCreationBlock: ComponentCreationBlock = { container, isCacheable in
-      guard let app = container.app else { return nil }
-      isCacheable.pointee = true
-      return Auth(app: app)
-    }
     let appCheckInterop = Dependency(with: AppCheckInterop.self, isRequired: false)
-    let authInterop = Component(AuthInterop.self,
-                                instantiationTiming: .alwaysEager,
-                                dependencies: [appCheckInterop],
-                                creationBlock: authCreationBlock)
-    return [authInterop]
+    return [Component(AuthProvider.self,
+                      instantiationTiming: .alwaysEager,
+                      dependencies: [appCheckInterop]) { container, isCacheable in
+        guard let app = container.app else { return nil }
+        isCacheable.pointee = true
+        let newComponent = AuthComponent(app: app)
+        // Set up instances early enough so User on keychain will be decoded.
+        newComponent.auth()
+        return newComponent
+      }]
   }
 
   // MARK: - AuthProvider conformance

+ 21 - 15
FirebaseAuth/Sources/Swift/Auth/AuthDataResult.swift

@@ -17,29 +17,35 @@ import Foundation
 @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
 extension AuthDataResult: NSSecureCoding {}
 
-/// Helper object that contains the result of a successful sign-in, link and reauthenticate
-/// action.
-///
-/// It contains references to a `User` instance and an `AdditionalUserInfo` instance.
+/** @class AuthDataResult
+    @brief Helper object that contains the result of a successful sign-in, link and reauthenticate
+        action. It contains references to a `User` instance and a `AdditionalUserInfo` instance.
+ */
 @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
 @objc(FIRAuthDataResult) open class AuthDataResult: NSObject {
-  /// The signed in user.
+  /** @property user
+      @brief The signed in user.
+   */
   @objc public let user: User
 
-  /// If available, contains the additional IdP specific information about signed in user.
+  /** @property additionalUserInfo
+      @brief If available contains the additional IdP specific information about signed in user.
+   */
   @objc public let additionalUserInfo: AdditionalUserInfo?
 
-  /// This property will be non-nil after a successful headful-lite sign-in via
-  /// `signIn(with:uiDelegate:completion:)`.
-  ///
-  /// May be used to obtain the accessToken and/or IDToken
-  /// pertaining to a recently signed-in user.
+  /** @property credential
+      @brief This property will be non-nil after a successful headful-lite sign-in via
+          `signIn(with:uiDelegate:completion:)`. May be used to obtain the accessToken and/or IDToken
+          pertaining to a recently signed-in user.
+   */
   @objc public let credential: OAuthCredential?
 
-  /// Designated initializer.
-  /// - Parameter user: The signed in user reference.
-  /// - Parameter additionalUserInfo: The additional user info.
-  /// - Parameter credential: The updated OAuth credential if available.
+  /** @fn initWithUser:additionalUserInfo:
+   @brief Designated initializer.
+   @param user The signed in user reference.
+   @param additionalUserInfo The additional user info.
+   @param credential The updated OAuth credential if available.
+   */
   init(withUser user: User,
        additionalUserInfo: AdditionalUserInfo?,
        credential: OAuthCredential? = nil) {

+ 15 - 11
FirebaseAuth/Sources/Swift/Auth/AuthDispatcher.swift

@@ -14,22 +14,26 @@
 
 import Foundation
 
-/// A utility class used to facilitate scheduling tasks to be executed in the future.
+/** @class AuthDispatcher
+    @brief A utility class used to facilitate scheduling tasks to be executed in the future.
+ */
 class AuthDispatcher {
   static let shared = AuthDispatcher()
 
-  /// Allows custom implementation of dispatchAfterDelay:queue:callback:.
-  ///
-  /// Set to nil to restore default implementation.
+  /** @property dispatchAfterImplementation
+      @brief Allows custom implementation of dispatchAfterDelay:queue:callback:.
+      @remarks Set to nil to restore default implementation.
+   */
   var dispatchAfterImplementation: ((TimeInterval, DispatchQueue, @escaping () -> Void) -> Void)?
 
-  /// Schedules task in the future after a specified delay.
-  /// - Parameter delay: The delay in seconds after which the task will be scheduled to execute.
-  /// - Parameter queue: The dispatch queue on which the task will be submitted.
-  /// - Parameter task: The task(block) to be scheduled for future execution.
-  func dispatch(afterDelay delay: TimeInterval,
-                queue: DispatchQueue,
-                task: @escaping () -> Void) {
+  /** @fn dispatchAfterDelay:queue:callback:
+      @brief Schedules task in the future after a specified delay.
+
+      @param delay The delay in seconds after which the task will be scheduled to execute.
+      @param queue The dispatch queue on which the task will be submitted.
+      @param task The task (block) to be scheduled for future execution.
+   */
+  func dispatch(afterDelay delay: TimeInterval, queue: DispatchQueue, task: @escaping () -> Void) {
     if let dispatchAfterImplementation {
       dispatchAfterImplementation(delay, queue, task)
     } else {

+ 14 - 7
FirebaseAuth/Sources/Swift/Auth/AuthOperationType.swift

@@ -13,21 +13,28 @@
 // limitations under the License.
 
 import Foundation
-
-/// Indicates the type of operation performed for RPCs that support the operation parameter.
+/**
+    @brief Indicates the type of operation performed for RPCs that support the operation
+        parameter.
+ */
 enum AuthOperationType: Int {
-  /// Indicates that the operation type is uspecified.
+  /** Indicates that the operation type is uspecified.
+   */
   case unspecified = 0
 
-  /// Indicates that the operation type is sign in or sign up.
+  /** Indicates that the operation type is sign in or sign up.
+   */
   case signUpOrSignIn = 1
 
-  /// Indicates that the operation type is reauthentication.
+  /** Indicates that the operation type is reauthentication.
+   */
   case reauth = 2
 
-  /// Indicates that the operation type is update.
+  /** Indicates that the operation type is update.
+   */
   case update = 3
 
-  /// Indicates that the operation type is link.
+  /** Indicates that the operation type is link.
+   */
   case link = 4
 }

+ 6 - 4
FirebaseAuth/Sources/Swift/Auth/AuthSettings.swift

@@ -14,12 +14,14 @@
 
 import Foundation
 
-/// Determines settings related to an auth object.
+/** @class AuthSettings
+    @brief Determines settings related to an auth object.
+ */
 @objc(FIRAuthSettings) open class AuthSettings: NSObject, NSCopying {
-  /// Flag to determine whether app verification should be disabled for testing or not.
+  /** @property appVerificationDisabledForTesting
+      @brief Flag to determine whether app verification should be disabled for testing or not.
+   */
   @objc open var appVerificationDisabledForTesting: Bool
-
-  /// Flag to determine whether app verification should be disabled for testing or not.
   @objc open var isAppVerificationDisabledForTesting: Bool {
     get {
       return appVerificationDisabledForTesting

+ 38 - 23
FirebaseAuth/Sources/Swift/Auth/AuthTokenResult.swift

@@ -16,35 +16,48 @@ import Foundation
 
 extension AuthTokenResult: NSSecureCoding {}
 
-/// A data class containing the ID token JWT string and other properties associated with the
-/// token including the decoded payload claims.
+/** @class FIRAuthTokenResult
+    @brief A data class containing the ID token JWT string and other properties associated with the
+    token including the decoded payload claims.
+ */
 @objc(FIRAuthTokenResult) open class AuthTokenResult: NSObject {
-  /// Stores the JWT string of the ID token.
+  /** @property token
+   @brief Stores the JWT string of the ID token.
+   */
   @objc open var token: String
 
-  /// Stores the ID token's expiration date.
+  /** @property expirationDate
+   @brief Stores the ID token's expiration date.
+   */
   @objc open var expirationDate: Date
 
-  /// Stores the ID token's authentication date.
-  ///
-  /// This is the date the user was signed in and NOT the date the token was refreshed.
+  /** @property authDate
+   @brief Stores the ID token's authentication date.
+   @remarks This is the date the user was signed in and NOT the date the token was refreshed.
+   */
   @objc open var authDate: Date
 
-  /// Stores the date that the ID token was issued.
-  ///
-  /// This is the date last refreshed and NOT the last authentication date.
+  /** @property issuedAtDate
+   @brief Stores the date that the ID token was issued.
+   @remarks This is the date last refreshed and NOT the last authentication date.
+   */
   @objc open var issuedAtDate: Date
 
-  /// Stores sign-in provider through which the token was obtained.
+  /** @property signInProvider
+   @brief Stores sign-in provider through which the token was obtained.
+   @remarks This does not necessarily map to provider IDs.
+   */
   @objc open var signInProvider: String
 
-  /// Stores sign-in second factor through which the token was obtained.
+  /** @property signInSecondFactor
+   @brief Stores sign-in second factor through which the token was obtained.
+   */
   @objc open var signInSecondFactor: String
 
-  /// Stores the entire payload of claims found on the ID token.
-  ///
-  /// This includes the standard
-  /// reserved claims as well as custom claims set by the developer via the Admin SDK.
+  /** @property claims
+   @brief Stores the entire payload of claims found on the ID token. This includes the standard
+   reserved claims as well as custom claims set by the developer via the Admin SDK.
+   */
   @objc open var claims: [String: Any]
 
   private class func getTokenPayloadData(_ token: String) -> Data? {
@@ -55,12 +68,12 @@ extension AuthTokenResult: NSSecureCoding {}
       return nil
     }
 
-    /// The token payload is always the second index of the array.
+    // The token payload is always the second index of the array.
     let IDToken = tokenStringArray[1]
 
-    /// Convert the base64URL encoded string to a base64 encoded string.
-    /// * Replace "_" with "/"
-    /// * Replace "-" with "+"
+    // Convert the base64URL encoded string to a base64 encoded string.
+    // Replace "_" with "/"
+    // Replace "-" with "+"
     var tokenPayload = IDToken.replacingOccurrences(of: "_", with: "/")
       .replacingOccurrences(of: "-", with: "+")
 
@@ -91,9 +104,11 @@ extension AuthTokenResult: NSSecureCoding {}
     return jwt
   }
 
-  /// Parse a token string to a structured token.
-  /// - Parameter token: The token string to parse.
-  /// - Returns: A structured token result.
+  /** @fn tokenResultWithToken:
+       @brief Parse a token string to a structured token.
+       @param token The token string to parse.
+       @return A structured token result.
+   */
   @objc open class func tokenResult(token: String) -> AuthTokenResult? {
     guard let payloadData = getTokenPayloadData(token),
           let claims = getTokenPayloadDictionary(payloadData),

+ 3 - 3
FirebaseAuth/Sources/Swift/AuthProvider/AuthCredential.swift

@@ -14,12 +14,12 @@
 
 import Foundation
 
-/// Public representation of a credential.
+/**
+    @brief Public representation of a credential.
+ */
 @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
 @objc(FIRAuthCredential) open class AuthCredential: NSObject {
-  /// The name of the identity provider for the credential.
   @objc public let provider: String
-
   init(provider: String) {
     self.provider = provider
   }

+ 0 - 1
FirebaseAuth/Sources/Swift/AuthProvider/AuthProviderStrings.swift

@@ -14,7 +14,6 @@
 
 import Foundation
 
-/// Enumeration of the available Auth Providers.
 public enum AuthProviderString: String {
   case apple = "apple.com"
   case email = "password"

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff