diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml index 6cd7c871dd1..06f35e92362 100644 --- a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml @@ -46,7 +46,7 @@ body: attributes: label: Xcode Version description: What version of Xcode is being used? - placeholder: "14.3" + placeholder: "15.3" validations: required: true - type: dropdown @@ -84,6 +84,7 @@ body: - Performance - Remote Config - Storage + - VertexAI - All - Infrastructure validations: diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml index 778ced1b8a4..77723218db5 100644 --- a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml @@ -64,5 +64,6 @@ body: - Performance - Remote Config - Storage + - Vertex AI validations: required: true diff --git a/.github/actions/notices_generation/app.rb b/.github/actions/notices_generation/app.rb index 5a1c268a204..d1608e61164 100644 --- a/.github/actions/notices_generation/app.rb +++ b/.github/actions/notices_generation/app.rb @@ -38,7 +38,7 @@ begin OptionParser.new do |opts| opts.banner = "Usage: app.rb [options]" - opts.on('-p', '--pods PODS', 'Pods seperated by space or comma.') { |v| @options[:pods] = v.split(/[ ,]/) } + opts.on('-p', '--pods PODS', 'Pods separated by space or comma.') { |v| @options[:pods] = v.split(/[ ,]/) } opts.on('-s', '--sources SOURCES', 'Sources of Pods') { |v| @options[:sources] = v.split(/[ ,]/) } opts.on('-m', '--min_ios_version MIN_IOS_VERSION', 'Minimum iOS version') { |v| @options[:min_ios_version] = v } opts.on('-n', '--notices_path OUTPUT_PATH', 'The output path of NOTICES') { |v| @options[:output_path] = v } diff --git a/.github/workflows/abtesting.yml b/.github/workflows/abtesting.yml index 84e2719bde0..9c7bd5a1417 100644 --- a/.github/workflows/abtesting.yml +++ b/.github/workflows/abtesting.yml @@ -24,10 +24,10 @@ jobs: matrix: # TODO: macos tests are blocked by https://github.com/erikdoe/ocmock/pull/532 target: [ios, tvos, macos --skip-tests, watchos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -52,12 +52,17 @@ jobs: strategy: matrix: target: [iOS, tvOS, macOS, catalyst, watchOS] - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.2 + target: visionOS runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -80,7 +85,7 @@ jobs: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 @@ -104,7 +109,7 @@ jobs: env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -127,7 +132,7 @@ jobs: env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -156,7 +161,7 @@ jobs: # Don't run on private repo. if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [ios, tvos, macos] diff --git a/.github/workflows/analytics.yml b/.github/workflows/analytics.yml index 503d4faa70f..0c6c12f98c0 100644 --- a/.github/workflows/analytics.yml +++ b/.github/workflows/analytics.yml @@ -23,10 +23,10 @@ jobs: strategy: matrix: target: [ios, tvos, macos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} diff --git a/.github/workflows/appdistribution.yml b/.github/workflows/appdistribution.yml index 882d00b134c..74670a14f2e 100644 --- a/.github/workflows/appdistribution.yml +++ b/.github/workflows/appdistribution.yml @@ -22,10 +22,10 @@ jobs: strategy: matrix: target: [ios] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -47,10 +47,10 @@ jobs: strategy: matrix: - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -70,7 +70,7 @@ jobs: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 @@ -85,7 +85,7 @@ jobs: appdistribution-cron-only: if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [ios] diff --git a/.github/workflows/archiving.yml b/.github/workflows/archiving.yml index b503d4ef2d9..8d60f6785b4 100644 --- a/.github/workflows/archiving.yml +++ b/.github/workflows/archiving.yml @@ -19,7 +19,7 @@ jobs: # Don't run on private repo. if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: # These need to be on a single line or else the formatting won't validate. @@ -41,7 +41,7 @@ jobs: # Don't run on private repo. if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [ios, tvos, macos] diff --git a/.github/workflows/auth.yml b/.github/workflows/auth.yml index 9c536268dbd..514a469f964 100644 --- a/.github/workflows/auth.yml +++ b/.github/workflows/auth.yml @@ -27,10 +27,10 @@ jobs: podspec: [FirebaseAuthInterop.podspec, FirebaseAuth.podspec] # TODO: macos tests are blocked by https://github.com/erikdoe/ocmock/pull/532 target: [ios, tvos, macos --skip-tests, watchos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 tests: --skip-tests - os: macos-13 xcode: Xcode_15.2 @@ -103,14 +103,18 @@ jobs: strategy: matrix: target: [iOS, tvOS, macOS, catalyst, watchOS] - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - test: spm - os: macos-13 xcode: Xcode_15.2 test: spmbuildonly + - os: macos-14 + xcode: Xcode_15.3 + test: spmbuildonly + - os: macos-14 + xcode: Xcode_15.3 + target: visionOS + test: spm runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -132,7 +136,7 @@ jobs: catalyst: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 @@ -156,7 +160,7 @@ jobs: env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -176,7 +180,7 @@ jobs: # env: # plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} # signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - # runs-on: macos-12 + # runs-on: macos-14 # steps: # - uses: actions/checkout@v4 # - uses: ruby/setup-ruby@v1 @@ -198,7 +202,7 @@ jobs: # Don't run on private repo. if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: # The macos and tvos tests can hang, and watchOS doesn't have tests. diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index e2d27fede39..169ff7a2752 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -15,7 +15,7 @@ jobs: check: # Don't run on private repo. if: github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 env: MINT_PATH: ${{ github.workspace }}/mint steps: diff --git a/.github/workflows/client_app.yml b/.github/workflows/client_app.yml index 6f8112b51dc..8d5d71c6b61 100644 --- a/.github/workflows/client_app.yml +++ b/.github/workflows/client_app.yml @@ -25,7 +25,7 @@ concurrency: jobs: client-app-spm: if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' - runs-on: macos-13 + runs-on: macos-14 strategy: matrix: #TODO(ncooke3): Add multi-platform support: tvOS, macOS, catalyst @@ -37,7 +37,7 @@ jobs: with: cache_key: ${{ matrix.os }} - name: Xcode - run: sudo xcode-select -s /Applications/Xcode_15.1.app/Contents/Developer + run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer - name: Build Client App –– ${{ matrix.platform }} run: scripts/third_party/travis/retry.sh ./scripts/build.sh ${{ matrix.scheme }} ${{ matrix.platform }} xcodebuild @@ -46,7 +46,7 @@ jobs: env: FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1 FIREBASE_SOURCE_FIRESTORE: 1 - runs-on: macos-13 + runs-on: macos-14 strategy: matrix: #TODO(ncooke3): Add multi-platform support: tvOS, macOS, catalyst @@ -58,14 +58,14 @@ jobs: with: cache_key: ${{ matrix.os }} - name: Xcode - run: sudo xcode-select -s /Applications/Xcode_15.1.app/Contents/Developer + run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer - name: Build Client App –– ${{ matrix.platform }} run: scripts/third_party/travis/retry.sh ./scripts/build.sh ${{ matrix.scheme }} ${{ matrix.platform }} xcodebuild client-app-cocoapods: # 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' - runs-on: macos-13 + runs-on: macos-14 strategy: matrix: scheme: [ClientApp-CocoaPods, ClientApp-CocoaPods-iOS13] @@ -78,7 +78,7 @@ jobs: - name: Setup Bundler run: scripts/setup_bundler.sh - name: Xcode - run: sudo xcode-select -s /Applications/Xcode_15.1.app/Contents/Developer + run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer - name: Prereqs run: scripts/install_prereqs.sh ClientApp iOS xcodebuild - name: Build diff --git a/.github/workflows/cocoapods-integration.yml b/.github/workflows/cocoapods-integration.yml index c182ff0701d..bd82129d66f 100644 --- a/.github/workflows/cocoapods-integration.yml +++ b/.github/workflows/cocoapods-integration.yml @@ -19,7 +19,7 @@ jobs: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 diff --git a/.github/workflows/combine.yml b/.github/workflows/combine.yml index 3ef54c8c4f1..de4baabf3bc 100644 --- a/.github/workflows/combine.yml +++ b/.github/workflows/combine.yml @@ -48,7 +48,7 @@ jobs: xcodebuild: # 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' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: @@ -76,7 +76,7 @@ jobs: if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index cd74aa4e9ae..5df6aad888a 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -22,10 +22,10 @@ jobs: matrix: # TODO: macos tests are blocked by https://github.com/erikdoe/ocmock/pull/532 target: [ios, tvos, macos --skip-tests, watchos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -45,12 +45,15 @@ jobs: strategy: matrix: target: [iOS, tvOS, macOS, catalyst, watchOS] - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 + - os: macos-14 + xcode: Xcode_15.3 + target: visionOS runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/core_extension.yml b/.github/workflows/core_extension.yml index fdfc4692616..1afaa4bb3de 100644 --- a/.github/workflows/core_extension.yml +++ b/.github/workflows/core_extension.yml @@ -20,10 +20,10 @@ jobs: strategy: matrix: target: [ios, tvos, macos, watchos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -40,7 +40,7 @@ jobs: core-internal-cron-only: # Don't run on private repo. if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [ios, tvos, macos] diff --git a/.github/workflows/core_internal.yml b/.github/workflows/core_internal.yml index fc0edb777f6..f05eb0cfd0f 100644 --- a/.github/workflows/core_internal.yml +++ b/.github/workflows/core_internal.yml @@ -18,10 +18,10 @@ jobs: strategy: matrix: target: [ios, tvos, macos, watchos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -41,12 +41,15 @@ jobs: strategy: matrix: target: [iOS, tvOS, macOS, catalyst, watchOS] - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 + - os: macos-14 + xcode: Xcode_15.3 + target: visionOS runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -60,7 +63,7 @@ jobs: catalyst: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 @@ -77,7 +80,7 @@ jobs: core-internal-cron-only: # Don't run on private repo. if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [ios, tvos, macos] diff --git a/.github/workflows/crashlytics.yml b/.github/workflows/crashlytics.yml index ad4f618f40e..39fb5aee43a 100644 --- a/.github/workflows/crashlytics.yml +++ b/.github/workflows/crashlytics.yml @@ -25,10 +25,14 @@ jobs: strategy: matrix: target: [ios, tvos, macos, watchos --skip-tests] - os: [macos-12, macos-13] + os: [macos-14, macos-13] + flags: [ + '--use-modular-headers', + '' + ] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 tests: --skip-tests - os: macos-13 xcode: Xcode_15.2 @@ -47,7 +51,7 @@ jobs: max_attempts: 3 retry_on: error retry_wait_seconds: 120 - command: scripts/pod_lib_lint.rb FirebaseCrashlytics.podspec --platforms=${{ matrix.target }} ${{ matrix.tests }} + command: scripts/pod_lib_lint.rb FirebaseCrashlytics.podspec --platforms=${{ matrix.target }} ${{ matrix.tests }} ${{ matrix.flags }} spm: # Don't run on private repo unless it is a PR. @@ -55,12 +59,15 @@ jobs: strategy: matrix: target: [iOS, tvOS, macOS, catalyst, watchOS] - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 + - os: macos-14 + xcode: Xcode_15.3 + target: visionOS runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -83,7 +90,7 @@ jobs: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 @@ -107,7 +114,7 @@ jobs: env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -139,7 +146,7 @@ jobs: env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -177,7 +184,7 @@ jobs: # Don't run on private repo. if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: # Disable watchos because it does not support XCTest. diff --git a/.github/workflows/danger.yml b/.github/workflows/danger.yml index d9d66407e4e..51ff108f822 100644 --- a/.github/workflows/danger.yml +++ b/.github/workflows/danger.yml @@ -9,7 +9,7 @@ concurrency: jobs: danger: - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 diff --git a/.github/workflows/database.yml b/.github/workflows/database.yml index 857e559b023..309c80ffbc0 100644 --- a/.github/workflows/database.yml +++ b/.github/workflows/database.yml @@ -27,10 +27,10 @@ jobs: matrix: # TODO: macos tests are blocked by https://github.com/erikdoe/ocmock/pull/532 target: [ios, tvos, macos --skip-tests, watchos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 tests: --skip-tests - os: macos-13 xcode: Xcode_15.2 @@ -49,7 +49,7 @@ jobs: integration: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 @@ -70,12 +70,15 @@ jobs: strategy: matrix: target: [iOS, tvOS, macOS, catalyst, watchOS] - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 + - os: macos-14 + xcode: Xcode_15.3 + target: visionOS runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -94,7 +97,7 @@ jobs: catalyst: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 @@ -112,7 +115,7 @@ jobs: env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -129,7 +132,7 @@ jobs: database-cron-only: # Don't run on private repo. if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: podspec: [FirebaseDatabase.podspec, FirebaseDatabaseSwift.podspec --allow-warnings] diff --git a/.github/workflows/dynamiclinks.yml b/.github/workflows/dynamiclinks.yml index 310b7a88de6..a04cefe68b1 100644 --- a/.github/workflows/dynamiclinks.yml +++ b/.github/workflows/dynamiclinks.yml @@ -22,10 +22,10 @@ jobs: strategy: matrix: - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -44,10 +44,10 @@ jobs: if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' strategy: matrix: - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -67,7 +67,7 @@ jobs: # Don't run on private repo. if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: flags: [ @@ -89,7 +89,7 @@ jobs: env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -116,7 +116,7 @@ jobs: env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 diff --git a/.github/workflows/firebase_app_check.yml b/.github/workflows/firebase_app_check.yml index 4893fe26042..c2775348cb3 100644 --- a/.github/workflows/firebase_app_check.yml +++ b/.github/workflows/firebase_app_check.yml @@ -23,12 +23,12 @@ jobs: podspec: [FirebaseAppCheckInterop.podspec, FirebaseAppCheck.podspec] # TODO: macos tests are blocked by https://github.com/erikdoe/ocmock/pull/532 target: [ios, tvos, macos --skip-tests, watchos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -45,7 +45,7 @@ jobs: catalyst: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -57,7 +57,7 @@ jobs: diagnostics: # 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' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: diagnostic: [tsan, asan, ubsan] @@ -80,7 +80,7 @@ jobs: app_check-cron-only: # Don't run on private repo. if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: flags: [ @@ -102,10 +102,10 @@ jobs: strategy: matrix: target: [iOS, tvOS, macOS, catalyst, watchOS] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} diff --git a/.github/workflows/firestore-nightly.yml b/.github/workflows/firestore-nightly.yml index 753c3e732f7..98c73dbf322 100644 --- a/.github/workflows/firestore-nightly.yml +++ b/.github/workflows/firestore-nightly.yml @@ -23,7 +23,7 @@ concurrency: jobs: check: - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v3 @@ -42,7 +42,7 @@ jobs: strategy: matrix: - os: [macos-12] + os: [macos-14] databaseId: [(default)] env: diff --git a/.github/workflows/firestore.yml b/.github/workflows/firestore.yml index cc257911e3f..ccf74fc36cb 100644 --- a/.github/workflows/firestore.yml +++ b/.github/workflows/firestore.yml @@ -26,7 +26,7 @@ concurrency: jobs: changes: - runs-on: macos-12 + runs-on: macos-14 # Only when this is not a scheduled run if: github.event_name != 'schedule' outputs: @@ -83,7 +83,7 @@ jobs: if: | (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || (github.event_name == 'pull_request' && needs.changes.outputs.changed == 'true') - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 @@ -105,6 +105,7 @@ jobs: (github.event_name == 'pull_request' && needs.changes.outputs.changed == 'true') strategy: matrix: + # TODO(#12769): Update to macos-14 which doesn't include Python 3.7 os: [macos-12, ubuntu-latest] env: @@ -152,6 +153,7 @@ jobs: strategy: matrix: + # TODO(#12769): Update to macos-14 which doesn't include Python 3.7 os: [macos-12] databaseId: [(default), test-db] @@ -239,6 +241,7 @@ jobs: strategy: matrix: + # TODO(#12769): Update to macos-14 which doesn't include Python 3.7 os: [macos-12] sanitizer: [asan, tsan] @@ -323,12 +326,12 @@ jobs: if: | (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || (github.event_name == 'pull_request' && needs.changes.outputs.changed == 'true') - runs-on: macos-12 + runs-on: macos-14 needs: check strategy: matrix: - target: [iOS, tvOS, macOS] + target: [iOS, macOS, tvOS] steps: - uses: actions/checkout@v4 @@ -399,7 +402,7 @@ jobs: '--use-static-frameworks', '', ] - os: [macos-12, macos-13] + os: [macos-14, macos-13] # TODO: grpc and its dependencies don't build on Xcode 15 for macos because their minimum macos is lower than 10.11. exclude: - os: macos-13 @@ -408,8 +411,8 @@ jobs: - os: macos-13 platforms: 'ios' include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -440,12 +443,15 @@ jobs: strategy: matrix: target: [iOS, tvOS, macOS] - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 + - os: macos-14 + xcode: Xcode_15.3 + target: visionOS runs-on: ${{ matrix.os }} needs: check env: @@ -460,16 +466,16 @@ jobs: - name: Initialize xcodebuild run: scripts/setup_spm_tests.sh - name: iOS Build Test - run: scripts/third_party/travis/retry.sh ./scripts/build.sh FirebaseFirestore iOS spmbuildonly + run: scripts/third_party/travis/retry.sh ./scripts/build.sh FirebaseFirestore ${{ matrix.target }} spmbuildonly - name: Swift Build - run: scripts/third_party/travis/retry.sh ./scripts/build.sh FirebaseFirestoreSwift iOS spmbuildonly + run: scripts/third_party/travis/retry.sh ./scripts/build.sh FirebaseFirestoreSwift ${{ matrix.target }} spmbuildonly spm-binary: # Either a scheduled run from public repo, or a pull request with firestore changes. if: | (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || (github.event_name == 'pull_request' && needs.changes.outputs.changed == 'true') - runs-on: macos-12 + runs-on: macos-14 needs: check steps: - uses: actions/checkout@v4 @@ -483,11 +489,42 @@ jobs: - name: Swift Build run: scripts/third_party/travis/retry.sh ./scripts/build.sh FirebaseFirestoreSwift iOS spmbuildonly + check-firestore-internal-public-headers: + # Either a scheduled run from public repo, or a pull request with firestore changes. + if: | + (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || + (github.event_name == 'pull_request' && needs.changes.outputs.changed == 'true') + runs-on: macos-14 + needs: check + steps: + - uses: actions/checkout@v4 + - name: Assert that Firestore and FirestoreInternal have identically named headers. + run: | + fst_dir=Firestore/Source/Public/FirebaseFirestore/ + fst_internal_dir=FirebaseFirestoreInternal/FirebaseFirestore/ + + comparison=$(comm -3 <(ls $fst_dir | sort) <(ls $fst_internal_dir | sort)) + + if [[ -z "$comparison" ]]; then + echo "Success: Directories '$fst_dir' and '$fst_internal_dir' match." + else + echo "Error: Directories '$fst_dir' and '$fst_internal_dir' differ:" + echo "Files only in '$fst_dir':" + # Files in this set do not start with whitespace. Grep for them and a + # dashed prefix for nicer formatting. + echo "$comparison" | grep -v '^\s' | sed 's/^/- /' + echo "Files only in '$fst_internal_dir':" + # Files in this set start with whitespace. Grep for them and a dashed + # prefix for nicer formatting. + echo "$comparison" | grep '^\s' | sed 's/^ /- /' + exit 1 + fi + # TODO: Re-enable either in or after #11706. # spm-source-cron: # # Don't run on private repo. # if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - # runs-on: macos-12 + # runs-on: macos-14 # strategy: # matrix: # target: [tvOS, macOS, catalyst] @@ -508,7 +545,7 @@ jobs: spm-binary-cron: # Don't run on private repo. if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [tvOS, macOS, catalyst] @@ -545,7 +582,7 @@ jobs: # env: # plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} # signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - # runs-on: macos-12 + # runs-on: macos-14 # needs: check # steps: diff --git a/.github/workflows/functions.yml b/.github/workflows/functions.yml index 423b44bb372..915b25118e1 100644 --- a/.github/workflows/functions.yml +++ b/.github/workflows/functions.yml @@ -30,10 +30,10 @@ jobs: strategy: matrix: target: [ios, tvos, macos, watchos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -57,10 +57,10 @@ jobs: if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' strategy: matrix: - os: [macos-12] + os: [macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 runs-on: ${{ matrix.os }} env: FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1 @@ -88,12 +88,15 @@ jobs: strategy: matrix: target: [iOS, tvOS, macOS, catalyst, watchOS] - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 + - os: macos-14 + xcode: Xcode_15.3 + target: visionOS runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -114,6 +117,7 @@ jobs: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} LEGACY: true + # TODO: Move to macos-14 and Xcode 15. The legacy quickstart uses material which doesn't build on Xcode 15. runs-on: macos-12 steps: @@ -140,6 +144,7 @@ jobs: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} LEGACY: true + # TODO: Move to macos-14 and Xcode 15. The legacy quickstart uses material which doesn't build on Xcode 15. runs-on: macos-12 steps: @@ -172,7 +177,7 @@ jobs: # Don't run on private repo. if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [ios, tvos, macos] diff --git a/.github/workflows/google-utilities-components.yml b/.github/workflows/google-utilities-components.yml index 2fd416475fd..61d953e2872 100644 --- a/.github/workflows/google-utilities-components.yml +++ b/.github/workflows/google-utilities-components.yml @@ -20,7 +20,7 @@ jobs: # 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' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [ios, tvos, macos] @@ -38,7 +38,7 @@ jobs: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 @@ -54,7 +54,7 @@ jobs: # Don't run on private repo. if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [ios, tvos, macos] diff --git a/.github/workflows/health-metrics-presubmit.yml b/.github/workflows/health-metrics-presubmit.yml index c9fe876604c..e7e5aa1020c 100644 --- a/.github/workflows/health-metrics-presubmit.yml +++ b/.github/workflows/health-metrics-presubmit.yml @@ -61,7 +61,7 @@ jobs: needs: check # Don't run on private repo unless it is a PR. if: always() && github.repository == 'Firebase/firebase-ios-sdk' && (needs.check.outputs.abtesting_run_job == 'true'|| github.event.pull_request.merged) - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [iOS] @@ -84,7 +84,7 @@ jobs: needs: check # Don't run on private repo unless it is a PR. if: always() && github.repository == 'Firebase/firebase-ios-sdk' && (needs.check.outputs.auth_run_job == 'true'|| github.event.pull_request.merged) - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [iOS] @@ -104,7 +104,7 @@ jobs: needs: check # Don't run on private repo unless it is a PR. if: always() && github.repository == 'Firebase/firebase-ios-sdk' && (needs.check.outputs.database_run_job == 'true' || github.event.pull_request.merged) - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [iOS] @@ -129,7 +129,7 @@ jobs: needs: check # Don't run on private repo unless it is a PR. if: always() && github.repository == 'Firebase/firebase-ios-sdk' && (needs.check.outputs.dynamiclinks_run_job == 'true'|| github.event.pull_request.merged) - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [iOS] @@ -153,7 +153,7 @@ jobs: # Don't run on private repo unless it is a PR. # Disable Firestore for now since Firestore currently does not have unit tests in podspecs. if: always() && github.repository == 'Firebase/firebase-ios-sdk' && (needs.check.outputs.firestore_run_job == 'true'|| github.event.pull_request.merged) - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [iOS] @@ -178,7 +178,7 @@ jobs: needs: check # Don't run on private repo unless it is a PR. if: always() && github.repository == 'Firebase/firebase-ios-sdk' && (needs.check.outputs.functions_run_job == 'true'|| github.event.pull_request.merged) - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [iOS] @@ -201,7 +201,7 @@ jobs: needs: check # Don't run on private repo unless it is a PR. if: always() && github.repository == 'Firebase/firebase-ios-sdk' && (needs.check.outputs.inappmessaging_run_job == 'true'|| github.event.pull_request.merged) - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [iOS] @@ -224,7 +224,7 @@ jobs: needs: check # Don't run on private repo unless it is a PR. if: always() && github.repository == 'Firebase/firebase-ios-sdk' && (needs.check.outputs.messaging_run_job == 'true'|| github.event.pull_request.merged) - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [iOS] @@ -247,6 +247,7 @@ jobs: needs: check # Don't run on private repo unless it is a PR. if: always() && github.repository == 'Firebase/firebase-ios-sdk' && (needs.check.outputs.performance_run_job == 'true'|| github.event.pull_request.merged) + # TODO(#11903) Update to macos-14 runs-on: macos-12 strategy: matrix: @@ -272,7 +273,7 @@ jobs: needs: check # Don't run on private repo unless it is a PR. if: always() && github.repository == 'Firebase/firebase-ios-sdk' && (needs.check.outputs.remoteconfig_run_job == 'true'|| github.event.pull_request.merged) - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [iOS] @@ -295,7 +296,7 @@ jobs: needs: check # Don't run on private repo unless it is a PR. if: always() && github.repository == 'Firebase/firebase-ios-sdk' && (needs.check.outputs.storage_run_job == 'true'|| github.event.pull_request.merged) - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [iOS] @@ -317,7 +318,7 @@ jobs: create_report: needs: [check, pod-lib-lint-abtesting, pod-lib-lint-auth, pod-lib-lint-database, pod-lib-lint-dynamiclinks, pod-lib-lint-firestore, pod-lib-lint-functions, pod-lib-lint-inappmessaging, pod-lib-lint-messaging, pod-lib-lint-performance, pod-lib-lint-remoteconfig, pod-lib-lint-storage] if: always() - runs-on: macos-12 + runs-on: macos-14 steps: - name: Checkout code uses: actions/checkout@v4 diff --git a/.github/workflows/inappmessaging.yml b/.github/workflows/inappmessaging.yml index 6c4ced921da..918563e9213 100644 --- a/.github/workflows/inappmessaging.yml +++ b/.github/workflows/inappmessaging.yml @@ -24,10 +24,10 @@ jobs: strategy: matrix: podspec: [FirebaseInAppMessaging.podspec, FirebaseInAppMessagingSwift.podspec --allow-warnings] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -45,6 +45,7 @@ jobs: # 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(#12770): Update to macos-14 when tests are updated for Xcode 15. runs-on: macos-12 strategy: matrix: @@ -70,10 +71,10 @@ jobs: if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' strategy: matrix: - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -93,7 +94,7 @@ jobs: # Don't run on private repo. if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: flags: [ @@ -116,7 +117,7 @@ jobs: env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/installations.yml b/.github/workflows/installations.yml index 72ba9d5bd23..2b103346226 100644 --- a/.github/workflows/installations.yml +++ b/.github/workflows/installations.yml @@ -25,10 +25,10 @@ jobs: matrix: # TODO: macos tests are blocked by https://github.com/erikdoe/ocmock/pull/532 target: [ios, tvos, macos --skip-tests, watchos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 test-specs: unit,integration - os: macos-13 xcode: Xcode_15.2 @@ -64,12 +64,15 @@ jobs: matrix: # TODO: macos tests are blocked by https://github.com/erikdoe/ocmock/pull/532 target: [iOS, tvOS, macOS, watchOS, catalyst] - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 + - os: macos-14 + xcode: Xcode_15.3 + target: visionOS runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -85,7 +88,7 @@ jobs: catalyst: if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 @@ -101,7 +104,7 @@ jobs: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -118,7 +121,7 @@ jobs: # Don't run on private repo. if: github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -143,7 +146,7 @@ jobs: installations-cron-only: if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} FIR_IID_INTEGRATION_TESTS_REQUIRED: ${{ secrets.GHASecretsGPGPassphrase1 }} diff --git a/.github/workflows/messaging.yml b/.github/workflows/messaging.yml index 0524dbb8f76..d6a3234f127 100644 --- a/.github/workflows/messaging.yml +++ b/.github/workflows/messaging.yml @@ -59,10 +59,10 @@ jobs: matrix: podspec: [FirebaseMessagingInterop.podspec, FirebaseMessaging.podspec] target: [ios, tvos, macos --skip-tests, watchos --skip-tests] # skipping tests on mac because of keychain access - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 tests: --test-specs=unit - os: macos-13 xcode: Xcode_15.2 @@ -84,12 +84,15 @@ jobs: strategy: matrix: target: [iOS, watchOS, tvOS, macOS, catalyst] - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 + - os: macos-14 + xcode: Xcode_15.3 + target: visionOS runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -106,7 +109,7 @@ jobs: catalyst: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 @@ -127,8 +130,8 @@ jobs: strategy: matrix: include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -155,7 +158,7 @@ jobs: env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -186,10 +189,10 @@ jobs: strategy: matrix: target: [ios, tvos, macos --skip-tests, watchos --skip-tests] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 tests: --test-specs=unit - os: macos-13 xcode: Xcode_15.2 diff --git a/.github/workflows/mlmodeldownloader.yml b/.github/workflows/mlmodeldownloader.yml index 4cf1332519b..24b59960440 100644 --- a/.github/workflows/mlmodeldownloader.yml +++ b/.github/workflows/mlmodeldownloader.yml @@ -22,10 +22,10 @@ jobs: strategy: matrix: target: [ios, tvos, macos, watchos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -48,7 +48,7 @@ jobs: mlmodeldownloader-cron-only: if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} strategy: @@ -75,12 +75,15 @@ jobs: strategy: matrix: target: [iOS, tvOS, macOS, catalyst, watchOS] - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 + - os: macos-14 + xcode: Xcode_15.3 + target: visionOS runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -96,7 +99,7 @@ jobs: catalyst: if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 @@ -113,7 +116,7 @@ jobs: if: github.repository == 'Firebase/firebase-ios-sdk' && (github.event_name == 'schedule' || github.event_name == 'pull_request') env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 diff --git a/.github/workflows/notice_generation.yml b/.github/workflows/notice_generation.yml index 9330dcf1983..cd5025e1881 100644 --- a/.github/workflows/notice_generation.yml +++ b/.github/workflows/notice_generation.yml @@ -12,7 +12,7 @@ jobs: generate_a_notice: # Don't run on private repo. if: github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 name: Generate NOTICES env: # The path of NOTICES based on the root dir of repo." diff --git a/.github/workflows/performance-integration-tests.yml b/.github/workflows/performance-integration-tests.yml index 25c91e98f83..9ed31e2ca15 100644 --- a/.github/workflows/performance-integration-tests.yml +++ b/.github/workflows/performance-integration-tests.yml @@ -26,7 +26,7 @@ jobs: if: github.repository == 'Firebase/firebase-ios-sdk' env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 diff --git a/.github/workflows/performance.yml b/.github/workflows/performance.yml index 1452e205385..4e5ba16eb98 100644 --- a/.github/workflows/performance.yml +++ b/.github/workflows/performance.yml @@ -55,10 +55,10 @@ jobs: strategy: matrix: target: [ios, tvos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -79,7 +79,7 @@ jobs: env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-12 # TODO: the legacy ObjC quickstarts don't run with Xcode 15. steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -99,7 +99,7 @@ jobs: env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -129,8 +129,8 @@ jobs: matrix: target: [iOS, tvOS] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -148,7 +148,7 @@ jobs: catalyst: if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 @@ -163,7 +163,7 @@ jobs: performance-cron-only: # Don't run on private repo. if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [ios, tvos] diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 87164ab1c1d..6453cc4960a 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -17,7 +17,7 @@ jobs: specs_checking: # 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 == 'workflow_dispatch' - runs-on: macos-12 + runs-on: macos-14 env: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} # The SDK repo will be cloned to this dir and podspecs from @@ -72,7 +72,7 @@ jobs: needs: specs_checking # 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 == 'workflow_dispatch' - runs-on: macos-12 + runs-on: macos-14 env: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} local_repo: specstesting @@ -111,7 +111,7 @@ jobs: needs: [buildup_SpecsTesting_repo_FirebaseCore, specs_checking] # 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 == 'workflow_dispatch' - runs-on: macos-12 + runs-on: macos-14 strategy: fail-fast: false matrix: ${{fromJson(needs.specs_checking.outputs.matrix)}} @@ -156,7 +156,7 @@ jobs: update_SpecsTesting_repo: # Don't run on private repo unless it is a PR. if: github.repository == 'Firebase/firebase-ios-sdk' && github.event.pull_request.merged == true - runs-on: macos-12 + runs-on: macos-14 env: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} local_repo: specstesting @@ -210,7 +210,7 @@ jobs: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -248,7 +248,7 @@ jobs: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -282,7 +282,7 @@ jobs: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -331,7 +331,7 @@ jobs: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -367,7 +367,7 @@ jobs: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -409,7 +409,7 @@ jobs: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -445,6 +445,7 @@ jobs: testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" LEGACY: true + # TODO: The functions quickstart uses Material which isn't supported by Xcode 15 runs-on: macos-12 steps: - uses: actions/checkout@v4 @@ -485,7 +486,7 @@ jobs: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -523,7 +524,7 @@ jobs: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -559,7 +560,7 @@ jobs: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -594,7 +595,7 @@ jobs: testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" LEGACY: true - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -630,7 +631,7 @@ jobs: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dcf67d29dba..0604a1de1d9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,7 +19,7 @@ jobs: specs_checking: # 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 == 'workflow_dispatch' - runs-on: macos-12 + runs-on: macos-14 env: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} # The SDK repo will be cloned to this dir and podspecs from @@ -76,7 +76,7 @@ jobs: needs: specs_checking # Don't run on private repo unless it is a PR. if: github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 env: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} local_repo: specstesting @@ -113,7 +113,7 @@ jobs: needs: [buildup_SpecsTesting_repo_FirebaseCore, specs_checking] # Don't run on private repo unless it is a PR. if: github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: fail-fast: false matrix: ${{fromJson(needs.specs_checking.outputs.matrix)}} @@ -161,7 +161,7 @@ jobs: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -199,7 +199,7 @@ jobs: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -233,7 +233,7 @@ jobs: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -282,7 +282,7 @@ jobs: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -318,7 +318,7 @@ jobs: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -360,7 +360,7 @@ jobs: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -396,6 +396,7 @@ jobs: testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" LEGACY: true + # TODO: The functions quickstart uses Material which isn't supported by Xcode 15 runs-on: macos-12 steps: - uses: actions/checkout@v4 @@ -436,7 +437,7 @@ jobs: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -474,7 +475,7 @@ jobs: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -510,7 +511,7 @@ jobs: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -545,7 +546,7 @@ jobs: testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" LEGACY: true - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -581,7 +582,7 @@ jobs: bot_token_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} testing_repo_dir: "/tmp/test/" testing_repo: "firebase-ios-sdk" - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 diff --git a/.github/workflows/remoteconfig.yml b/.github/workflows/remoteconfig.yml index 60963dfc4cb..9bb193a529d 100644 --- a/.github/workflows/remoteconfig.yml +++ b/.github/workflows/remoteconfig.yml @@ -24,7 +24,7 @@ jobs: if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [iOS, tvOS, macOS] @@ -61,10 +61,10 @@ jobs: # TODO: macos tests are blocked by https://github.com/erikdoe/ocmock/pull/532 target: [ios, tvos, macos --skip-tests, watchos] podspec: [FirebaseRemoteConfig.podspec, FirebaseRemoteConfigSwift.podspec --allow-warnings --skip-tests] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 tests: # Flaky tests on CI - os: macos-13 @@ -89,14 +89,18 @@ jobs: strategy: matrix: target: [iOS, tvOS, macOS, catalyst, watchOS] - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - test: spm - os: macos-13 xcode: Xcode_15.2 test: spmbuildonly + - os: macos-14 + xcode: Xcode_15.3 + test: spmbuildonly + - os: macos-14 + xcode: Xcode_15.3 + target: visionOS + test: spm runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -115,7 +119,7 @@ jobs: catalyst: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 @@ -133,7 +137,7 @@ jobs: env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -152,7 +156,7 @@ jobs: # env: # plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} # signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} - # runs-on: macos-12 + # runs-on: macos-14 # steps: # - uses: actions/checkout@v4 # - uses: ruby/setup-ruby@v1 @@ -173,7 +177,7 @@ jobs: sample-build-test: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 @@ -190,7 +194,7 @@ jobs: remoteconfig-cron-only: # Don't run on private repo. if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 strategy: matrix: target: [ios, tvos, macos] diff --git a/.github/workflows/sessions-integration-tests.yml b/.github/workflows/sessions-integration-tests.yml index 71f586cc9ee..e1ee9e8712a 100644 --- a/.github/workflows/sessions-integration-tests.yml +++ b/.github/workflows/sessions-integration-tests.yml @@ -25,6 +25,7 @@ jobs: if: github.repository == 'Firebase/firebase-ios-sdk' env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} + #TODO(#12771): Fix macos-14 build issues runs-on: macos-12 steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/sessions.yml b/.github/workflows/sessions.yml index 312da50f72f..1439b4f1d15 100644 --- a/.github/workflows/sessions.yml +++ b/.github/workflows/sessions.yml @@ -24,10 +24,10 @@ jobs: strategy: matrix: target: [ios, tvos, macos, watchos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 tests: # Flaky tests on CI - os: macos-13 @@ -52,12 +52,15 @@ jobs: strategy: matrix: target: [iOS, tvOS, macOS, catalyst, watchOS] - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 + - os: macos-14 + xcode: Xcode_15.3 + target: visionOS runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -75,7 +78,7 @@ jobs: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 diff --git a/.github/workflows/shared-swift.yml b/.github/workflows/shared-swift.yml index 34edbe69a2c..4b1cbcb3383 100644 --- a/.github/workflows/shared-swift.yml +++ b/.github/workflows/shared-swift.yml @@ -24,10 +24,10 @@ jobs: strategy: matrix: target: [ios, tvos, macos, watchos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -47,12 +47,15 @@ jobs: strategy: matrix: target: [iOS, tvOS, macOS, catalyst, watchOS] - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 + - os: macos-14 + xcode: Xcode_15.3 + target: visionOS runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/spectesting.yml b/.github/workflows/spectesting.yml index 11a58f5c8ec..b2cd45c64a7 100644 --- a/.github/workflows/spectesting.yml +++ b/.github/workflows/spectesting.yml @@ -15,7 +15,7 @@ jobs: specs_checking: # Don't run on private repo unless it is a PR. if: github.repository == 'Firebase/firebase-ios-sdk' - runs-on: macos-12 + runs-on: macos-14 outputs: matrix: ${{ steps.check_files.outputs.matrix }} podspecs: ${{ steps.check_files.outputs.podspecs }} @@ -48,7 +48,7 @@ jobs: specs_testing: needs: specs_checking if: ${{ needs.specs_checking.outputs.podspecs != '[]' }} - runs-on: macos-12 + runs-on: macos-14 strategy: fail-fast: false matrix: ${{fromJson(needs.specs_checking.outputs.matrix)}} diff --git a/.github/workflows/spm.yml b/.github/workflows/spm.yml index a2563af2cc4..2628cde075c 100644 --- a/.github/workflows/spm.yml +++ b/.github/workflows/spm.yml @@ -27,15 +27,15 @@ jobs: if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' strategy: matrix: - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 - test: spm # The integration tests are slow and flaky on Xcode 15, so just build. - os: macos-13 xcode: Xcode_15.2 test: spmbuildonly + - os: macos-14 + xcode: Xcode_15.3 + test: spm runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -48,8 +48,13 @@ jobs: run: scripts/setup_spm_tests.sh - name: Functions Integration Test Server run: FirebaseFunctions/Backend/start.sh synchronous - - name: iOS Unit Tests - run: scripts/third_party/travis/retry.sh ./scripts/build.sh Firebase-Package iOS ${{ matrix.test }} + - uses: nick-fields/retry@v3 + with: + timeout_minutes: 120 + max_attempts: 3 + retry_on: error + retry_wait_seconds: 120 + command: scripts/build.sh Firebase-Package iOS ${{ matrix.test }} # Test iOS Device build since some Firestore dependencies build different files. iOS-Device: @@ -57,10 +62,10 @@ jobs: if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' strategy: matrix: - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} @@ -84,12 +89,15 @@ jobs: matrix: # Full set of Firebase-Package tests only run on iOS. Run subset on other platforms. target: [tvOS, macOS, catalyst] - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 + - os: macos-14 + target: visionOS + xcode: Xcode_15.3 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/storage.yml b/.github/workflows/storage.yml index d5ae8073ddf..a651334bb99 100644 --- a/.github/workflows/storage.yml +++ b/.github/workflows/storage.yml @@ -24,8 +24,8 @@ jobs: matrix: language: [Swift, ObjC] include: - - os: macos-13 - xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} runs-on: ${{ matrix.os }} @@ -64,36 +64,16 @@ jobs: if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' strategy: matrix: + target: [iOS, tvOS, macOS, catalyst, watchOS] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - - os: macos-13 - xcode: Xcode_15.2 - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v4 - - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 - with: - cache_key: ${{ matrix.os }} - - name: Xcode - run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer - - name: Initialize xcodebuild - run: scripts/setup_spm_tests.sh - - name: Swift Unit Tests - run: scripts/third_party/travis/retry.sh ./scripts/build.sh FirebaseStorageUnit iOS spm - - spm-cron: - # Don't run on private repo. - if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk' - strategy: - matrix: - target: [tvOS, macOS, catalyst, watchOS] - os: [macos-12, macos-13] - include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 + - os: macos-14 + xcode: Xcode_15.3 + target: visionOS runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -116,14 +96,11 @@ jobs: strategy: matrix: include: - - os: macos-12 - xcode: Xcode_14.2 - - swift: swift - os: macos-13 - xcode: Xcode_15.2 + - os: macos-13 + xcode: Xcode_14.2 # TODO: the legacy ObjC quickstart doesn't build with Xcode 15. - swift: swift - os: macos-13 - xcode: Xcode_15.2 + os: macos-14 + xcode: Xcode_15.3 env: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} @@ -140,7 +117,7 @@ jobs: - 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 }}) + run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Storage false ${{ matrix.swift }}) quickstart-ftl-cron-only: # Don't run on private repo. @@ -149,7 +126,7 @@ jobs: plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} LEGACY: true - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -178,10 +155,10 @@ jobs: strategy: matrix: target: [ios, tvos, macos, watchos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 tests: --skip-tests - os: macos-13 xcode: Xcode_15.2 @@ -207,10 +184,10 @@ jobs: strategy: matrix: target: [ios, tvos, macos, watchos] - os: [macos-12, macos-13] + os: [macos-14, macos-13] include: - - os: macos-12 - xcode: Xcode_14.2 + - os: macos-14 + xcode: Xcode_15.3 - os: macos-13 xcode: Xcode_15.2 runs-on: ${{ matrix.os }} diff --git a/.github/workflows/symbolcollision.yml b/.github/workflows/symbolcollision.yml index a9088e17c18..f9ec43a62e7 100644 --- a/.github/workflows/symbolcollision.yml +++ b/.github/workflows/symbolcollision.yml @@ -20,7 +20,7 @@ jobs: installation-test: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/watchos-sample.yml b/.github/workflows/watchos-sample.yml index e4e30396280..7dd02ca6353 100644 --- a/.github/workflows/watchos-sample.yml +++ b/.github/workflows/watchos-sample.yml @@ -28,7 +28,7 @@ jobs: watchos-sample-build-test: # 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' - runs-on: macos-12 + runs-on: macos-14 steps: - uses: actions/checkout@v4 - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126 diff --git a/.github/workflows/zip.yml b/.github/workflows/zip.yml index 45578d33761..7b16de6064f 100644 --- a/.github/workflows/zip.yml +++ b/.github/workflows/zip.yml @@ -102,12 +102,12 @@ jobs: SDK: "ABTesting" strategy: matrix: - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -163,12 +163,12 @@ jobs: SDK: "Authentication" strategy: matrix: - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -216,12 +216,12 @@ jobs: SDK: "Config" strategy: matrix: - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -267,12 +267,12 @@ jobs: SDK: "Crashlytics" strategy: matrix: - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -397,12 +397,12 @@ jobs: SDK: "DynamicLinks" strategy: matrix: - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -541,12 +541,12 @@ jobs: SDK: "InAppMessaging" strategy: matrix: - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -597,12 +597,12 @@ jobs: SDK: "Messaging" strategy: matrix: - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -652,12 +652,12 @@ jobs: SDK: "Storage" strategy: matrix: - os: [macos-12, macos-13] + os: [macos-13, macos-14] include: - - os: macos-12 - xcode: Xcode_14.2 - os: macos-13 xcode: Xcode_15.2 + - os: macos-14 + xcode: Xcode_15.3 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 diff --git a/CMakeLists.txt b/CMakeLists.txt index 311e7299b4b..fd734f45389 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -160,6 +160,10 @@ unset(RANDOM_FILE CACHE) set(CARES_INSTALL OFF CACHE BOOL "Disabled") set(protobuf_BUILD_TESTS OFF CACHE BOOL "Disabled") +# See https://github.com/protocolbuffers/protobuf/issues/12185#issuecomment-1887892723 +set(protobuf_INSTALL OFF) +set(utf8_range_ENABLE_INSTALL OFF) + if(IOS OR ANDROID) # C-Ares includes a number of example binaries (e.g. `ahost`) that fail to # build when compiling for non-host targets. @@ -207,17 +211,6 @@ set(PROTOBUF_ROOT_DIR ${FIREBASE_EXTERNAL_SOURCE_DIR}/protobuf) add_external_subdirectory(grpc) - -# Fix up targets included by gRPC -if(CXX_CLANG) - target_compile_options( - absl_time_zone PRIVATE - -Wno-unused-template - -Wno-shadow - -Wno-tautological-type-limit-compare - ) -endif() - # Fix up targets included by boringssl (ver: b9232f9e27e5668bc0414879dcdedb2a59ea75f2) # We might be able to remove this with newer versions. if(CXX_CLANG) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b62328f4dde..a7190a7a196 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -361,7 +361,7 @@ viewing the [documentation][xcode-debugging]. ### Testing Tests are an essential part to building Firebase. Many of the tests -for Firebase run as part of our continous integration (CI) setup with +for Firebase run as part of our continuous integration (CI) setup with [GitHub Actions]. * _Fixing a bug?_ Add a test to catch potential regressions in diff --git a/CoreOnly/Tests/FirebasePodTest/FirebasePodTest/AppDelegate.swift b/CoreOnly/Tests/FirebasePodTest/FirebasePodTest/AppDelegate.swift index 3efa934f05b..2c839d62da9 100644 --- a/CoreOnly/Tests/FirebasePodTest/FirebasePodTest/AppDelegate.swift +++ b/CoreOnly/Tests/FirebasePodTest/FirebasePodTest/AppDelegate.swift @@ -13,6 +13,7 @@ // limitations under the License. import Firebase + // Verify that the following Firebase Swift APIs can be found. import FirebaseAnalyticsSwift import FirebaseFirestoreSwift diff --git a/Crashlytics/CHANGELOG.md b/Crashlytics/CHANGELOG.md index ce0e9c89eea..8f3ff714891 100644 --- a/Crashlytics/CHANGELOG.md +++ b/Crashlytics/CHANGELOG.md @@ -1,3 +1,11 @@ +# Unreleased +- [changed] Removed usages of user defaults API to eliminate required reason impact. + +# 10.24.0 +- [fixed] Fix `'FirebaseCrashlytics/FirebaseCrashlytics-Swift.h' file not found` + errors (#12611). +- [changed] Remove usages of `mach_absolute_time` to reduce required reason impact. + # 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. diff --git a/Crashlytics/Crashlytics/Components/FIRCLSApplication.h b/Crashlytics/Crashlytics/Components/FIRCLSApplication.h index d388f012764..8e7510e7eac 100644 --- a/Crashlytics/Crashlytics/Components/FIRCLSApplication.h +++ b/Crashlytics/Crashlytics/Components/FIRCLSApplication.h @@ -32,7 +32,7 @@ typedef NS_ENUM(NSInteger, FIRCLSApplicationInstallationSourceType) { }; /** - * Returns the application bundle identifier with occurences of "/" replaced by "_" + * Returns the application bundle identifier with occurrences of "/" replaced by "_" */ NSString* FIRCLSApplicationGetBundleIdentifier(void); diff --git a/Crashlytics/Crashlytics/Components/FIRCLSContext.h b/Crashlytics/Crashlytics/Components/FIRCLSContext.h index f2ee4250a3f..b477ae1bcdb 100644 --- a/Crashlytics/Crashlytics/Components/FIRCLSContext.h +++ b/Crashlytics/Crashlytics/Components/FIRCLSContext.h @@ -29,7 +29,7 @@ // The purpose of the crash context is to hold values that absolutely must be read and/or written at // crash time. For robustness against memory corruption, they are protected with guard pages. -// Further, the context is seperated into read-only and read-write sections. +// Further, the context is separated into read-only and read-write sections. __BEGIN_DECLS diff --git a/Crashlytics/Crashlytics/Components/FIRCLSProcess.c b/Crashlytics/Crashlytics/Components/FIRCLSProcess.c index b816506fc75..8630b3f6e87 100644 --- a/Crashlytics/Crashlytics/Components/FIRCLSProcess.c +++ b/Crashlytics/Crashlytics/Components/FIRCLSProcess.c @@ -16,7 +16,6 @@ #include "Crashlytics/Crashlytics/Helpers/FIRCLSDefines.h" #include "Crashlytics/Crashlytics/Helpers/FIRCLSFeatures.h" #include "Crashlytics/Crashlytics/Components/FIRCLSGlobals.h" -#include "Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h" #include "Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.h" #include "Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.h" #include "Crashlytics/Crashlytics/Helpers/FIRCLSUtility.h" @@ -174,7 +173,7 @@ static bool FIRCLSProcessGetThreadState(FIRCLSProcess *process, return true; } - // Here's a wild trick: emulate what thread_get_state would do. It apppears that + // Here's a wild trick: emulate what thread_get_state would do. It appears that // we cannot reliably unwind out of thread_get_state. So, instead of trying, setup // a thread context that resembles what the real thing would look like if (FIRCLSProcessIsCurrentThread(process, thread)) { diff --git a/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.h b/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.h index 3f5c398426a..1b17edb47e5 100644 --- a/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.h +++ b/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.h @@ -16,8 +16,6 @@ #import "Crashlytics/Crashlytics/Public/FirebaseCrashlytics/FIRCrashlytics.h" -#import "Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h" - @class FBLPromise; @class FIRCLSExistingReportManager; @class FIRCLSAnalyticsManager; @@ -35,7 +33,7 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; -- (FBLPromise *)startWithProfilingMark:(FIRCLSProfileMark)mark; +- (FBLPromise *)startWithProfiling; - (FBLPromise *)checkForUnsentReports; - (FBLPromise *)sendUnsentReports; diff --git a/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.m b/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.m index 55f5bcb7d1d..fc7a5637412 100644 --- a/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.m +++ b/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.m @@ -268,7 +268,7 @@ - (FBLPromise *)deleteUnsentReports { return _unsentReportsHandled; } -- (FBLPromise *)startWithProfilingMark:(FIRCLSProfileMark)mark { +- (FBLPromise *)startWithProfiling { NSString *executionIdentifier = self.executionIDModel.executionID; // This needs to be called before the new report is created for @@ -294,7 +294,7 @@ - (FBLPromise *)deleteUnsentReports { FIRCLSErrorLog(@"Unable to setup a new report"); } - if (![self startCrashReporterWithProfilingMark:mark report:report]) { + if (![self startCrashReporterWithProfilingReport:report]) { FIRCLSErrorLog(@"Unable to start crash reporter"); report = nil; } @@ -361,11 +361,9 @@ - (FBLPromise *)deleteUnsentReports { } if (report != nil) { - // capture the start-up time here, but record it asynchronously - double endMark = FIRCLSProfileEnd(mark); - + // empty for disabled start-up time dispatch_async(FIRCLSGetLoggingQueue(), ^{ - FIRCLSUserLoggingWriteInternalKeyValue(FIRCLSStartTimeKey, [@(endMark) description]); + FIRCLSUserLoggingWriteInternalKeyValue(FIRCLSStartTimeKey, @""); }); } @@ -414,8 +412,7 @@ - (void)beginReportUploadsWithToken:(FIRCLSDataCollectionToken *)token } } -- (BOOL)startCrashReporterWithProfilingMark:(FIRCLSProfileMark)mark - report:(FIRCLSInternalReport *)report { +- (BOOL)startCrashReporterWithProfilingReport:(FIRCLSInternalReport *)report { if (!report) { return NO; } @@ -430,12 +427,12 @@ - (BOOL)startCrashReporterWithProfilingMark:(FIRCLSProfileMark)mark [self.analyticsManager registerAnalyticsListener]; - [self crashReportingSetupCompleted:mark]; + [self crashReportingSetupCompleted]; return YES; } -- (void)crashReportingSetupCompleted:(FIRCLSProfileMark)mark { +- (void)crashReportingSetupCompleted { // check our handlers FIRCLSDispatchAfter(2.0, dispatch_get_main_queue(), ^{ FIRCLSExceptionCheckHandlers((__bridge void *)(self)); @@ -447,12 +444,12 @@ - (void)crashReportingSetupCompleted:(FIRCLSProfileMark)mark { #endif }); - // remove the launch failure marker and record the startup time + // remove the launch failure marker and records and empty string since + // we're avoiding mach_absolute_time calls. dispatch_async(dispatch_get_main_queue(), ^{ [self.launchMarker removeLaunchFailureMarker]; dispatch_async(FIRCLSGetLoggingQueue(), ^{ - FIRCLSUserLoggingWriteInternalKeyValue(FIRCLSFirstRunloopTurnTimeKey, - [@(FIRCLSProfileEnd(mark)) description]); + FIRCLSUserLoggingWriteInternalKeyValue(FIRCLSFirstRunloopTurnTimeKey, @""); }); }); } diff --git a/Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.h b/Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.h index bda6eabbf5e..b9b2dd622fb 100644 --- a/Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.h +++ b/Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.h @@ -14,9 +14,14 @@ #if SWIFT_PACKAGE @import FirebaseCrashlyticsSwift; -#else // Swift Package Manager +#elif __has_include() #import -#endif // CocoaPods +#elif __has_include("FirebaseCrashlytics-Swift.h") +// If frameworks are not available, fall back to importing the header as it +// should be findable from a header search path pointing to the build +// directory. See #12611 for more context. +#import "FirebaseCrashlytics-Swift.h" +#endif @interface FIRCLSRolloutsPersistenceManager : NSObject diff --git a/Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.m b/Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.m index 3e7867dab76..8bb4c5cabfa 100644 --- a/Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.m +++ b/Crashlytics/Crashlytics/Controllers/FIRCLSRolloutsPersistenceManager.m @@ -21,9 +21,14 @@ #if SWIFT_PACKAGE @import FirebaseCrashlyticsSwift; -#else // Swift Package Manager +#elif __has_include() #import -#endif // CocoaPods +#elif __has_include("FirebaseCrashlytics-Swift.h") +// If frameworks are not available, fall back to importing the header as it +// should be findable from a header search path pointing to the build +// directory. See #12611 for more context. +#import "FirebaseCrashlytics-Swift.h" +#endif @interface FIRCLSRolloutsPersistenceManager : NSObject @property(nonatomic, readonly) FIRCLSFileManager *fileManager; diff --git a/Crashlytics/Crashlytics/FIRCrashlytics.m b/Crashlytics/Crashlytics/FIRCrashlytics.m index 85502b2a9d9..13906bb38ed 100644 --- a/Crashlytics/Crashlytics/FIRCrashlytics.m +++ b/Crashlytics/Crashlytics/FIRCrashlytics.m @@ -29,7 +29,6 @@ #import "Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.h" #include "Crashlytics/Crashlytics/Handlers/FIRCLSException.h" #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" @@ -63,9 +62,14 @@ @import FirebaseRemoteConfigInterop; #if SWIFT_PACKAGE @import FirebaseCrashlyticsSwift; -#else // Swift Package Manager +#elif __has_include() #import -#endif // CocoaPods +#elif __has_include("FirebaseCrashlytics-Swift.h") +// If frameworks are not available, fall back to importing the header as it +// should be findable from a header search path pointing to the build +// directory. See #12611 for more context. +#import "FirebaseCrashlytics-Swift.h" +#endif #if TARGET_OS_IPHONE #import @@ -128,8 +132,6 @@ - (instancetype)initWithApp:(FIRApp *)app return nil; } - FIRCLSProfileMark mark = FIRCLSProfilingStart(); - NSLog(@"[Firebase/Crashlytics] Version %@", FIRCLSSDKVersion()); FIRCLSDeveloperLog("Crashlytics", @"Running on %@, %@ (%@)", FIRCLSHostModelInfo(), @@ -195,7 +197,7 @@ - (instancetype)initWithApp:(FIRApp *)app }); } - [[[_reportManager startWithProfilingMark:mark] then:^id _Nullable(NSNumber *_Nullable value) { + [[[_reportManager startWithProfiling] then:^id _Nullable(NSNumber *_Nullable value) { if (![value boolValue]) { FIRCLSErrorLog(@"Crash reporting could not be initialized"); } diff --git a/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.c b/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.c index 981077bf867..92bc830edae 100644 --- a/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.c +++ b/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.c @@ -93,7 +93,7 @@ static exception_mask_t FIRCLSMachExceptionMask(void) { // is a confirmed kernel bug. Lacking access to EXC_CRASH means we must use signal handlers to // cover all types of crashes. // EXC_GUARD is relatively new, and isn't available on all OS versions. You have to be careful, - // because you cannot successfully register hanlders if there are any unrecognized masks. We've + // because you cannot successfully register handlers if there are any unrecognized masks. We've // dropped support for old OS versions that didn't have EXC_GUARD (iOS 5 and below, macOS 10.6 and // below) so we always add it now @@ -192,7 +192,7 @@ static bool FIRCLSMachExceptionReadMessage(FIRCLSMachExceptionReadContext* conte r = mach_msg(&message->head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof(MachExceptionMessage), context->port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (r != MACH_MSG_SUCCESS) { - FIRCLSSDKLog("Error receving mach_msg (%d)\n", r); + FIRCLSSDKLog("Error receiving mach_msg (%d)\n", r); return false; } diff --git a/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.c b/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.c index 69733018728..1fcdbf22aab 100644 --- a/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.c +++ b/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.c @@ -86,7 +86,7 @@ static void FIRCLSSignalInstallHandlers(FIRCLSSignalReadContext *roContext) { action.sa_sigaction = FIRCLSSignalHandler; // SA_RESETHAND seems like it would be great, but it doesn't appear to // work correctly. After taking a signal, causing another identical signal in - // the handler will *not* cause the default handler to be invokved (which should + // the handler will *not* cause the default handler to be involved (which should // terminate the process). I've found some evidence that others have seen this // behavior on MAC OS X. action.sa_flags = SA_SIGINFO | SA_ONSTACK; diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.c b/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.c index 84dee840028..206b9a4e80d 100644 --- a/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.c +++ b/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.c @@ -43,7 +43,7 @@ FIRCLSAllocatorRef FIRCLSAllocatorCreate(size_t writableSpace, size_t readableSp readableSpace += sizeof(FIRCLSAllocator); // add the space for our allocator itself // we can only protect at the page level, so we need all of our regions to be - // exact multples of pages. But, we don't need anything in the special-case of zero. + // exact multiples of pages. But, we don't need anything in the special-case of zero. writableRegion.size = 0; if (writableSpace > 0) { @@ -55,7 +55,7 @@ FIRCLSAllocatorRef FIRCLSAllocatorCreate(size_t writableSpace, size_t readableSp readableRegion.size = ((readableSpace / pageSize) + 1) * pageSize; } - // Make one big, continous allocation, adding additional pages for our guards. Note + // Make one big, continuous allocation, adding additional pages for our guards. Note // that we cannot use malloc (or valloc) in this case, because we need to assert full // ownership over these allocations. mmap is a much better choice. We also mark these // pages as MAP_NOCACHE. diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.c b/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.c deleted file mode 100644 index 2c705187705..00000000000 --- a/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.c +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2019 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. - -#include "Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h" - -#include -#include - -FIRCLSProfileMark FIRCLSProfilingStart(void) { - return mach_absolute_time(); -} - -double FIRCLSProfileEnd(FIRCLSProfileMark mark) { - uint64_t duration = mach_absolute_time() - mark; - - mach_timebase_info_data_t info; - mach_timebase_info(&info); - - if (info.denom == 0) { - return 0.0; - } - - // Convert to nanoseconds - duration *= info.numer; - duration /= info.denom; - - return (double)duration / (double)NSEC_PER_MSEC; // return time in milliseconds -} - -void FIRCLSProfileBlock(const char* label, void (^block)(void)) { - FIRCLSProfileMark mark = FIRCLSProfilingStart(); - - block(); - - fprintf(stderr, "[Profile] %s: %f ms\n", label, FIRCLSProfileEnd(mark)); -} diff --git a/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h b/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h deleted file mode 100644 index 5cc312f4e95..00000000000 --- a/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2019 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. - -#pragma once - -#include - -typedef uint64_t FIRCLSProfileMark; - -__BEGIN_DECLS - -// high-resolution timing, returning the results in seconds -FIRCLSProfileMark FIRCLSProfilingStart(void); -double FIRCLSProfileEnd(FIRCLSProfileMark mark); - -void FIRCLSProfileBlock(const char* label, void (^block)(void)); - -__END_DECLS diff --git a/Crashlytics/Resources/PrivacyInfo.xcprivacy b/Crashlytics/Resources/PrivacyInfo.xcprivacy index 730bb05c863..410a473801c 100644 --- a/Crashlytics/Resources/PrivacyInfo.xcprivacy +++ b/Crashlytics/Resources/PrivacyInfo.xcprivacy @@ -2,65 +2,48 @@ - NSPrivacyTracking - - NSPrivacyTrackingDomains - - - NSPrivacyCollectedDataTypes - - - NSPrivacyCollectedDataType - NSPrivacyCollectedDataTypeCrashData - NSPrivacyCollectedDataTypeLinked - - NSPrivacyCollectedDataTypeTracking - - NSPrivacyCollectedDataTypePurposes - - NSPrivacyCollectedDataTypePurposeAppFunctionality - - - - NSPrivacyCollectedDataType - NSPrivacyCollectedDataTypeOtherDiagnosticData - NSPrivacyCollectedDataTypeLinked - - NSPrivacyCollectedDataTypeTracking - - NSPrivacyCollectedDataTypePurposes - - NSPrivacyCollectedDataTypePurposeAppFunctionality - - - - NSPrivacyAccessedAPITypes - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryFileTimestamp - NSPrivacyAccessedAPITypeReasons - - C617.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategorySystemBootTime - NSPrivacyAccessedAPITypeReasons - - 35F9.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryUserDefaults - NSPrivacyAccessedAPITypeReasons - - CA92.1 - - - + NSPrivacyTracking + + NSPrivacyTrackingDomains + + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeCrashData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherDiagnosticData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + - - + \ No newline at end of file diff --git a/Crashlytics/UnitTests/FIRCLSReportManagerTests.m b/Crashlytics/UnitTests/FIRCLSReportManagerTests.m index f2723635733..11e270fb314 100644 --- a/Crashlytics/UnitTests/FIRCLSReportManagerTests.m +++ b/Crashlytics/UnitTests/FIRCLSReportManagerTests.m @@ -200,7 +200,7 @@ - (NSArray *)uploadReportArray { #pragma mark - File/Directory Handling - (void)testCreatesNewReportOnStart { - FBLPromise *promise = [self->_reportManager startWithProfilingMark:0]; + FBLPromise *promise = [self->_reportManager startWithProfiling]; XCTestExpectation *expectation = [[XCTestExpectation alloc] initWithDescription:@"waiting on promise"]; @@ -244,7 +244,7 @@ - (void)startReportManager { - (FBLPromise *)startReportManagerWithDataCollectionEnabled:(BOOL)enabled { [self.dataArbiter setCrashlyticsCollectionEnabled:enabled]; - return [self.reportManager startWithProfilingMark:0]; + return [self.reportManager startWithProfiling]; } - (void)processReports:(BOOL)send andExpectReports:(BOOL)reportsExpected { diff --git a/Crashlytics/UnitTests/FIRCLSReportUploaderTests.m b/Crashlytics/UnitTests/FIRCLSReportUploaderTests.m index 82c8e9033cc..4dbca18e44c 100644 --- a/Crashlytics/UnitTests/FIRCLSReportUploaderTests.m +++ b/Crashlytics/UnitTests/FIRCLSReportUploaderTests.m @@ -213,7 +213,7 @@ - (void)testUrgentUploadPackagedReportWithPath { [self runUploadPackagedReportWithUrgency:YES]; } -- (void)testUrgentWaitUntillUpload { +- (void)testUrgentWaitUntilUpload { self.mockDataTransport.async = YES; [self runUploadPackagedReportWithUrgency:YES]; @@ -221,7 +221,7 @@ - (void)testUrgentWaitUntillUpload { XCTAssertNotNil(self.mockDataTransport.sendDataEvent_event); } -- (void)testUrgentWaitUntillUploadWithError { +- (void)testUrgentWaitUntilUploadWithError { self.mockDataTransport.async = YES; self.mockDataTransport.sendDataEvent_error = [[NSError alloc] initWithDomain:@"domain" code:1 @@ -234,7 +234,7 @@ - (void)testUrgentWaitUntillUploadWithError { XCTAssertNotNil(self.mockDataTransport.sendDataEvent_event); } -- (void)testUrgentWaitUntillUploadWithWritingError { +- (void)testUrgentWaitUntilUploadWithWritingError { self.mockDataTransport.async = YES; self.mockDataTransport.sendDataEvent_wasWritten = NO; diff --git a/Crashlytics/UnitTests/Mocks/FIRCLSMockReportManager.m b/Crashlytics/UnitTests/Mocks/FIRCLSMockReportManager.m index 1ab43afba36..ff0dae7fe2a 100644 --- a/Crashlytics/UnitTests/Mocks/FIRCLSMockReportManager.m +++ b/Crashlytics/UnitTests/Mocks/FIRCLSMockReportManager.m @@ -22,8 +22,7 @@ @implementation FIRCLSMockReportManager -- (BOOL)startCrashReporterWithProfilingMark:(FIRCLSProfileMark)mark - report:(FIRCLSInternalReport *)report { +- (BOOL)startCrashReporterWithProfilingReport:(FIRCLSInternalReport *)report { NSLog(@"Crash Reporting system disabled for testing"); return YES; diff --git a/Firebase.podspec b/Firebase.podspec index a56eeced656..18a33a78108 100644 --- a/Firebase.podspec +++ b/Firebase.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'Firebase' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'Firebase' s.description = <<-DESC @@ -36,14 +36,14 @@ Simplify your app development, grow your user base, and monetize more effectivel ss.ios.deployment_target = '10.0' ss.osx.deployment_target = '10.13' ss.tvos.deployment_target = '12.0' - ss.ios.dependency 'FirebaseAnalytics', '~> 10.23.0' - ss.osx.dependency 'FirebaseAnalytics', '~> 10.23.0' - ss.tvos.dependency 'FirebaseAnalytics', '~> 10.23.0' + ss.ios.dependency 'FirebaseAnalytics', '~> 10.25.0' + ss.osx.dependency 'FirebaseAnalytics', '~> 10.25.0' + ss.tvos.dependency 'FirebaseAnalytics', '~> 10.25.0' ss.dependency 'Firebase/CoreOnly' end s.subspec 'CoreOnly' do |ss| - ss.dependency 'FirebaseCore', '10.23.0' + ss.dependency 'FirebaseCore', '10.25.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.25.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.25.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.25.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.25.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.25.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.25.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.25.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.25.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.25.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.25.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.25.0-beta' + ss.tvos.dependency 'FirebaseInAppMessaging', '~> 10.25.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.25.0' end s.subspec 'Messaging' do |ss| ss.dependency 'Firebase/CoreOnly' - ss.dependency 'FirebaseMessaging', '~> 10.23.0' + ss.dependency 'FirebaseMessaging', '~> 10.25.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.25.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.25.0' + ss.tvos.dependency 'FirebasePerformance', '~> 10.25.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.25.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.25.0' # Standard platforms PLUS watchOS. ss.ios.deployment_target = '11.0' ss.osx.deployment_target = '10.13' diff --git a/FirebaseABTesting.podspec b/FirebaseABTesting.podspec index dbd855d6486..15aa0f94025 100644 --- a/FirebaseABTesting.podspec +++ b/FirebaseABTesting.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseABTesting' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'Firebase ABTesting' s.description = <<-DESC diff --git a/FirebaseAnalytics.podspec b/FirebaseAnalytics.podspec index 2e5ef18ec3a..43b4c979a70 100644 --- a/FirebaseAnalytics.podspec +++ b/FirebaseAnalytics.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseAnalytics' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'Firebase Analytics for iOS' s.description = <<-DESC @@ -13,7 +13,7 @@ Pod::Spec.new do |s| s.authors = 'Google, Inc.' s.source = { - :http => 'https://dl.google.com/firebase/ios/analytics/dedc8d0f648c53b6/FirebaseAnalytics-10.23.0.tar.gz' + :http => 'https://dl.google.com/firebase/ios/analytics/5d4d6d5e776b3fba/FirebaseAnalytics-10.24.0.tar.gz' } s.cocoapods_version = '>= 1.12.0' @@ -37,12 +37,12 @@ Pod::Spec.new do |s| s.default_subspecs = 'AdIdSupport' s.subspec 'AdIdSupport' do |ss| - ss.dependency 'GoogleAppMeasurement', '10.23.0' + ss.dependency 'GoogleAppMeasurement', '10.25.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.25.0' ss.vendored_frameworks = 'Frameworks/FirebaseAnalytics.xcframework' end diff --git a/FirebaseAnalytics/README.md b/FirebaseAnalytics/README.md index 060e06d6cc6..a4df212b27a 100644 --- a/FirebaseAnalytics/README.md +++ b/FirebaseAnalytics/README.md @@ -1,2 +1,2 @@ This directory open sources select files from the Firebase Analytics SDK. Note -that there is no open source infastructure to build or package them. +that there is no open source infrastructure to build or package them. diff --git a/FirebaseAnalyticsOnDeviceConversion.podspec b/FirebaseAnalyticsOnDeviceConversion.podspec index e4ec770b8e5..1ad84ef275c 100644 --- a/FirebaseAnalyticsOnDeviceConversion.podspec +++ b/FirebaseAnalyticsOnDeviceConversion.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseAnalyticsOnDeviceConversion' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'On device conversion measurement plugin for FirebaseAnalytics. Not intended for direct use.' s.description = <<-DESC @@ -18,7 +18,7 @@ Pod::Spec.new do |s| s.cocoapods_version = '>= 1.12.0' - s.dependency 'GoogleAppMeasurementOnDeviceConversion', '10.23.0' + s.dependency 'GoogleAppMeasurementOnDeviceConversion', '10.25.0' s.static_framework = true diff --git a/FirebaseAppCheck.podspec b/FirebaseAppCheck.podspec index da7607cd677..678f2823dcf 100644 --- a/FirebaseAppCheck.podspec +++ b/FirebaseAppCheck.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseAppCheck' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'Firebase App Check SDK.' s.description = <<-DESC @@ -44,11 +44,12 @@ Pod::Spec.new do |s| s.osx.weak_framework = 'DeviceCheck' s.tvos.weak_framework = 'DeviceCheck' - s.dependency 'AppCheckCore', '~> 10.18' + s.dependency 'AppCheckCore', '~> 10.19' s.dependency 'FirebaseAppCheckInterop', '~> 10.17' s.dependency 'FirebaseCore', '~> 10.0' s.dependency 'PromisesObjC', '~> 2.1' - s.dependency 'GoogleUtilities/Environment', '~> 7.8' + s.dependency 'GoogleUtilities/Environment', '~> 7.13' + s.dependency 'GoogleUtilities/UserDefaults', '~> 7.13' s.pod_target_xcconfig = { 'GCC_C_LANGUAGE_STANDARD' => 'c99', diff --git a/FirebaseAppCheck/CHANGELOG.md b/FirebaseAppCheck/CHANGELOG.md index 9db806f0d40..c14d66b9f8c 100644 --- a/FirebaseAppCheck/CHANGELOG.md +++ b/FirebaseAppCheck/CHANGELOG.md @@ -1,3 +1,6 @@ +# Unreleased +- [changed] Removed usages of user defaults API to eliminate required reason impact. + # 10.19.1 - [fixed] Fix bug in apps using both AppCheck and ARCore where AppCheck unnecessarily tries to create tokens for the ARCore SDK. This results in diff --git a/FirebaseAppCheck/Sources/Core/FIRAppCheck.m b/FirebaseAppCheck/Sources/Core/FIRAppCheck.m index 3c6001ecdf1..d13b4d36d7f 100644 --- a/FirebaseAppCheck/Sources/Core/FIRAppCheck.m +++ b/FirebaseAppCheck/Sources/Core/FIRAppCheck.m @@ -18,6 +18,7 @@ #import #import +#import #import "FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRAppCheckErrors.h" #import "FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRAppCheckProvider.h" @@ -92,7 +93,7 @@ - (nullable instancetype)initWithApp:(FIRApp *)app { [[FIRInternalAppCheckProvider alloc] initWithAppCheckProvider:appCheckProvider]; FIRAppCheckSettings *settings = [[FIRAppCheckSettings alloc] initWithApp:app - userDefault:[NSUserDefaults standardUserDefaults] + userDefault:[GULUserDefaults standardUserDefaults] mainBundle:[NSBundle mainBundle]]; GACAppCheck *appCheckCore = [[GACAppCheck alloc] initWithServiceName:serviceName diff --git a/FirebaseAppCheck/Sources/Core/FIRAppCheckSettings.h b/FirebaseAppCheck/Sources/Core/FIRAppCheckSettings.h index 1a6ab960145..60bf31eaf0e 100644 --- a/FirebaseAppCheck/Sources/Core/FIRAppCheckSettings.h +++ b/FirebaseAppCheck/Sources/Core/FIRAppCheckSettings.h @@ -19,6 +19,7 @@ #import @class FIRApp; +@class GULUserDefaults; NS_ASSUME_NONNULL_BEGIN @@ -32,7 +33,7 @@ FOUNDATION_EXPORT NSString *const kFIRAppCheckTokenAutoRefreshEnabledInfoPlistKe @property(nonatomic, assign) BOOL isTokenAutoRefreshEnabled; - (instancetype)initWithApp:(FIRApp *)firebaseApp - userDefault:(NSUserDefaults *)userDefaults + userDefault:(GULUserDefaults *)userDefaults mainBundle:(NSBundle *)mainBundle NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE; diff --git a/FirebaseAppCheck/Sources/Core/FIRAppCheckSettings.m b/FirebaseAppCheck/Sources/Core/FIRAppCheckSettings.m index 178dba1a063..a9486925304 100644 --- a/FirebaseAppCheck/Sources/Core/FIRAppCheckSettings.m +++ b/FirebaseAppCheck/Sources/Core/FIRAppCheckSettings.m @@ -16,6 +16,8 @@ #import "FirebaseAppCheck/Sources/Core/FIRAppCheckSettings.h" +#import + #import "FirebaseCore/Extension/FirebaseCoreInternal.h" NS_ASSUME_NONNULL_BEGIN @@ -28,7 +30,7 @@ @interface FIRAppCheckSettings () @property(nonatomic, weak, readonly) FIRApp *firebaseApp; -@property(nonatomic, readonly) NSUserDefaults *userDefaults; +@property(nonatomic, readonly) GULUserDefaults *userDefaults; @property(nonatomic, readonly) NSBundle *mainBundle; @property(nonatomic, readonly) NSString *userDefaultKey; @property(nonatomic, assign) BOOL isTokenAutoRefreshConfigured; @@ -38,7 +40,7 @@ @interface FIRAppCheckSettings () @implementation FIRAppCheckSettings - (instancetype)initWithApp:(FIRApp *)firebaseApp - userDefault:(NSUserDefaults *)userDefaults + userDefault:(GULUserDefaults *)userDefaults mainBundle:(NSBundle *)mainBundle { self = [super init]; if (self) { diff --git a/FirebaseAppCheck/Tests/Unit/Core/FIRAppCheckSettingsTests.m b/FirebaseAppCheck/Tests/Unit/Core/FIRAppCheckSettingsTests.m index 6704fc62759..621d6d94e4a 100644 --- a/FirebaseAppCheck/Tests/Unit/Core/FIRAppCheckSettingsTests.m +++ b/FirebaseAppCheck/Tests/Unit/Core/FIRAppCheckSettingsTests.m @@ -16,6 +16,7 @@ #import +#import #import #import "FirebaseAppCheck/Sources/Core/FIRAppCheckSettings.h" @@ -46,7 +47,7 @@ - (void)setUp { self.mockApp = OCMClassMock([FIRApp class]); OCMStub([self.mockApp name]).andReturn(self.appName); - self.mockUserDefaults = OCMClassMock([NSUserDefaults class]); + self.mockUserDefaults = OCMClassMock([GULUserDefaults class]); self.bundleMock = OCMClassMock([NSBundle class]); self.settings = [[FIRAppCheckSettings alloc] initWithApp:self.mockApp diff --git a/FirebaseAppCheckInterop.podspec b/FirebaseAppCheckInterop.podspec index bc5111f6ae8..ea4bf003d1b 100644 --- a/FirebaseAppCheckInterop.podspec +++ b/FirebaseAppCheckInterop.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseAppCheckInterop' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'Interfaces that allow other Firebase SDKs to use AppCheck functionality.' s.description = <<-DESC diff --git a/FirebaseAppDistribution.podspec b/FirebaseAppDistribution.podspec index 11bbbacd781..ae79c61df45 100644 --- a/FirebaseAppDistribution.podspec +++ b/FirebaseAppDistribution.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseAppDistribution' - s.version = '10.23.0-beta' + s.version = '10.25.0-beta' s.summary = 'App Distribution for Firebase iOS SDK.' s.description = <<-DESC diff --git a/FirebaseAppDistribution/Sources/FIRFADApiService.h b/FirebaseAppDistribution/Sources/FIRFADApiService.h index 9162ea47ff8..b14ad4d27b2 100644 --- a/FirebaseAppDistribution/Sources/FIRFADApiService.h +++ b/FirebaseAppDistribution/Sources/FIRFADApiService.h @@ -50,7 +50,7 @@ typedef void (^FIRFADGenerateAuthTokenCompletion)( // Label exceptions from AppDistributionApi calls. FOUNDATION_EXPORT NSString *const kFIRFADApiErrorDomain; -// A service encapsulating calls to the App Distribtuion Tester API +// A service encapsulating calls to the App Distribution Tester API @interface FIRFADApiService : NSObject // Fetch releases from the AppDistribution Tester API diff --git a/FirebaseAppDistributionInternal/Sources/ApiService.swift b/FirebaseAppDistributionInternal/Sources/ApiService.swift index 760062be4d9..9aa59ede3ea 100644 --- a/FirebaseAppDistributionInternal/Sources/ApiService.swift +++ b/FirebaseAppDistributionInternal/Sources/ApiService.swift @@ -537,7 +537,7 @@ struct FeedbackReport: Codable { do { return try JSONDecoder().decode(T.self, from: data) } catch let thrownError { - handleApiParserErorr(thrownError, &error) + handleApiParserError(thrownError, &error) return nil } } @@ -558,12 +558,12 @@ struct FeedbackReport: Codable { options: JSONSerialization.ReadingOptions(rawValue: 0) ) as? T } catch let thrownError { - handleApiParserErorr(thrownError, &error) + handleApiParserError(thrownError, &error) return nil } } - static func handleApiParserErorr(_ thrownError: Error, _ error: inout Error?) { + static func handleApiParserError(_ thrownError: Error, _ error: inout Error?) { let description: String = (thrownError as NSError) .userInfo[NSLocalizedDescriptionKey] as? String ?? "Failed to parse response" error = thrownError diff --git a/FirebaseAuth.podspec b/FirebaseAuth.podspec index 2b75b4330dd..3ff451d56cb 100644 --- a/FirebaseAuth.podspec +++ b/FirebaseAuth.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseAuth' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'Apple platform client for Firebase Authentication' s.description = <<-DESC diff --git a/FirebaseAuth/Tests/SampleSwift/AuthenticationExample/ViewControllers/AccountLinkingViewController.swift b/FirebaseAuth/Tests/SampleSwift/AuthenticationExample/ViewControllers/AccountLinkingViewController.swift index 08bfba3c42d..05f59f0c2b8 100644 --- a/FirebaseAuth/Tests/SampleSwift/AuthenticationExample/ViewControllers/AccountLinkingViewController.swift +++ b/FirebaseAuth/Tests/SampleSwift/AuthenticationExample/ViewControllers/AccountLinkingViewController.swift @@ -386,7 +386,7 @@ class AccountLinkingViewController: UIViewController, DataSourceProviderDelegate preferredStyle: .alert ) - ["Email", "Password"].forEach { placeholder in + for placeholder in ["Email", "Password"] { loginAlertController.addTextField { textfield in textfield.placeholder = placeholder } diff --git a/FirebaseAuth/Tests/SampleSwift/AuthenticationExample/ViewControllers/AuthViewController.swift b/FirebaseAuth/Tests/SampleSwift/AuthenticationExample/ViewControllers/AuthViewController.swift index ae7e36cb8b5..4cc7d4597f0 100644 --- a/FirebaseAuth/Tests/SampleSwift/AuthenticationExample/ViewControllers/AuthViewController.swift +++ b/FirebaseAuth/Tests/SampleSwift/AuthenticationExample/ViewControllers/AuthViewController.swift @@ -15,8 +15,10 @@ // For Sign in with Facebook import FBSDKLoginKit import FirebaseAuth + // [START auth_import] import FirebaseCore + // For Sign in with Google // [START google_import] import GoogleSignIn diff --git a/FirebaseAuthInterop.podspec b/FirebaseAuthInterop.podspec index 19d59f41e64..0cc07ccdc82 100644 --- a/FirebaseAuthInterop.podspec +++ b/FirebaseAuthInterop.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseAuthInterop' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'Interfaces that allow other Firebase SDKs to use Auth functionality.' s.description = <<-DESC diff --git a/FirebaseCore.podspec b/FirebaseCore.podspec index 4957df4fa6e..bb2cb898364 100644 --- a/FirebaseCore.podspec +++ b/FirebaseCore.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseCore' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'Firebase Core' s.description = <<-DESC diff --git a/FirebaseCore/CHANGELOG.md b/FirebaseCore/CHANGELOG.md index c5a879602d9..03e8a150f03 100644 --- a/FirebaseCore/CHANGELOG.md +++ b/FirebaseCore/CHANGELOG.md @@ -1,3 +1,19 @@ +# Unreleased +- [Zip Distribution] Update zip integration instructions with tips for + preserving symlinks and protecting code signatures. + +# Firebase 10.24.0 +- Fix validation issue for macOS and macCatalyst XCFrameworks related to + framework directory structure. (#12587) +- Extend community watchOS support to zip and Carthage distributions. See + https://firebase.google.com/docs/ios/learn-more#firebase_library_support_by_platform + for the Firebase products included. (#8731) +- Add code signatures to all of Firebase's binary artifacts (#12238). + +# Firebase 10.23.1 +- [Swift Package Manager / CocoaPods] Fixes the macOS/Catalyst xcframework + structure issue in Firebase Analytics blocking submission via Xcode 15.3. + # Firebase 10.23.0 - Fix validation issue for macOS and macCatalyst XCFrameworks. (#12505) diff --git a/FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatsBundle.swift b/FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatsBundle.swift index a7db6a5e900..776dfb8ddbc 100644 --- a/FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatsBundle.swift +++ b/FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatsBundle.swift @@ -72,8 +72,8 @@ struct HeartbeatsBundle: Codable, HeartbeatsPayloadConvertible { } // Update cache with the new heartbeat's date. - heartbeat.timePeriods.forEach { - lastAddedHeartbeatDates[$0] = heartbeat.date + for timePeriod in heartbeat.timePeriods { + lastAddedHeartbeatDates[timePeriod] = heartbeat.date } } catch let error as RingBuffer.Error { @@ -98,8 +98,8 @@ struct HeartbeatsBundle: Codable, HeartbeatsPayloadConvertible { if case .success = secondPushAttempt { // Update cache with the new heartbeat's date. - diagnosticHeartbeat.timePeriods.forEach { - lastAddedHeartbeatDates[$0] = diagnosticHeartbeat.date + for timePeriod in diagnosticHeartbeat.timePeriods { + lastAddedHeartbeatDates[timePeriod] = diagnosticHeartbeat.date } } } catch { @@ -124,9 +124,9 @@ struct HeartbeatsBundle: Codable, HeartbeatsPayloadConvertible { poppedHeartbeats.append(poppedHeartbeat) } - poppedHeartbeats.reversed().forEach { + for poppedHeartbeat in poppedHeartbeats.reversed() { do { - try buffer.push($0) + try buffer.push(poppedHeartbeat) } catch { // Ignore error. } diff --git a/FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatsPayload.swift b/FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatsPayload.swift index 7c735d1c5ea..34256b8cb58 100644 --- a/FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatsPayload.swift +++ b/FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatsPayload.swift @@ -15,9 +15,9 @@ import Foundation #if SWIFT_PACKAGE - import GoogleUtilities_NSData + @_implementationOnly import GoogleUtilities_NSData #else - import GoogleUtilities + @_implementationOnly import GoogleUtilities #endif // SWIFT_PACKAGE /// A type that provides a string representation for use in an HTTP header. diff --git a/FirebaseCore/Internal/Tests/Unit/HeartbeatStorageTests.swift b/FirebaseCore/Internal/Tests/Unit/HeartbeatStorageTests.swift index 9f6dd0bf2d2..51d97672e70 100644 --- a/FirebaseCore/Internal/Tests/Unit/HeartbeatStorageTests.swift +++ b/FirebaseCore/Internal/Tests/Unit/HeartbeatStorageTests.swift @@ -14,6 +14,7 @@ @testable import FirebaseCoreInternal import XCTest + class HeartbeatStorageTests: XCTestCase { // MARK: - Instance Management diff --git a/FirebaseCore/Internal/Tests/Unit/HeartbeatTests.swift b/FirebaseCore/Internal/Tests/Unit/HeartbeatTests.swift index 5c2477c6809..06e60ca677f 100644 --- a/FirebaseCore/Internal/Tests/Unit/HeartbeatTests.swift +++ b/FirebaseCore/Internal/Tests/Unit/HeartbeatTests.swift @@ -21,7 +21,7 @@ class TimePeriodTests: XCTestCase { } func testTimeIntervals() throws { - TimePeriod.allCases.forEach { period in + for period in TimePeriod.allCases { XCTAssertEqual(period.timeInterval, Double(period.rawValue) * 86400) } } @@ -36,6 +36,12 @@ class HeartbeatTests: XCTestCase { var heartbeat: Heartbeat! var heartbeatData: Data! + var deterministicEncoder: JSONEncoder = { + let encoder = JSONEncoder() + encoder.outputFormatting = .sortedKeys + return encoder + }() + override func setUpWithError() throws { heartbeat = Heartbeat( agent: "dummy_agent", @@ -43,7 +49,7 @@ class HeartbeatTests: XCTestCase { timePeriods: [.daily], version: 100 ) - heartbeatData = try JSONEncoder().encode(heartbeat) + heartbeatData = try deterministicEncoder.encode(heartbeat) } func testHeartbeatCurrentVersion() throws { @@ -67,7 +73,7 @@ class HeartbeatTests: XCTestCase { let decodedHeartbeat = try JSONDecoder() .decode(Heartbeat.self, from: data) - let encodedHeartbeat = try JSONEncoder() + let encodedHeartbeat = try deterministicEncoder .encode(decodedHeartbeat) // Then diff --git a/FirebaseCoreExtension.podspec b/FirebaseCoreExtension.podspec index 5c2e7e8a4d0..4e7da0eb53c 100644 --- a/FirebaseCoreExtension.podspec +++ b/FirebaseCoreExtension.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseCoreExtension' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'Extended FirebaseCore APIs for Firebase product SDKs' s.description = <<-DESC diff --git a/FirebaseCoreInternal.podspec b/FirebaseCoreInternal.podspec index 1990db42d28..2cb42104375 100644 --- a/FirebaseCoreInternal.podspec +++ b/FirebaseCoreInternal.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseCoreInternal' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'APIs for internal FirebaseCore usage.' s.description = <<-DESC @@ -43,9 +43,9 @@ Pod::Spec.new do |s| s.test_spec 'Unit' do |unit_tests| unit_tests.scheme = { :code_coverage => true } unit_tests.platforms = { - :ios => ios_deployment_target, - :osx => osx_deployment_target, - :tvos => tvos_deployment_target + :ios => '13.0', + :osx => '10.15', + :tvos => '13.0' } unit_tests.source_files = [ 'FirebaseCore/Internal/Tests/Unit/**/*.swift', diff --git a/FirebaseCrashlytics.podspec b/FirebaseCrashlytics.podspec index e67e886b399..1ca34f21665 100644 --- a/FirebaseCrashlytics.podspec +++ b/FirebaseCrashlytics.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseCrashlytics' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'Best and lightest-weight crash reporting for mobile, desktop and tvOS.' s.description = 'Firebase Crashlytics helps you track, prioritize, and fix stability issues that erode app quality.' s.homepage = 'https://firebase.google.com/' diff --git a/FirebaseDatabase.podspec b/FirebaseDatabase.podspec index 3aa94748bda..e6e0f7a20fa 100644 --- a/FirebaseDatabase.podspec +++ b/FirebaseDatabase.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseDatabase' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'Firebase Realtime Database' s.description = <<-DESC @@ -51,6 +51,7 @@ Simplify your iOS development, grow your user base, and monetize more effectivel s.dependency 'FirebaseCore', '~> 10.0' s.dependency 'FirebaseAppCheckInterop', '~> 10.17' s.dependency 'FirebaseSharedSwift', '~> 10.0' + s.dependency 'GoogleUtilities/UserDefaults', '~> 7.13' s.pod_target_xcconfig = { 'GCC_C_LANGUAGE_STANDARD' => 'c99', 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}"' diff --git a/FirebaseDatabase/CHANGELOG.md b/FirebaseDatabase/CHANGELOG.md index acf7b50f5d1..da4a38add59 100644 --- a/FirebaseDatabase/CHANGELOG.md +++ b/FirebaseDatabase/CHANGELOG.md @@ -1,3 +1,6 @@ +# Unreleased +- [changed] Removed usages of user defaults API to eliminate required reason impact. + # 10.17.0 - [feature] The `FirebaseDatabase` module now contains Firebase Database's Swift-only APIs that were previously only available via the diff --git a/FirebaseDatabase/Sources/Core/FRepoInfo.m b/FirebaseDatabase/Sources/Core/FRepoInfo.m index 82ca825aecc..f68bf38cd15 100644 --- a/FirebaseDatabase/Sources/Core/FRepoInfo.m +++ b/FirebaseDatabase/Sources/Core/FRepoInfo.m @@ -14,8 +14,10 @@ * limitations under the License. */ -#import "FirebaseDatabase/Sources/Core/FRepoInfo.h" +#import + #import "FirebaseDatabase/Sources/Constants/FConstants.h" +#import "FirebaseDatabase/Sources/Core/FRepoInfo.h" @interface FRepoInfo () @@ -52,7 +54,7 @@ - (instancetype)initWithHost:(NSString *)aHost // Get cached internal host if it exists NSString *internalHostKey = [NSString stringWithFormat:@"firebase:host:%@", _host]; - NSString *cachedInternalHost = [[NSUserDefaults standardUserDefaults] + NSString *cachedInternalHost = [[GULUserDefaults standardUserDefaults] stringForKey:internalHostKey]; if (cachedInternalHost != nil) { internalHost = cachedInternalHost; @@ -81,7 +83,7 @@ - (void)setInternalHost:(NSString *)newHost { // Cache the internal host so we don't need to redirect later on NSString *internalHostKey = [NSString stringWithFormat:@"firebase:host:%@", self.host]; - NSUserDefaults *cache = [NSUserDefaults standardUserDefaults]; + GULUserDefaults *cache = [GULUserDefaults standardUserDefaults]; [cache setObject:internalHost forKey:internalHostKey]; [cache synchronize]; } @@ -93,7 +95,7 @@ - (void)clearInternalHostCache { // Remove the cached entry NSString *internalHostKey = [NSString stringWithFormat:@"firebase:host:%@", self.host]; - NSUserDefaults *cache = [NSUserDefaults standardUserDefaults]; + GULUserDefaults *cache = [GULUserDefaults standardUserDefaults]; [cache removeObjectForKey:internalHostKey]; [cache synchronize]; } diff --git a/FirebaseDatabase/Sources/Core/View/Filter/FNodeFilter.h b/FirebaseDatabase/Sources/Core/View/Filter/FNodeFilter.h index d19c6fb9f7d..f51200cfdcd 100644 --- a/FirebaseDatabase/Sources/Core/View/Filter/FNodeFilter.h +++ b/FirebaseDatabase/Sources/Core/View/Filter/FNodeFilter.h @@ -59,7 +59,7 @@ forNode:(FIndexedNode *)oldSnap; /** - * Returns true if children might be filtered due to query critiera + * Returns true if children might be filtered due to query criteria */ - (BOOL)filtersNodes; diff --git a/FirebaseDynamicLinks.podspec b/FirebaseDynamicLinks.podspec index aaa43aec721..38ba6239639 100644 --- a/FirebaseDynamicLinks.podspec +++ b/FirebaseDynamicLinks.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseDynamicLinks' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'Firebase Dynamic Links' s.description = <<-DESC diff --git a/FirebaseDynamicLinks/Sources/FIRDynamicLinkNetworking+Private.h b/FirebaseDynamicLinks/Sources/FIRDynamicLinkNetworking+Private.h index dcb7e6b901d..8a41ccfbd91 100644 --- a/FirebaseDynamicLinks/Sources/FIRDynamicLinkNetworking+Private.h +++ b/FirebaseDynamicLinks/Sources/FIRDynamicLinkNetworking+Private.h @@ -20,7 +20,7 @@ NS_ASSUME_NONNULL_BEGIN /** The key for the DL URL. */ FOUNDATION_EXPORT NSString *const kFDLResolvedLinkDeepLinkURLKey; -/** The key for the mininum iOS app version. */ +/** The key for the minimum iOS app version. */ FOUNDATION_EXPORT NSString *const kFDLResolvedLinkMinAppVersionKey; // Private interface for testing. diff --git a/FirebaseDynamicLinks/Sources/FIRDynamicLinks.m b/FirebaseDynamicLinks/Sources/FIRDynamicLinks.m index d6f9454dd5c..0ea1f2921c4 100644 --- a/FirebaseDynamicLinks/Sources/FIRDynamicLinks.m +++ b/FirebaseDynamicLinks/Sources/FIRDynamicLinks.m @@ -698,7 +698,7 @@ + (NSString *)diagnosticAnalyzeEntitlements { NSDictionary *plistMap = (NSDictionary *)plistData; // analyze entitlements and print diagnostic information - // we can't detect erorrs, information p[rinted here may hint developer or will help support + // we can't detect errors, information p[rinted here may hint developer or will help support // to identify the issue NSMutableString *outputString = [[NSMutableString alloc] init]; diff --git a/FirebaseDynamicLinks/Tests/Unit/FIRDLScionLoggingTest.m b/FirebaseDynamicLinks/Tests/Unit/FIRDLScionLoggingTest.m index 60c3fb4dc71..c313b96ea90 100644 --- a/FirebaseDynamicLinks/Tests/Unit/FIRDLScionLoggingTest.m +++ b/FirebaseDynamicLinks/Tests/Unit/FIRDLScionLoggingTest.m @@ -19,7 +19,7 @@ #import #import "FirebaseDynamicLinks/Sources/FIRDLScionLogging.h" -static const NSTimeInterval kAsyncTestTimout = 0.5; +static const NSTimeInterval kAsyncTestTimeout = 0.5; typedef void (^FakeAnalyticsLogEventWithOriginNameParametersHandler)(NSString *origin, NSString *name, @@ -113,7 +113,7 @@ - (void)testGINLogEventToScionCallsLogMethodWithFirstOpen { }]; FIRDLLogEventToScion(FIRDLLogEventFirstOpen, nil, nil, nil, analytics); - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; } - (void)testGINLogEventToScionContainsCorrectNameWithFirstOpen { @@ -126,7 +126,7 @@ - (void)testGINLogEventToScionContainsCorrectNameWithFirstOpen { }]; FIRDLLogEventToScion(FIRDLLogEventFirstOpen, nil, nil, nil, analytics); - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; } - (void)testGINLogEventToScionCallsLogMethodWithAppOpen { @@ -138,7 +138,7 @@ - (void)testGINLogEventToScionCallsLogMethodWithAppOpen { }]; FIRDLLogEventToScion(FIRDLLogEventAppOpen, nil, nil, nil, analytics); - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; } - (void)testGINLogEventToScionContainsCorrectNameWithAppOpen { @@ -151,7 +151,7 @@ - (void)testGINLogEventToScionContainsCorrectNameWithAppOpen { }]; FIRDLLogEventToScion(FIRDLLogEventAppOpen, nil, nil, nil, analytics); - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; } - (void)testGINLogEventToScionLogsParametersCorrectly { @@ -176,7 +176,7 @@ - (void)testGINLogEventToScionLogsParametersCorrectly { FIRDLLogEventToScion(FIRDLLogEventAppOpen, source, medium, campaign, analytics); - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; } @end diff --git a/FirebaseDynamicLinks/Tests/Unit/FIRDynamicLinkNetworkingTests.m b/FirebaseDynamicLinks/Tests/Unit/FIRDynamicLinkNetworkingTests.m index e6be93c6284..b93e8e92332 100644 --- a/FirebaseDynamicLinks/Tests/Unit/FIRDynamicLinkNetworkingTests.m +++ b/FirebaseDynamicLinks/Tests/Unit/FIRDynamicLinkNetworkingTests.m @@ -26,7 +26,7 @@ static NSString *const kAPIKey = @"myfakeapikey"; const NSInteger kJSONParsingErrorCode = 3840; static NSString *const kURLScheme = @"gindeeplinkurl"; -static const NSTimeInterval kAsyncTestTimout = 5.0; +static const NSTimeInterval kAsyncTestTimeout = 5.0; @interface FIRDynamicLinkNetworkingTests : XCTestCase @@ -90,7 +90,7 @@ - (void)testResolveShortLinkServiceCompletionDoesntCrashWhenNilDataIsRetrieved { [expectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; [GULSwizzler unswizzleClass:[FIRDynamicLinkNetworking class] selector:executeRequestSelector diff --git a/FirebaseDynamicLinks/Tests/Unit/FIRDynamicLinksTest.m b/FirebaseDynamicLinks/Tests/Unit/FIRDynamicLinksTest.m index f5e829f8b33..97a06a50a84 100644 --- a/FirebaseDynamicLinks/Tests/Unit/FIRDynamicLinksTest.m +++ b/FirebaseDynamicLinks/Tests/Unit/FIRDynamicLinksTest.m @@ -47,7 +47,7 @@ @"https://sample.page.link?link=%@&isi=585027354"; static NSString *const kURLScheme = @"gindeeplinkurl"; -static const NSTimeInterval kAsyncTestTimout = 5.0; +static const NSTimeInterval kAsyncTestTimeout = 5.0; /** * This string was generated by percent-encoding the Tactile URL for the Tokyo American Club in @@ -526,7 +526,7 @@ - (void)testDynamicLinkFromUniversalLinkURLCompletionWithCustomDomainLink { @"ddl url parameter and deep link url should be the same"); [expectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; UnswizzleDynamicLinkNetworking(); } @@ -567,7 +567,7 @@ - (void)testDynamicLinkFromUniversalLinkURLCompletionWithSpecialCharacters { @"ddl url parameter and deep link url should be the same"); [expectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; UnswizzleDynamicLinkNetworking(); } @@ -608,7 +608,7 @@ - (void)testDynamicLinkFromUniversalLinkURLCompletionWithEncodedCharacters { @"ddl url parameter and deep link url should be the same"); [expectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; UnswizzleDynamicLinkNetworking(); } @@ -657,7 +657,7 @@ - (void)testUniversalLinkWithCompletion_DeepLink { XCTAssertEqualObjects(dynamicLink.url.absoluteString, deepLinkString); [expectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; UnswizzleDynamicLinkNetworking(); } @@ -707,7 +707,7 @@ - (void)testUniversalLinkWithCompletion_DeepLinkWithParameters { parsedDeepLinkString); [expectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; UnswizzleDynamicLinkNetworking(); } @@ -745,7 +745,7 @@ - (void)testResolveLinkReturnsDLWithNilMinAppVersionWhenNotPresent { [expectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; } - (void)testResolveLinkReturnsDLWithMinAppVersionWhenPresent { @@ -790,7 +790,7 @@ - (void)testResolveLinkReturnsDLWithMinAppVersionWhenPresent { [expectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; } - (void)testUniversalLinkWithSubdomain_NoDeepLink { @@ -871,7 +871,7 @@ - (void)testDynamicLinkFromUniversalLinkURLCompletionReturnsDLWithNilMinimumVers XCTAssertNil(minVersion, @"Min app version was not nil when not set."); [expectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; } - (void)testDynamicLinkFromUniversalLinkURLReturnsDLMinimumVersion { @@ -948,7 +948,7 @@ - (void)testDynamicLinkFromUniversalLinkURLReturnsUTMParams { [expectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; } - (void)testDynamicLinkFromUniversalLinkURLCompletionReturnsDLMinimumVersion { @@ -976,7 +976,7 @@ - (void)testDynamicLinkFromUniversalLinkURLCompletionReturnsDLMinimumVersion { @"Min version didn't match imv= parameter"); [expectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; } - (void)testUniversalLinkWithSubdomain_DeepLink { @@ -1022,7 +1022,7 @@ - (void)testUniversalLinkWithCompletionWithSubdomain_DeepLink { XCTAssertEqualObjects(dynamicLink.url.absoluteString, deepLinkString); [expectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; UnswizzleDynamicLinkNetworking(); } @@ -1067,7 +1067,7 @@ - (void)testUniversalLinkWithCompletionWithSubdomain_DeepLinkWithParameters { parsedDeepLinkString); [expectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; } - (void)testResolveLinkRespectsResponseSuccessStatusCode { @@ -1105,7 +1105,7 @@ - (void)testResolveLinkRespectsResponseSuccessStatusCode { [expectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; } - (void)testResolveLinkRespectsResponseErrorStatusCode { @@ -1152,7 +1152,7 @@ - (void)testResolveLinkRespectsResponseErrorStatusCode { [expectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; } - (void)testPassMatchesShortLinkFormatForDDLDomains { @@ -1354,7 +1354,7 @@ - (void)testHandleUniversalLinkWithShortLink { [handleLinkCompletionExpectation fulfill]; }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; UnswizzleDynamicLinkNetworking(); } @@ -1386,7 +1386,7 @@ - (void)testHandleUniversalLinkWithLongLink { [self.service handleUniversalLink:[NSURL URLWithString:longLinkString] completion:handleUniversalLinkBlock]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; // It is expected to call resolveLink once for logging. XCTAssertEqual(resolverInvocationsCount, 1, @@ -1415,7 +1415,7 @@ - (void)testHandleUniversalLinkCallsHandleUniversalLinkResolver { completion:^(FIRDynamicLink *_Nullable dynamicLink, NSError *_Nullable error){ }]; - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; [GULSwizzler unswizzleClass:[FIRDynamicLinks class] selector:selectorToSwizzle @@ -1491,7 +1491,7 @@ - (void)testHandleUniversalLinkCompletionReturnsYesForValidDDL { XCTAssertTrue(handled, @"Valid DDL Universal Link was not handled"); - [self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil]; + [self waitForExpectationsWithTimeout:kAsyncTestTimeout handler:nil]; } } diff --git a/FirebaseFirestore.podspec b/FirebaseFirestore.podspec index b7ea45b827c..20385fbf851 100644 --- a/FirebaseFirestore.podspec +++ b/FirebaseFirestore.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseFirestore' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'Google Cloud Firestore' s.description = <<-DESC Google Cloud Firestore is a NoSQL document database built for automatic scaling, high performance, and ease of application development. @@ -37,7 +37,7 @@ Google Cloud Firestore is a NoSQL document database built for automatic scaling, s.dependency 'FirebaseCore', '~> 10.0' s.dependency 'FirebaseCoreExtension', '~> 10.0' - s.dependency 'FirebaseFirestoreInternal', '~> 10.17' + s.dependency 'FirebaseFirestoreInternal', '10.25.0' s.dependency 'FirebaseSharedSwift', '~> 10.0' end diff --git a/FirebaseFirestoreInternal.podspec b/FirebaseFirestoreInternal.podspec index 4717dcf1cf7..b6a5f955b6d 100644 --- a/FirebaseFirestoreInternal.podspec +++ b/FirebaseFirestoreInternal.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseFirestoreInternal' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'Google Cloud Firestore' s.description = <<-DESC diff --git a/FirebaseFunctions.podspec b/FirebaseFunctions.podspec index 9c74c320285..50c8a2f8497 100644 --- a/FirebaseFunctions.podspec +++ b/FirebaseFunctions.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseFunctions' - s.version = '10.23.0' + s.version = '10.25.0' s.summary = 'Cloud Functions for Firebase' s.description = <<-DESC diff --git a/FirebaseInAppMessaging.podspec b/FirebaseInAppMessaging.podspec index f0122b8ec7c..4b16c2a94a1 100644 --- a/FirebaseInAppMessaging.podspec +++ b/FirebaseInAppMessaging.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'FirebaseInAppMessaging' - s.version = '10.23.0-beta' + s.version = '10.25.0-beta' s.summary = 'Firebase In-App Messaging for iOS' s.description = <<-DESC @@ -83,7 +83,8 @@ See more product details at https://firebase.google.com/products/in-app-messagin s.dependency 'FirebaseCore', '~> 10.0' s.dependency 'FirebaseInstallations', '~> 10.0' s.dependency 'FirebaseABTesting', '~> 10.0' - s.dependency 'GoogleUtilities/Environment', '~> 7.8' + s.dependency 'GoogleUtilities/Environment', '~> 7.13' + s.dependency 'GoogleUtilities/UserDefaults', '~> 7.13' s.dependency 'nanopb', '>= 2.30908.0', '< 2.30911.0' s.test_spec 'unit' do |unit_tests| diff --git a/FirebaseInAppMessaging/CHANGELOG.md b/FirebaseInAppMessaging/CHANGELOG.md index 82a46fddf1e..50f97a2e3e9 100644 --- a/FirebaseInAppMessaging/CHANGELOG.md +++ b/FirebaseInAppMessaging/CHANGELOG.md @@ -1,3 +1,6 @@ +# Unreleased +- [changed] Removed usages of user defaults API to eliminate required reason impact. + # 10.22.0 - [fixed] Fixed an `objc_retain` crash. (#12393) diff --git a/FirebaseInAppMessaging/Sources/Analytics/FIRIAMAnalyticsEventLoggerImpl.h b/FirebaseInAppMessaging/Sources/Analytics/FIRIAMAnalyticsEventLoggerImpl.h index 80d50049d6f..cb406b0098e 100644 --- a/FirebaseInAppMessaging/Sources/Analytics/FIRIAMAnalyticsEventLoggerImpl.h +++ b/FirebaseInAppMessaging/Sources/Analytics/FIRIAMAnalyticsEventLoggerImpl.h @@ -19,6 +19,7 @@ #import "FirebaseInAppMessaging/Sources/Private/Flows/FIRIAMAnalyticsEventLogger.h" @class FIRIAMClearcutLogger; +@class GULUserDefaults; @protocol FIRIAMTimeFetcher; @protocol FIRAnalyticsInterop; @@ -34,12 +35,12 @@ NS_ASSUME_NONNULL_BEGIN /** * * @param userDefaults needed for tracking upload timing info persistently.If nil, using - * NSUserDefaults standardUserDefaults. It's defined as a parameter to help with + * GULUserDefaults standardUserDefaults. It's defined as a parameter to help with * unit testing mocking */ - (instancetype)initWithClearcutLogger:(FIRIAMClearcutLogger *)ctLogger usingTimeFetcher:(id)timeFetcher - usingUserDefaults:(nullable NSUserDefaults *)userDefaults + usingUserDefaults:(nullable GULUserDefaults *)userDefaults analytics:(nullable id)analytics; @end NS_ASSUME_NONNULL_END diff --git a/FirebaseInAppMessaging/Sources/Analytics/FIRIAMAnalyticsEventLoggerImpl.m b/FirebaseInAppMessaging/Sources/Analytics/FIRIAMAnalyticsEventLoggerImpl.m index 7b23405e5c4..8176cb83c68 100644 --- a/FirebaseInAppMessaging/Sources/Analytics/FIRIAMAnalyticsEventLoggerImpl.m +++ b/FirebaseInAppMessaging/Sources/Analytics/FIRIAMAnalyticsEventLoggerImpl.m @@ -17,6 +17,8 @@ #import #if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION) +#import + #import "FirebaseInAppMessaging/Sources/Analytics/FIRIAMAnalyticsEventLoggerImpl.h" #import "FirebaseCore/Extension/FirebaseCoreInternal.h" @@ -29,7 +31,7 @@ @interface FIRIAMAnalyticsEventLoggerImpl () @property(readonly, nonatomic) FIRIAMClearcutLogger *clearCutLogger; @property(readonly, nonatomic) id timeFetcher; -@property(nonatomic, readonly) NSUserDefaults *userDefaults; +@property(nonatomic, readonly) GULUserDefaults *userDefaults; @end // in these kFAXX constants, FA represents FirebaseAnalytics @@ -60,13 +62,13 @@ @implementation FIRIAMAnalyticsEventLoggerImpl { - (instancetype)initWithClearcutLogger:(FIRIAMClearcutLogger *)ctLogger usingTimeFetcher:(id)timeFetcher - usingUserDefaults:(nullable NSUserDefaults *)userDefaults + usingUserDefaults:(nullable GULUserDefaults *)userDefaults analytics:(nullable id)analytics { if (self = [super init]) { _clearCutLogger = ctLogger; _timeFetcher = timeFetcher; _analytics = analytics; - _userDefaults = userDefaults ? userDefaults : [NSUserDefaults standardUserDefaults]; + _userDefaults = userDefaults ? userDefaults : [GULUserDefaults standardUserDefaults]; if (!_analytics) { FIRLogWarning(kFIRLoggerInAppMessaging, @"I-IAM280002", diff --git a/FirebaseInAppMessaging/Sources/Analytics/FIRIAMClearcutUploader.m b/FirebaseInAppMessaging/Sources/Analytics/FIRIAMClearcutUploader.m index 663a8785d2b..c520f21616a 100644 --- a/FirebaseInAppMessaging/Sources/Analytics/FIRIAMClearcutUploader.m +++ b/FirebaseInAppMessaging/Sources/Analytics/FIRIAMClearcutUploader.m @@ -17,6 +17,7 @@ #import #if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION) +#import #import #import "FirebaseCore/Extension/FirebaseCoreInternal.h" @@ -66,7 +67,7 @@ @interface FIRIAMClearcutUploader () { @property(nonatomic, readonly) FIRIAMClearcutLogStorage *logStorage; @property(nonatomic, readonly) FIRIAMClearcutStrategy *strategy; -@property(nonatomic, readonly) NSUserDefaults *userDefaults; +@property(nonatomic, readonly) GULUserDefaults *userDefaults; @end static NSString *FIRIAM_UserDefaultsKeyForNextValidClearcutUploadTimeInMills = @@ -89,7 +90,7 @@ - (instancetype)initWithRequestSender:(FIRIAMClearcutHttpRequestSender *)request timeFetcher:(id)timeFetcher logStorage:(FIRIAMClearcutLogStorage *)logStorage usingStrategy:(FIRIAMClearcutStrategy *)strategy - usingUserDefaults:(nullable NSUserDefaults *)userDefaults { + usingUserDefaults:(nullable GULUserDefaults *)userDefaults { if (self = [super init]) { _nextSendScheduled = NO; _timeFetcher = timeFetcher; @@ -109,7 +110,7 @@ - (instancetype)initWithRequestSender:(FIRIAMClearcutHttpRequestSender *)request object:nil]; } #endif // defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 - _userDefaults = userDefaults ? userDefaults : [NSUserDefaults standardUserDefaults]; + _userDefaults = userDefaults ? userDefaults : [GULUserDefaults standardUserDefaults]; // it would be 0 if it does not exist, which is equvilent to saying that // you can send now _nextValidSendTimeInMills = (int64_t) diff --git a/FirebaseInAppMessaging/Sources/Flows/FIRIAMBookKeeper.m b/FirebaseInAppMessaging/Sources/Flows/FIRIAMBookKeeper.m index 4bebe8fcc77..db85d8723c5 100644 --- a/FirebaseInAppMessaging/Sources/Flows/FIRIAMBookKeeper.m +++ b/FirebaseInAppMessaging/Sources/Flows/FIRIAMBookKeeper.m @@ -17,6 +17,8 @@ #import #if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION) +#import + #import "FirebaseCore/Extension/FirebaseCoreInternal.h" #import "FirebaseInAppMessaging/Sources/FIRCore+InAppMessaging.h" @@ -44,7 +46,7 @@ @interface FIRIAMBookKeeperViaUserDefaults () @property(nonatomic) double lastDisplayTime; @property(nonatomic) double lastFetchTime; @property(nonatomic) double nextFetchWaitTime; -@property(nonatomic, nonnull) NSUserDefaults *defaults; +@property(nonatomic, nonnull) GULUserDefaults *defaults; @end @interface FIRIAMImpressionRecord () @@ -85,7 +87,7 @@ - (NSString *)description { @implementation FIRIAMBookKeeperViaUserDefaults -- (instancetype)initWithUserDefaults:(NSUserDefaults *)userDefaults { +- (instancetype)initWithUserDefaults:(GULUserDefaults *)userDefaults { if (self = [super init]) { _defaults = userDefaults; diff --git a/FirebaseInAppMessaging/Sources/Private/Analytics/FIRIAMClearcutUploader.h b/FirebaseInAppMessaging/Sources/Private/Analytics/FIRIAMClearcutUploader.h index 9c0d1139b36..a349c13d8f4 100644 --- a/FirebaseInAppMessaging/Sources/Private/Analytics/FIRIAMClearcutUploader.h +++ b/FirebaseInAppMessaging/Sources/Private/Analytics/FIRIAMClearcutUploader.h @@ -19,6 +19,7 @@ @class FIRIAMClearcutLogRecord; @class FIRIAMClearcutHttpRequestSender; @class FIRIAMClearcutLogStorage; +@class GULUserDefaults; @protocol FIRIAMTimeFetcher; @@ -58,14 +59,14 @@ NS_ASSUME_NONNULL_BEGIN /** * * @param userDefaults needed for tracking upload timing info persistently.If nil, using - * NSUserDefaults standardUserDefaults. It's defined as a parameter to help with + * GULUserDefaults standardUserDefaults. It's defined as a parameter to help with * unit testing mocking */ - (instancetype)initWithRequestSender:(FIRIAMClearcutHttpRequestSender *)requestSender timeFetcher:(id)timeFetcher logStorage:(FIRIAMClearcutLogStorage *)retryStorage usingStrategy:(FIRIAMClearcutStrategy *)strategy - usingUserDefaults:(nullable NSUserDefaults *)userDefaults; + usingUserDefaults:(nullable GULUserDefaults *)userDefaults; /** * This should return very quickly without blocking on and actual log uploading to * clearcut server, which is done asynchronously diff --git a/FirebaseInAppMessaging/Sources/Private/Flows/FIRIAMBookKeeper.h b/FirebaseInAppMessaging/Sources/Private/Flows/FIRIAMBookKeeper.h index 1c9a11045a4..9f4bca0e8dc 100644 --- a/FirebaseInAppMessaging/Sources/Private/Flows/FIRIAMBookKeeper.h +++ b/FirebaseInAppMessaging/Sources/Private/Flows/FIRIAMBookKeeper.h @@ -17,6 +17,9 @@ #import NS_ASSUME_NONNULL_BEGIN + +@class GULUserDefaults; + @interface FIRIAMImpressionRecord : NSObject @property(nonatomic, readonly, copy) NSString *messageID; @property(nonatomic, readonly) long impressionTimeInSeconds; @@ -64,7 +67,7 @@ NS_ASSUME_NONNULL_BEGIN @interface FIRIAMBookKeeperViaUserDefaults : NSObject - (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithUserDefaults:(NSUserDefaults *)userDefaults NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithUserDefaults:(GULUserDefaults *)userDefaults NS_DESIGNATED_INITIALIZER; // for testing, don't use them for production purpose - (void)cleanupImpressions; diff --git a/FirebaseInAppMessaging/Sources/Private/Runtime/FIRIAMSDKModeManager.h b/FirebaseInAppMessaging/Sources/Private/Runtime/FIRIAMSDKModeManager.h index 65534186fec..f67db3b91e1 100644 --- a/FirebaseInAppMessaging/Sources/Private/Runtime/FIRIAMSDKModeManager.h +++ b/FirebaseInAppMessaging/Sources/Private/Runtime/FIRIAMSDKModeManager.h @@ -18,6 +18,8 @@ NS_ASSUME_NONNULL_BEGIN +@class GULUserDefaults; + extern NSInteger const kFIRIAMMaxFetchInNewlyInstalledMode; /** @@ -56,8 +58,8 @@ extern NSInteger const kFIRIAMMaxFetchInNewlyInstalledMode; - (instancetype)init NS_UNAVAILABLE; -// having NSUserDefaults as passed-in to help with unit testing -- (instancetype)initWithUserDefaults:(NSUserDefaults *)userDefaults +// having GULUserDefaults as passed-in to help with unit testing +- (instancetype)initWithUserDefaults:(GULUserDefaults *)userDefaults testingModeListener:(id)testingModeListener; // returns the current SDK mode diff --git a/FirebaseInAppMessaging/Sources/Runtime/FIRIAMRuntimeManager.m b/FirebaseInAppMessaging/Sources/Runtime/FIRIAMRuntimeManager.m index 411b7eab5ea..499b6fddc9b 100644 --- a/FirebaseInAppMessaging/Sources/Runtime/FIRIAMRuntimeManager.m +++ b/FirebaseInAppMessaging/Sources/Runtime/FIRIAMRuntimeManager.m @@ -17,6 +17,8 @@ #import #if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION) +#import + #import "FirebaseCore/Extension/FirebaseCoreInternal.h" #import "FirebaseInAppMessaging/Sources/Analytics/FIRIAMAnalyticsEventLoggerImpl.h" @@ -94,7 +96,7 @@ - (void)testingModeSwitchedOn { } - (FIRIAMAutoDataCollectionSetting)FIAMProgrammaticAutoDataCollectionSetting { - id settingEntry = [[NSUserDefaults standardUserDefaults] + id settingEntry = [[GULUserDefaults standardUserDefaults] objectForKey:_userDefaultsKeyForFIAMProgammaticAutoDataCollectionSetting]; if (![settingEntry isKindOfClass:[NSNumber class]]) { @@ -188,7 +190,7 @@ - (BOOL)shouldRunSDKFlowsOnStartup { - (void)resume { // persist the setting - [[NSUserDefaults standardUserDefaults] + [[GULUserDefaults standardUserDefaults] setObject:@(YES) forKey:_userDefaultsKeyForFIAMProgammaticAutoDataCollectionSetting]; @@ -209,7 +211,7 @@ - (void)resume { - (void)pause { // persist the setting - [[NSUserDefaults standardUserDefaults] + [[GULUserDefaults standardUserDefaults] setObject:@(NO) forKey:_userDefaultsKeyForFIAMProgammaticAutoDataCollectionSetting]; @@ -262,7 +264,7 @@ - (void)internalStartRuntimeWithSDKSettings:(FIRIAMSDKSettings *)settings { self.responseParser = [[FIRIAMFetchResponseParser alloc] initWithTimeFetcher:timeFetcher]; self.bookKeeper = [[FIRIAMBookKeeperViaUserDefaults alloc] - initWithUserDefaults:[NSUserDefaults standardUserDefaults]]; + initWithUserDefaults:[GULUserDefaults standardUserDefaults]]; self.messageCache = [[FIRIAMMessageClientCache alloc] initWithBookkeeper:self.bookKeeper usingResponseParser:self.responseParser]; @@ -324,7 +326,7 @@ - (void)internalStartRuntimeWithSDKSettings:(FIRIAMSDKSettings *)settings { analytics:[FIRInAppMessaging inAppMessaging].analytics]; FIRIAMSDKModeManager *sdkModeManager = - [[FIRIAMSDKModeManager alloc] initWithUserDefaults:NSUserDefaults.standardUserDefaults + [[FIRIAMSDKModeManager alloc] initWithUserDefaults:GULUserDefaults.standardUserDefaults testingModeListener:self]; FIRIAMActionURLFollower *actionFollower = [FIRIAMActionURLFollower actionURLFollower]; diff --git a/FirebaseInAppMessaging/Sources/Runtime/FIRIAMSDKModeManager.m b/FirebaseInAppMessaging/Sources/Runtime/FIRIAMSDKModeManager.m index f3005412691..6aa77c29f8d 100644 --- a/FirebaseInAppMessaging/Sources/Runtime/FIRIAMSDKModeManager.m +++ b/FirebaseInAppMessaging/Sources/Runtime/FIRIAMSDKModeManager.m @@ -17,6 +17,8 @@ #import #if TARGET_OS_IOS || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION) +#import + #import "FirebaseCore/Extension/FirebaseCoreInternal.h" #import "FirebaseInAppMessaging/Sources/FIRCore+InAppMessaging.h" @@ -38,7 +40,7 @@ } @interface FIRIAMSDKModeManager () -@property(nonatomic, nonnull, readonly) NSUserDefaults *userDefaults; +@property(nonatomic, nonnull, readonly) GULUserDefaults *userDefaults; // Make it weak so that we don't depend on its existence to avoid circular reference. @property(nonatomic, readonly, weak) id testingModeListener; @end @@ -52,7 +54,7 @@ @implementation FIRIAMSDKModeManager { NSInteger _fetchCount; } -- (instancetype)initWithUserDefaults:(NSUserDefaults *)userDefaults +- (instancetype)initWithUserDefaults:(GULUserDefaults *)userDefaults testingModeListener:(id)testingModeListener { if (self = [super init]) { _userDefaults = userDefaults; diff --git a/FirebaseInAppMessaging/Tests/Integration/DefaultUITestApp/FiamDisplaySwiftExample/Base.lproj/Main.storyboard b/FirebaseInAppMessaging/Tests/Integration/DefaultUITestApp/FiamDisplaySwiftExample/Base.lproj/Main.storyboard index 0c3d89c71d5..27330d75073 100644 --- a/FirebaseInAppMessaging/Tests/Integration/DefaultUITestApp/FiamDisplaySwiftExample/Base.lproj/Main.storyboard +++ b/FirebaseInAppMessaging/Tests/Integration/DefaultUITestApp/FiamDisplaySwiftExample/Base.lproj/Main.storyboard @@ -148,7 +148,7 @@