From c6df69207919a597cb22c466ead52915b6429616 Mon Sep 17 00:00:00 2001 From: Liam Nichols Date: Wed, 16 Jul 2025 12:57:25 +0100 Subject: [PATCH 1/3] fix: accessing Availability.h macros in Swift (Xcode 26 support) (#4013) * Create AmplifyAvailability shim for Availability.h imports * Update ASFAppInfo to use AmplifyAvailability * Use traditional target instead of systemLibrary with better support for Xcode 15 --- .../AWSCognitoAuthPlugin/ASF/ASFAppInfo.swift | 5 +++-- .../AmplifyAvailability/AmplityAvailability.c | 21 +++++++++++++++++++ .../include/AmplifyAvailability.h | 21 +++++++++++++++++++ .../AmplifyAvailability/module.modulemap | 4 ++++ Package.swift | 6 ++++++ 5 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 AmplifyPlugins/Auth/Sources/AmplifyAvailability/AmplityAvailability.c create mode 100644 AmplifyPlugins/Auth/Sources/AmplifyAvailability/include/AmplifyAvailability.h create mode 100644 AmplifyPlugins/Auth/Sources/AmplifyAvailability/module.modulemap diff --git a/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/ASF/ASFAppInfo.swift b/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/ASF/ASFAppInfo.swift index cdf1f9b8d0..c092fa05d1 100644 --- a/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/ASF/ASFAppInfo.swift +++ b/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/ASF/ASFAppInfo.swift @@ -5,6 +5,7 @@ // SPDX-License-Identifier: Apache-2.0 // +import AmplifyAvailability import Foundation struct ASFAppInfo: ASFAppInfoBehavior { @@ -16,9 +17,9 @@ struct ASFAppInfo: ASFAppInfoBehavior { var targetSDK: String { var targetSDK: String = "" #if os(iOS) || os(watchOS) || os(tvOS) - targetSDK = "\(__IPHONE_OS_VERSION_MIN_REQUIRED)" + targetSDK = "\(getIOSVersionMinRequired())" #elseif os(macOS) - targetSDK = "\(__MAC_OS_X_VERSION_MIN_REQUIRED)" + targetSDK = "\(getMACOSXVersionMinRequired())" #else targetSDK = "Unknown" #endif diff --git a/AmplifyPlugins/Auth/Sources/AmplifyAvailability/AmplityAvailability.c b/AmplifyPlugins/Auth/Sources/AmplifyAvailability/AmplityAvailability.c new file mode 100644 index 0000000000..74fb7cfb29 --- /dev/null +++ b/AmplifyPlugins/Auth/Sources/AmplifyAvailability/AmplityAvailability.c @@ -0,0 +1,21 @@ +// +// Copyright Amazon.com Inc. or its affiliates. +// All Rights Reserved. +// +// SPDX-License-Identifier: Apache-2.0 +// + +#include "include/AmplifyAvailability.h" +#include + +#if TARGET_OS_IOS || TARGET_OS_WATCH || TARGET_OS_TV +int getIOSVersionMinRequired(void) { + return __IPHONE_OS_VERSION_MIN_REQUIRED; +} +#endif + +#if TARGET_OS_OSX +int getMACOSXVersionMinRequired(void) { + return __MAC_OS_X_VERSION_MIN_REQUIRED; +} +#endif diff --git a/AmplifyPlugins/Auth/Sources/AmplifyAvailability/include/AmplifyAvailability.h b/AmplifyPlugins/Auth/Sources/AmplifyAvailability/include/AmplifyAvailability.h new file mode 100644 index 0000000000..20ab55b8f7 --- /dev/null +++ b/AmplifyPlugins/Auth/Sources/AmplifyAvailability/include/AmplifyAvailability.h @@ -0,0 +1,21 @@ +// +// Copyright Amazon.com Inc. or its affiliates. +// All Rights Reserved. +// +// SPDX-License-Identifier: Apache-2.0 +// + +#ifndef AmplifyAvailability_h +#define AmplifyAvailability_h + +#include + +#if TARGET_OS_IOS || TARGET_OS_WATCH || TARGET_OS_TV +int getIOSVersionMinRequired(void); +#endif + +#if TARGET_OS_OSX +int getMACOSXVersionMinRequired(void); +#endif + +#endif /* AmplifyAvailability_h */ diff --git a/AmplifyPlugins/Auth/Sources/AmplifyAvailability/module.modulemap b/AmplifyPlugins/Auth/Sources/AmplifyAvailability/module.modulemap new file mode 100644 index 0000000000..2ea9f165fd --- /dev/null +++ b/AmplifyPlugins/Auth/Sources/AmplifyAvailability/module.modulemap @@ -0,0 +1,4 @@ +module AmplifyAvailability { + header "include/AmplifyAvailability.h" + export * +} diff --git a/Package.swift b/Package.swift index 39a926ec74..dda063d628 100644 --- a/Package.swift +++ b/Package.swift @@ -179,6 +179,7 @@ let authTargets: [Target] = [ name: "AWSCognitoAuthPlugin", dependencies: [ .target(name: "Amplify"), + .target(name: "AmplifyAvailability"), .target(name: "AmplifySRP"), .target(name: "AWSPluginsCore"), .target(name: "InternalAmplifyCredentials"), @@ -191,6 +192,11 @@ let authTargets: [Target] = [ .copy("Resources/PrivacyInfo.xcprivacy") ] ), + .target( + name: "AmplifyAvailability", + path: "AmplifyPlugins/Auth/Sources/AmplifyAvailability", + publicHeadersPath: "include" + ), .target( name: "libtommathAmplify", path: "AmplifyPlugins/Auth/Sources/libtommath", From beadc84ad7ae33f7e8ee3f3c635adffa47f95079 Mon Sep 17 00:00:00 2001 From: Harsh <6162866+harsh62@users.noreply.github.com> Date: Wed, 16 Jul 2025 12:59:25 -0400 Subject: [PATCH 2/3] fix(auth): allow removing and adding identity pool for an already deployed app (#4022) --- .../AWSCognitoAuthCredentialStore.swift | 16 +++++++++++++++- .../CodeGen/Data/UserPoolConfigurationData.swift | 8 ++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/CredentialStorage/AWSCognitoAuthCredentialStore.swift b/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/CredentialStorage/AWSCognitoAuthCredentialStore.swift index fa897dde68..50d4ce4925 100644 --- a/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/CredentialStorage/AWSCognitoAuthCredentialStore.swift +++ b/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/CredentialStorage/AWSCognitoAuthCredentialStore.swift @@ -83,8 +83,9 @@ struct AWSCognitoAuthCredentialStore { let oldUserPoolConfiguration = oldAuthConfigData.getUserPoolConfiguration() let oldIdentityPoolConfiguration = oldAuthConfigData.getIdentityPoolConfiguration() let newIdentityConfigData = currentAuthConfig.getIdentityPoolConfiguration() + let newUserPoolConfiguration = currentAuthConfig.getUserPoolConfiguration() - /// Only migrate if + /// Migrate if /// - Old User Pool Config didn't exist /// - New Identity Config Data exists /// - Old Identity Pool Config == New Identity Pool Config @@ -95,6 +96,19 @@ struct AWSCognitoAuthCredentialStore { if let oldCognitoCredentialsData = try? keychain._getData(oldNameSpace) { try? keychain._set(oldCognitoCredentialsData, key: newNameSpace) } + /// Migrate if + /// - Old config and new config are different + /// - Old Userpool Existed + /// - Old and new user pool namespacing is the same + } else if oldAuthConfigData != currentAuthConfig && + oldUserPoolConfiguration != nil && + UserPoolConfigurationData.isNamespacingEqual( + lhs: oldUserPoolConfiguration, + rhs: newUserPoolConfiguration) { + // retrieve data from the old namespace and save with the new namespace + if let oldCognitoCredentialsData = try? keychain._getData(oldNameSpace) { + try? keychain._set(oldCognitoCredentialsData, key: newNameSpace) + } } else if oldAuthConfigData != currentAuthConfig && oldNameSpace != newNameSpace { // Clear the old credentials diff --git a/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/StateMachine/CodeGen/Data/UserPoolConfigurationData.swift b/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/StateMachine/CodeGen/Data/UserPoolConfigurationData.swift index 098f8cc299..8f304142a7 100644 --- a/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/StateMachine/CodeGen/Data/UserPoolConfigurationData.swift +++ b/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/StateMachine/CodeGen/Data/UserPoolConfigurationData.swift @@ -57,6 +57,14 @@ struct UserPoolConfigurationData: Equatable { func getIdentityProviderName() -> String { return "cognito-idp.\(region).amazonaws.com/\(poolId)" } + + static func isNamespacingEqual( + lhs: UserPoolConfigurationData?, + rhs: UserPoolConfigurationData?) -> Bool { + return lhs?.poolId == rhs?.poolId + && lhs?.clientId == rhs?.clientId + && lhs?.region == rhs?.region + } } extension UserPoolConfigurationData: Codable { } From c15cf28d8cd61d34a362439a8a7e057985bb16e5 Mon Sep 17 00:00:00 2001 From: Harsh <6162866+harsh62@users.noreply.github.com> Date: Thu, 17 Jul 2025 10:51:35 -0400 Subject: [PATCH 3/3] chore: add migration guide from AWS SDK for iOS to Amplify Swift (#4023) * chore: add migration guide from AWS SDK for iOS to Amplify Swift * updated the FAQ * worked on review comments * re worked on some comments * worked on comments --- MobileSDK_To_AmplifySwift_Guidance.md | 173 ++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 MobileSDK_To_AmplifySwift_Guidance.md diff --git a/MobileSDK_To_AmplifySwift_Guidance.md b/MobileSDK_To_AmplifySwift_Guidance.md new file mode 100644 index 0000000000..f61325264b --- /dev/null +++ b/MobileSDK_To_AmplifySwift_Guidance.md @@ -0,0 +1,173 @@ +# Migrating from AWS SDK for iOS to Amplify Swift + +This guide helps you migrate your iOS app from the legacy AWS SDK for iOS to the modern [Amplify Swift](https://docs.amplify.aws/gen1/swift/) library. + +--- + +## General Migration Notes + +- **Amplify Swift** is the recommended library for all new iOS/macOS/watchOS/tvOS development. +- For any AWS service not yet supported by Amplify, you can use the [AWS SDK for Swift](https://github.com/awslabs/aws-sdk-swift) or reference [Swift SDK code examples](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift). +- For IoT, migrate to the [AWS IoT Device SDK for Swift](https://github.com/aws/aws-iot-device-sdk-swift). +- Amplify will make a best-effort attempt to preserve user auth sessions during migration, but some users may need to re-authenticate. + +## Choose Your Migration Path + +### If you have an **existing Amplify Gen1 project**: +Continue using **Amplify Gen1** and follow the migration tables below. Your existing backend configuration and resources will work seamlessly with Amplify Swift. + +### If you **don't have an Amplify project** or are starting fresh: +We recommend using **[Amplify Gen2](https://docs.amplify.aws/react/start/quickstart/)** for new projects. Gen2 provides a modern fullstack TypeScript developer experience with improved performance and simplified deployment. + +> **Note**: This guide focuses on migrating to Amplify Gen1 to maintain compatibility with existing Amplify backends. For Gen2 migration guidance, see the [Gen2 documentation](https://docs.amplify.aws/react/start/quickstart/). + +--- + +## Category‑by‑category migration + +### Authentication + +| AWS Mobile SDK for iOS | Amplify Swift | +| --------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | +| [SignUp](https://docs.amplify.aws/gen1/swift/sdk/auth/working-with-api/#signup) | [SignUp](https://docs.amplify.aws/gen1/swift/build-a-backend/auth/enable-sign-in/#register-a-user) | +| [Confirm SignUp](https://docs.amplify.aws/gen1/swift/sdk/auth/working-with-api/#confirm-signup) | [Confirm SignUp](https://docs.amplify.aws/gen1/swift/build-a-backend/auth/enable-sign-in/#register-a-user) | +| [Sign In](https://docs.amplify.aws/gen1/swift/sdk/auth/working-with-api/#signin) | [Sign In](https://docs.amplify.aws/gen1/swift/build-a-backend/auth/enable-sign-in/#sign-in-a-user) | +| [Guest Access](https://docs.amplify.aws/gen1/swift/sdk/auth/guest-access/) | [Guest Access](https://docs.amplify.aws/gen1/swift/build-a-backend/auth/enable-guest-access/) | +| [Federated Identities](https://docs.amplify.aws/gen1/swift/sdk/auth/federated-identities/) | [Federated Identities](https://docs.amplify.aws/gen1/swift/build-a-backend/auth/advanced-workflows/#identity-pool-federation) | +| [Custom Auth Flow](https://docs.amplify.aws/gen1/swift/sdk/auth/custom-auth-flow/) | [Custom Auth Flow](https://docs.amplify.aws/gen1/swift/build-a-backend/auth/sign-in-custom-flow/#configure-auth-category) | +| [Track/Remember Device](https://docs.amplify.aws/gen1/swift/sdk/auth/device-features/) | [Track/Remember Device](https://docs.amplify.aws/gen1/swift/build-a-backend/auth/remember-device/#configure-auth-category) | +| **Drop‑in UI** (Deprecated `AWSMobileClient`) | [**Amplify UI Authenticator**](https://ui.docs.amplify.aws/swift/connected-components/authenticator) | +| [Change Password](https://docs.amplify.aws/gen1/swift/sdk/auth/working-with-api/#force-a-password-reset) | [Change Password](https://docs.amplify.aws/gen1/swift/build-a-backend/auth/manage-passwords/#change-password) | +| [Forgot Password](https://docs.amplify.aws/gen1/swift/sdk/auth/working-with-api/#forgot-password) | [Reset Password](https://docs.amplify.aws/gen1/swift/build-a-backend/auth/multi-step-sign-in/#reset-password) | +| [Tokens & Credentials](https://docs.amplify.aws/gen1/swift/sdk/auth/working-with-api/#managing-security-tokens) | [Accessing Credentials](https://docs.amplify.aws/gen1/swift/build-a-backend/auth/accessing-credentials/) | +| [Global SignOut](https://docs.amplify.aws/gen1/swift/sdk/auth/working-with-api/#global-signout) | [Global SignOut](https://docs.amplify.aws/gen1/swift/build-a-backend/auth/sign-out/#global-sign-out) | +| [Hosted UI](https://docs.amplify.aws/gen1/swift/sdk/auth/hosted-ui/#using-auth0-hosted-ui) | [Sign in with Web UI](https://docs.amplify.aws/gen1/swift/build-a-backend/auth/sign-in-with-web-ui/) | + +> **Note** – Social sign‑in in Authenticator for SwiftUI is under active development; track progress in the [GitHub repo](https://github.com/aws-amplify/amplify-ui-swift-authenticator). + +--- + +### Storage + +| AWS Mobile SDK for iOS | Amplify Swift | +| -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | +| [Upload File](https://docs.amplify.aws/gen1/swift/sdk/storage/transfer-utility/#upload-a-file) | [Upload File](https://docs.amplify.aws/gen1/swift/build-a-backend/storage/upload/) | +| [Download File](https://docs.amplify.aws/gen1/swift/sdk/storage/transfer-utility/#download-a-file) | [Download File](https://docs.amplify.aws/gen1/swift/build-a-backend/storage/download/#download-to-file) | +| [Progress Tracking](https://docs.amplify.aws/gen1/swift/sdk/storage/transfer-utility/#track-transfer-progress) | Supported via completion handlers & async sequences | +| [Pause Transfers](https://docs.amplify.aws/gen1/swift/sdk/storage/transfer-utility/#pause-a-transfer), [Resume Transfers](https://docs.amplify.aws/gen1/swift/sdk/storage/transfer-utility/#resume-a-transfer) | [Pause/Resume](https://docs.amplify.aws/gen1/swift/build-a-backend/storage/download/#cancel-pause-resume) supported for downloads/uploads | +| [Cancel Transfers](https://docs.amplify.aws/gen1/swift/sdk/storage/transfer-utility/#cancel-a-transfer) | [Cancel](https://docs.amplify.aws/gen1/swift/build-a-backend/storage/download/#cancel-pause-resume) supported for downloads/uploads | +| [Transfer with Metadata](https://docs.amplify.aws/gen1/swift/sdk/storage/transfer-utility/#transfer-with-object-metadata) | Supported (`StorageUploadFileRequest.Options.metadata`) | +| Background Transfers | Not currently supported in Amplify Swift ([see SDK doc](https://docs.amplify.aws/gen1/swift/sdk/storage/transfer-utility/#background-transfers)) | + +--- + +### REST API + +(Replace **AWSAPIGatewayClient**) + +| AWS Mobile SDK for iOS | Amplify Swift | +| ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [Invoke](https://docs.amplify.aws/gen1/swift/sdk/api/rest/) | [Create](https://docs.amplify.aws/gen1/swift/build-a-backend/restapi/set-up-rest-api/#make-a-post-request) / [Fetch](https://docs.amplify.aws/gen1/swift/build-a-backend/restapi/fetch-data/) / [Update](https://docs.amplify.aws/gen1/swift/build-a-backend/restapi/update-data/) / [Delete](https://docs.amplify.aws/gen1/swift/build-a-backend/restapi/delete-data/) | +| [IAM Auth](https://docs.amplify.aws/gen1/swift/sdk/api/rest/#iam-authorization) | [Configure IAM](https://docs.amplify.aws/gen1/swift/build-a-backend/restapi/customize-authz/#iam-authorization) | +| [Cognito User Pools Authorization](https://docs.amplify.aws/gen1/swift/sdk/api/rest/#cognito-user-pools-authorization) | [Cognito User Pools Authorization](https://docs.amplify.aws/gen1/swift/build-a-backend/restapi/customize-authz/#cognito-user-pool-authorization) | + +--- + +### GraphQL API + +(Replace **AWSAppSyncClient**) + +| AWS Mobile SDK for iOS | Amplify Swift | +| ---------------------- | ----------------------------------------------------------------------------------------------------------------------- | +| [Run Queries](https://docs.amplify.aws/gen1/swift/sdk/api/graphql/#run-a-query), [Run Mutations](https://docs.amplify.aws/gen1/swift/sdk/api/graphql/#run-a-mutation) | [Query Data](https://docs.amplify.aws/gen1/swift/build-a-backend/graphqlapi/query-data/) / [Mutate Data](https://docs.amplify.aws/gen1/swift/build-a-backend/graphqlapi/mutate-data/) | +| [Subscriptions](https://docs.amplify.aws/gen1/swift/sdk/api/graphql/#subscribe-to-data) | [Real‑time Subscribe](https://docs.amplify.aws/gen1/swift/build-a-backend/graphqlapi/subscribe-data/) | +| [Auth Modes](https://docs.amplify.aws/gen1/swift/sdk/api/graphql/#authorization-modes) | [Configure Auth Modes](https://docs.amplify.aws/gen1/swift/build-a-backend/graphqlapi/customize-authz-modes/) | + +--- + +### Push Notifications + +> **Pinpoint deprecation notice** – Pinpoint will be retired Oct 30 2026. Plan migrations accordingly. + +| AWS SDK for iOS | Amplify Swift | +|-------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------| +| [Setup](https://docs.amplify.aws/gen1/swift/sdk/push-notifications/setup-push-service/) | [Setup](https://docs.amplify.aws/gen1/swift/build-a-backend/push-notifications/set-up-push-notifications/) | +| [Push Notification Service Setup](https://docs.amplify.aws/gen1/swift/sdk/push-notifications/setup-push-service/) | [Push Notification Service Setup](https://docs.amplify.aws/gen1/swift/build-a-backend/push-notifications/set-up-push-service/) | +| [Register Device](https://docs.amplify.aws/gen1/swift/sdk/push-notifications/messaging-campaign/) | [Register Device](https://docs.amplify.aws/gen1/swift/build-a-backend/push-notifications/register-device/) | +| [Record Notification Events](https://docs.amplify.aws/gen1/swift/sdk/push-notifications/messaging-campaign/) | [Record Notification Events](https://docs.amplify.aws/gen1/swift/build-a-backend/push-notifications/record-notifications/) | + +--- + +### Analytics + +> **Pinpoint deprecation notice** – Pinpoint will be retired Oct 30 2026. Plan migrations accordingly. + +| AWS SDK for iOS | Amplify Swift | +|-------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------| +| [Manually Track Session](https://docs.amplify.aws/gen1/swift/sdk/analytics/getting-started/#add-analytics) | [Automatically Track Session](https://docs.amplify.aws/gen1/swift/build-a-backend/more-features/analytics/set-up-analytics/#initialize-amplify-analytics) | +| [Add Analytics](https://docs.amplify.aws/gen1/swift/sdk/analytics/getting-started/#add-analytics) | [Add Analytics](https://docs.amplify.aws/gen1/swift/build-a-backend/more-features/analytics/set-up-analytics/#initialize-amplify-analytics) | +| [Authentication Events](https://docs.amplify.aws/gen1/swift/sdk/analytics/events/#authentication-events) | [Authentication Events](https://docs.amplify.aws/gen1/swift/build-a-backend/more-features/analytics/record-events/#authentication-events) | +| [Custom Events](https://docs.amplify.aws/gen1/swift/sdk/analytics/events/#custom-events) | [Custom Events](https://docs.amplify.aws/gen1/swift/build-a-backend/more-features/analytics/record-events/) | + +--- + +### AWS IoT + +Amplify currently does **not** expose an IoT category. Use the standalone [**AWS IoT Device SDK for Swift**](https://github.com/aws/aws-iot-device-sdk-swift/blob/main/Package.swift), which works side‑by‑side with Amplify. + +```swift +// Example: Connect & subscribe with AWS IoT Device SDK Swift +import AwsIot +... +``` + +--- + +## When Amplify doesn't cover a service + +For AWS services without an Amplify category (e.g., Amazon SQS, EventBridge, DynamoDB Streams) import the **AWS SDK for Swift** directly.\ +See runnable examples in the [aws‑doc‑sdk‑examples/swift](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift) repository. + +> **Tip** – You can share credentials between Amplify and AWS SDK by passing `Amplify.Auth.fetchAuthSession()` credentials into service client configuration. + +--- + +## Migration checklist + +1. **Remove** SDK pods / SPM packages for `AWSMobileClient`, `AWSS3TransferUtility`, etc. +2. **Backend setup**: + - **Existing Amplify Gen1 project**: Run `amplify pull` to download your configuration + - **New project**: Set up [Amplify Gen2](https://docs.amplify.aws/react/start/quickstart/) or use existing AWS resources +3. **Add** Amplify Swift libraries and required plugins via SPM. +4. Initialize Amplify in your App's entry point. +5. Replace legacy calls using the tables above. +6. Build & test: verify + - Existing users stay signed in + - S3 uploads/downloads work + - API calls succeed + - Analytics events appear in Pinpoint + +--- + +## FAQ + +> **Can I mix AWS Mobile SDK for iOS and Amplify Swift (Amplify v2) in the same app?** +> +> **No.** AWS Amplify explicitly does **not** support using the AWS Mobile SDK for iOS and Amplify Swift (Amplify v2) together in the same app. This is due to overlapping implementations, conflicting dependencies, and import issues. Attempting to use both in the same project can result in unpredictable behavior, build errors, and runtime issues. +> +> For a successful migration, you must **fully remove** the AWS Mobile SDK for iOS from your project before integrating Amplify Swift (Amplify v2). + +**Will my users be forced to sign in again?**\ +No. When Amplify is pointed at the same Cognito User Pool and key‑chain location, it detects cached refresh tokens and continues the session automatically. + +--- + +## Additional resources + +- [Amplify Swift Upgrade Guide](https://docs.amplify.aws/gen1/swift/start/project-setup/upgrade-guide/) +- [Amplify UI Authenticator for Swift](https://github.com/aws-amplify/amplify-ui-swift-authenticator) +- [AWS IoT Device SDK for Swift announcement](https://aws.amazon.com/blogs/developer/introducing-the-aws-iot-device-sdk-for-swift-developer-preview/) + +--- + +© Amazon Web Services 2025 – Documentation links verified **July 16 2025**. \ No newline at end of file