iosxcodeapp-store-connectprovisioning-profileapple-developer

Unable to Update Transferred iOS App Due to Team ID Prefix Change


I recently transferred an existing iOS app from one Apple Developer account to another. The transfer was successful, but I've run into a roadblock when trying to submit an update for the app.

The issue is with the Team ID Prefix, which has changed to match the new developer account. The new provisioning profile generated under the new account automatically uses this new Team ID Prefix. Because of this, I'm unable to submit an update to the existing app, which still uses the old Team ID Prefix.

Update:

Let me clarify my issue with a fictive example:

Suppose I had an app called "OldApp" under an account with a Team ID Prefix of "1234". This app was transferred to a new account, which has a Team ID Prefix of "5678". Now using the new account, I need to release an update for "OldApp", but the provisioning profile generated under the new account automatically uses the new Team ID Prefix "5678".

The problem is that the existing installations of "OldApp" on users' devices are still tied to the old Team ID Prefix "1234". If I submit an update with the new Team ID Prefix "5678", existing users won't be able to update the app directly from the App Store.

Deleting the app and submitting a new one is not an option, as it would disrupt the user experience for our existing customers.

Is there a way to update "OldApp" so that existing users, who have the app with the old Team ID Prefix "1234", can update it seamlessly from the App Store?

Note: Deleting the app is not an option, as existing customers who have the app already installed need to be able to update it from the App Store.

Has anyone encountered this issue before? How can I update the existing app under these circumstances? Is there a way to manually set or revert to the old Team ID Prefix for this specific app?

Update 2:

I suspect that attempting to update the app with a different Team ID will result in failure. This belief stems from a specific error I encountered during my testing process. After installing the existing version of the app from the App Store onto my iPhone, I tried to build and run the project in Xcode targeting the same device. For this test, I had the "Automatically manage signing" option checked in Xcode.

I was met with the following error:

Unable to install 'MyApp'
Domain: com.apple.dt.MobileDeviceErrorDomain
Code: -402652994
User Info: {
    DVTErrorCreationDateKey = "2023-10-04 17:42:48 +0000";
    IDERunOperationFailingWorker = IDEInstalliPhoneLauncher;
}
--
This application’s application-identifier entitlement does not match that of the installed application. These values must match for an upgrade to be allowed.
Domain: com.apple.dt.MobileDeviceErrorDomain
Code: -402652994
User Info: {
    DVTRadarComponentKey = 261622;
    MobileDeviceErrorCode = "(0xE80000BE)"
    
    ...
}

The error message explicitly states that the "application-identifier entitlement does not match that of the installed application" and emphasizes that these values must align for an upgrade to proceed. Given this, I'm concerned that changing the Team ID will obstruct current users ability to update the app successfully when they'll download the update from the App Store.


Solution

  • You say

    Suppose I had an app called "OldApp" under an account with a Team ID Prefix of "1234". This app was transferred to a new account, which has a Team ID Prefix of "5678". Now using the new account, I need to release an update for "OldApp", but the provisioning profile generated under the new account automatically uses the new Team ID Prefix "5678".

    This is correct. To clarify, it doesn't matter what the app was called; an app is identified by its bundle id. So, let's say it has a bundle id of com.mydomain.oldapp.

    The currently installed bundle, with id com.mydomain.oldapp has an embedded provisioning profile from team1234

    Then you say

    The problem is that the existing installations of "OldApp" on users' devices are still tied to the old Team ID Prefix "1234". If I submit an update with the new Team ID Prefix "5678", existing users won't be able to update the app directly from the App Store.

    This incorrect. You have transferred the app to "team5678". The App Store knows this. You submit a new bundle for review. Apple approves it and you make this new version available on the store. The bundle id is still com.mydomain.oldapp. The product id in the App Store is still the same.

    When the user installs the update, iOS just looks at the bundle id - com.mydomain.oldapp. It doesn't matter that the embedded provisioning profile is from a different team.

    The only problem that users may experience is a loss of keychain data; if you app has stored data in the keychain, that data will not be accessible to the update as the team id has changed. This is unavoidable. Your app will need to take whatever steps are required to recreate the keychain data (eg, get the user to log in again).

    Apple provides documentation on the app transfer process, however since your transfer is already complete it is too late to perform many of these tasks.

    From your updated question, I can see that you are getting an error trying to install a build from the new team over the top of a build from your old team in Xcode. This is very different to a user installing an App Store signed build.

    You cannot switch teams and install an update from Xcode. You must first delete the app from your device and then install the new build from the new team.

    This is not a problem with App Store installations and upgrades.