Skip to content

Instantly share code, notes, and snippets.

@chaitanyagupta
Last active November 5, 2024 10:25
Show Gist options
  • Save chaitanyagupta/9a2a13f0a3e6755192f7 to your computer and use it in GitHub Desktop.
Save chaitanyagupta/9a2a13f0a3e6755192f7 to your computer and use it in GitHub Desktop.
How to re-sign an iOS app with another developer account

WARNING These steps are probably out dated and will not work.

To re-sign an iOS app with another developer account, ensure that the following are in place first.

  1. Distribution certificate of the other developer account
  2. A provisioning profile from the other developer account

Note that the Apple requires bundle IDs to be globally unique, even across accounts. So a bundle ID i.e. CFBundleIdentifier from one account can't be used in a different account, even though the team id/prefix would be different.

Ensure that the new distribution certificate is in your keychain and the new provisioning profile on your disk.

  1. Unzip the .ipa. This will usually unzip to Payload/<app-name>.app/

  2. Export entitlements.plist from the app using the codesign utility

     codesign -d --entitlements :entitlements.plist /path/to/<app-name>.app/
    
  3. Open entitlements.plist in your favourite editor, and modify the bundle id and prefix to that of the new dev account and app. Don't forget to update the keychain access groups.

  4. Open Info.plist in your favourite editor and modify the bundle identifier (CFBundleIdentifier). It can be found at /path/to/<app-name.app>/Info.plist.

  5. Replace the embedded provisioning profile.

     cp /path/to/new-profile.mobileprovision /path/to/<app-name>.app/embedded.mobileprovision
    
  6. Install the new signature.

     codesign -f -s "Distribution Certificate Name" -i com.example.new_bundle_id --entitlements entitlements.plist -vv /path/to/<app-name>.app/
    
  7. Package the application

     xcrun -sdk iphoneos PackageApplication -s "Distribution Certificate Name" -o /path/to/new.ipa /path/to/<app-name>.app
    
  8. Distribute /path/to/new.ipa to your testers.

@irodkin
Copy link

irodkin commented Nov 1, 2017

@niloufarMakhzani You can use 'codesign -s' command without specifying '-i' option. (Execute 'codesign --help' for details.)

@rustymagnet3000
Copy link

Great list.

any suggestions for Step 7, now that PackageApplication has been deprecated for 1y + ?

@Blackjacx
Copy link

Can I resign a distribution signed IPA with a development certificate? My app crashe constantly at launch time. I don't get it...

@vorlovsky
Copy link

vorlovsky commented Jan 18, 2023

Step 7 can be skipped (at least since PackageApplication is deprecated), just zip up your Payload folder:
zip -r /path/to/new.ipa /path/to/Payload

@leozhuo
Copy link

leozhuo commented Oct 20, 2023

I successfully re signed an IPA file following the steps above. The IPA file can be downloaded after being placed on my server. But it cannot be opened after the download is completed
IMG_9A2C1C8E3A7C-1

@vorlovsky
Copy link

I successfully re signed an IPA file following the steps above. The IPA file can be downloaded after being placed on my server. But it cannot be opened after the download is completed

As for the most of iOS errors, it's almost impossible to figure out the actual reason from its message. You should observe device logs at the moment when installation is finished or when you first try to run the app.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment