Repository: firebase/firebase-ios-sdk (language: cpp)

Issue:
[FR]: Mark Firebase Dynamic Links as deprecated in the iOS SDK
### Description

The Firebase Dynamic Links service was announced as deprecated in August 2023, and is scheduled to sunset on August 25th, 2025. Please see the [Dynamic Links Deprecation FAQ](https://firebase.google.com/support/dynamic-links-faq) for more details.

Could you please help mark the FDL APIs as deprecated in the next release of the iOS SDK? The following messaging can be used for the deprecation notice:

> Note: Firebase Dynamic Links is deprecated and the service will shut down on August 25, 2025.

> Please see our [Dynamic Links Deprecation FAQ documentation](https://firebase.google.com/support/dynamic-links-faq) > for guidance on alternative solutions and migration options.

### API Proposal

_No response_

### Firebase Product(s)

DynamicLinks


Discussion / hints:

Fix patch:
diff --git a/.github/workflows/dynamiclinks.yml b/.github/workflows/dynamiclinks.yml
index a04cefe68b1..f2679cc3fda 100644
--- a/.github/workflows/dynamiclinks.yml
+++ b/.github/workflows/dynamiclinks.yml
@@ -37,7 +37,7 @@ jobs:
     - name: Xcode
       run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
     - name: FirebaseDynamicLinks
-      run: scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseDynamicLinks.podspec
+      run: scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseDynamicLinks.podspec --allow-warnings
 
   spm:
     # Don't run on private repo unless it is a PR.
@@ -80,7 +80,7 @@ jobs:
     - name: Setup Bundler
       run: scripts/setup_bundler.sh
     - name: PodLibLint Storage Cron
-      run: scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseDynamicLinks.podspec --platforms=ios ${{ matrix.flags }}
+      run: scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseDynamicLinks.podspec --platforms=ios ${{ matrix.flags }}  --allow-warnings
 
   quickstart:
     # Don't run on private repo unless it is a PR.
diff --git a/FirebaseDynamicLinks/CHANGELOG.md b/FirebaseDynamicLinks/CHANGELOG.md
index 20226346a37..2c971f5967a 100644
--- a/FirebaseDynamicLinks/CHANGELOG.md
+++ b/FirebaseDynamicLinks/CHANGELOG.md
@@ -1,3 +1,6 @@
+# Unreleased
+- [added] Added deprecation warning in advance of August 25, 2025 Dynamic Links service shutdown. (#12995)
+
 # 10.3.0
 - [fixed] Fixes issue where `utmParametersDictionary` / `minimumAppVersion` were not provided and their value were set to `[NSNull null]` instead of `nil`.
 
diff --git a/FirebaseDynamicLinks/Sources/Public/FirebaseDynamicLinks/FIRDynamicLinks.h b/FirebaseDynamicLinks/Sources/Public/FirebaseDynamicLinks/FIRDynamicLinks.h
index 78c8f5d0e81..a23dea44780 100644
--- a/FirebaseDynamicLinks/Sources/Public/FirebaseDynamicLinks/FIRDynamicLinks.h
+++ b/FirebaseDynamicLinks/Sources/Public/FirebaseDynamicLinks/FIRDynamicLinks.h
@@ -31,7 +31,8 @@ NS_ASSUME_NONNULL_BEGIN
  * @abstract A class that checks for pending Dynamic Links and parses URLs.
  *     This class is available on iOS only.
  */
-
+DEPRECATED_MSG_ATTRIBUTE(
+    "Firebase Dynamic Links is deprecated and the service will shut down on August 25, 2025.")
 NS_EXTENSION_UNAVAILABLE_IOS("Firebase Dynamic Links is not supported for iOS extensions.")
 API_UNAVAILABLE(macos, tvos, watchos)
 NS_SWIFT_NAME(DynamicLinks)
diff --git a/ReleaseTooling/Sources/FirebaseManifest/FirebaseManifest.swift b/ReleaseTooling/Sources/FirebaseManifest/FirebaseManifest.swift
index 881d312b883..ba310c2d536 100755
--- a/ReleaseTooling/Sources/FirebaseManifest/FirebaseManifest.swift
+++ b/ReleaseTooling/Sources/FirebaseManifest/FirebaseManifest.swift
@@ -44,7 +44,7 @@ public let shared = Manifest(
     Pod("FirebaseAuth", zip: true),
     Pod("FirebaseCrashlytics", zip: true),
     Pod("FirebaseDatabase", platforms: ["ios", "macos", "tvos"], zip: true),
-    Pod("FirebaseDynamicLinks", platforms: ["ios"], zip: true),
+    Pod("FirebaseDynamicLinks", allowWarnings: true, platforms: ["ios"], zip: true),
     Pod("FirebaseFirestoreInternal", allowWarnings: true, platforms: ["ios", "macos", "tvos"]),
     Pod("FirebaseFirestore", allowWarnings: true, platforms: ["ios", "macos", "tvos"], zip: true),
     Pod("FirebaseFunctions", zip: true),
diff --git a/scripts/create_spec_repo/Sources/SpecRepoBuilder/main.swift b/scripts/create_spec_repo/Sources/SpecRepoBuilder/main.swift
index 4134ca56564..a6ec9ede9fb 100644
--- a/scripts/create_spec_repo/Sources/SpecRepoBuilder/main.swift
+++ b/scripts/create_spec_repo/Sources/SpecRepoBuilder/main.swift
@@ -270,7 +270,7 @@ struct SpecRepoBuilder: ParsableCommand {
   func pushPodspec(forPod pod: URL, sdkRepo: String, sources: [String],
                    flags: [String], shell: Shell = Shell.shared) throws -> Int32 {
     let sourcesArg = sources.joined(separator: ",")
-    let flagsArgArr = allowWarnings ?flags + ["--allow-warnings"] : flags
+    let flagsArgArr = allowWarnings ? flags + ["--allow-warnings"] : flags
     let flagsArg = flagsArgArr.joined(separator: " ")
 
     do {


Test patch:
diff --git a/scripts/health_metrics/pod_test_code_coverage_report.sh b/scripts/health_metrics/pod_test_code_coverage_report.sh
index 1908c92d0d6..ff742a89965 100755
--- a/scripts/health_metrics/pod_test_code_coverage_report.sh
+++ b/scripts/health_metrics/pod_test_code_coverage_report.sh
@@ -60,6 +60,8 @@ if [ $SDK == "FirebasePerformance" ]; then
 elif [ $SDK == "FirebaseFirestore" ]; then
   scripts/install_prereqs.sh Firestore ${PLATFORM} xcodebuild
   scripts/third_party/travis/retry.sh scripts/build.sh Firestore ${PLATFORM} xcodebuild
+elif [ $SDK == "FirebaseDynamicLinks" ]; then
+  scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb "${SDK}".podspec --verbose --allow-warnings --platforms="$(tr '[:upper:]' '[:lower:]'<<<${PLATFORM})" --test-specs="${TEST_SPEC}"
 else
   # Run unit tests of pods and put xcresult bundles into OUTPUT_PATH, which
   # should be a targeted dir of actions/upload-artifact in workflows.