Resign An iOS App At The Command Line

2 minute read

Do you need to resign an iOS app due to an expiring provisioning profile or new bundle identifier, but you don't have access to the project files (.xcodeproj or .xcworkspace)? Or maybe you do have access to the project files, but your environment's version of Xcode can't build the project within the GUI for whatever reason? In this article, I'll share with you a solution that resigns an app without having to open Xcode.

resign-an-ios-app-at-the-command-line

Assumptions

You have

  1. A Mac with Xcode installed
  2. An iOS app file (.ipa)
  3. A valid provisioning profile you wish to resign the app with (.mobileprovision)
  4. A valid distribution certificate for the above provisioning profile along with the private key used to generate the certificate in your Mac's Keychain

Solution

Below is a bash script I wrote that you can download:

After downloading, you'll need to change the permissions of the script to allow it to be executable:

$ chmod 755 resign-ios-app

Usage

Invoke the script without any arguments to see an instructional message:

$ ./resign-ios-app
Expected at least three arguments.
Something like 'AnApp.ipa' 'AProvisioningProfile.mobileprovision' 'iPhone Distribution: AnOrganization' where
  $1 is an .ipa file
  $2 is a .mobileprovision
  $3 is the name of a distribution certificate in the Keychain
You may pass a fourth argument to serve as a new bundle identifier for the resigned app. If not included, the original bundle identifier will be used.

Assuming you have this script, the .ipa, and .mobileprovision all in the same folder, and you're in that folder:

$ ./resign-ios-app 'AnApp.ipa' 'XC_iOS_comcompanyAnApp.mobileprovision' 'iPhone Distribution: AnOrganization'
Unzipping "AnApp.ipa"...
Extracting .app...
Removing existing _CodeSignature...
Decoding "XC_iOS_comcompanyAnApp.mobileprovision" and writing to ProvisioningProfile.plist...
Extracting "Entitlements" from ProvisioningProfile.plist and writing to Entitlements.plist...
Embedding "XC_iOS_comcompanyAnApp.mobileprovision" into "AnApp.app"...
Resigning "AnApp.app" with existing bundle identifier "com.company.AnApp"
Resigning embedded Swift libraries...
./libswiftCoreImage.dylib: replacing existing signature
./libswiftObjectiveC.dylib: replacing existing signature
./libswiftCore.dylib: replacing existing signature
./libswiftCoreGraphics.dylib: replacing existing signature
./libswiftUIKit.dylib: replacing existing signature
./libswiftMetal.dylib: replacing existing signature
./libswiftCoreData.dylib: replacing existing signature
./libswiftDispatch.dylib: replacing existing signature
./libswiftos.dylib: replacing existing signature
./libswiftCoreFoundation.dylib: replacing existing signature
./libswiftDarwin.dylib: replacing existing signature
./libswiftQuartzCore.dylib: replacing existing signature
./libswiftCoreAudio.dylib: replacing existing signature
./libswiftAVFoundation.dylib: replacing existing signature
./libswiftFoundation.dylib: replacing existing signature
./libswiftCoreMedia.dylib: replacing existing signature
./libswiftsimd.dylib: replacing existing signature
Resigning embedded frameworks...
./BarcodeScanner.framework: replacing existing signature
./SQLite.framework: replacing existing signature
Resigning "AnApp.app" with certificate "iPhone Distribution: AnOrganization"...
Payload/AnApp.app: replacing existing signature
Zipping app data into an .ipa...
Resigning successful. Resigned app to /Users/daniel/resign-ios-app/resigned.ipa

After a successful resigning, you'll notice some extra files in the folder:

$ ls -l
-rw-rw-r--@ 1 daniel  staff  11506405 Nov 19 15:57 AnApp.ipa
-rw-r--r--@ 1 daniel  staff       228 Feb  4  2019 AppThinning.plist
-rw-r--r--  1 daniel  staff       517 Nov 22 18:29 Entitlements.plist
-rw-r--r--@ 1 daniel  staff      7354 Nov 19 10:26 XC_iOS_comcompanyAnApp.mobileprovision
drwxr-xr-x@ 3 daniel  staff        96 Feb  4  2019 Payload
-rw-r--r--  1 daniel  staff      3382 Nov 22 18:29 ProvisioningProfile.plist
-rw-r--r--  1 daniel  staff  11488043 Nov 22 18:29 resigned.ipa

Payload and the .plist files are artifacts of the script and can be deleted. resigned.ipa should be good to deploy.

Tested

I developed and tested this script on:

  • macOS 10.15.7
  • Xcode 12.2
  • GNU bash, version 5.0.7(1)-release (x86_64-apple-darwin16.7.0)

That being said, this script should work with macOS's built in version of bash version 3 and recent versions of macOS and Xcode.

Please create an Issue against my repository for this solution if you can offer any improvements for more complicated resignings.

Comments

masturbaza

You are mistaken. I suggest it to discuss.


<a href=https://www.masturbaza.com/dont-break-me-sam-shock-morgan-rain-floor-is-lava-fucking-mofos/>https://www.masturbaza.com/dont-break-me-sam-shock-morgan-rain-floor-is-lava-fucking-mofos/</a> | https://www.masturbaza.com/

vulpyx

I apologise, but, in my opinion, you are not right. I am assured. Let's discuss.


<a href=https://www.vulpyx.com/three-babes-tortured-and-fucked-at-party/>https://www.vulpyx.com/three-babes-tortured-and-fucked-at-party/</a> | https://www.vulpyx.com/

Dagaure

Какая фраза…


<a href=https://poker-helper.com>poker program help</a>

Я извиняюсь, но, по-моему, Вы не правы. Могу это доказать. Пишите мне в PM.


<a href=https://partnersmelbet.com/>affiliate melbet</a>

P.S. даю 9 балов из 10.


<a href=https://ivoireparis.com/>1xbet code 1x_695</a>

Не очень!


<a href=https://kenya-bets.com/>sporty bet</a>

просто супер!


<a href=https://muzparty.net/10637-fresco-wait.html>https://muzparty.net/10637-fresco-wait.html</a>

Извините, что я Вас прерываю, но не могли бы Вы расписать немного подробнее.


<a href=https://tekhosmotr.online/>техосмотр 350 рублей</a>

Советую Вам попробовать поискать в google.com


<a href=https://affiliate1xbet.com/>1xbet affiliate</a>

Спасибо за помощь в этом вопросе, я тоже считаю, что чем проще, тем лучше…


<a href=https://joycasino-oficialniy-sayt.com/>joycasino официальный сайт</a>

Я думаю, что Вы не правы. Я уверен. Давайте обсудим это. Пишите мне в PM, поговорим.


<a href=https://global-smm.ru/freelikes>бесплатные лайки инстаграм</a>

Поздравляю, какие нужные слова…, отличная мысль


<a href=https://jubi-opt.com.ua/products/6-Ghenskie-Trusy-Optom>женские трусы оптом китай </a>

joycasinoofficial

I consider, that you are mistaken. I can prove it. Write to me in PM, we will talk.


<a href=https://joycasinoofficial.site/>https://joycasinoofficial.site/</a> | https://joycasinoofficial.site/

csbooster

Огромное число источников под Counter Strike 1.6 вынуждает обретать иные методы, для того чтобы держаться у топовых местах и склонять новичков геймеров, вполне надежным плюс оперативным к сих пор есть способ рекламы источника https://cs-booster.ru/. Заказывая продвиджение покупатель предоставляете ресурсе направленный множество юзеров, какие идут на вам исходя с первым положении по Searching ленте. Мы советует пользователям скорую также эффективную раскрутку вашего сервера за разумные деньги, какие покупатель сумеет восполнить сразу же у первый период вследствии прибывшим пользователям. Данный сайт правильной поднятие в топе CS 1.6 <a href=https://cs-booster.ru/>раскрутка эффективная кс 1.6 1 день</a> предлагает для Вас пару версий продвижения странички у обусловленно ото поставленных намерений. Именно здесь пользователи имеет возможность определить надобный с собранных комплексов: ВИП, БУС также "Будь Первым" - они скоропостижно помогают Cs-Booster.Ru полнять ресурсу и усилить часть абонентов на обозначенное час. Оформить подходящий вид повышения в очень низким расценкам возможно прямо по указанном месте, навести "Заказать".

continent-telecom22

И я с этим столкнулся.


купить sip номер украина <a href=https://continent-telecom.com/virtual-number-ukraine-kiev>https://continent-telecom.com/virtual-number-ukraine-kiev</a> https://continent-telecom.com/

european-yachts

Весьма полезная штука


<a href=https://european-yachts.com/rent-yacht-montenegro>аренда яхты черногория</a> https://european-yachts.com/

msk-stabilizator22

Вместо критики посоветуйте решение проблемы.


купить стабилизатор ресанта <a href=https://msk-stabilizator.ru/cat.php?cat=resanta>https://msk-stabilizator.ru/cat.php?cat=resanta</a> https://msk-stabilizator.ru/

Онлайн_Займы

Ищешь где занять денег, но все банки отказывают? Тогда быстро займы - то место, которое ты ищешь. Мы расскажем как быстро занять денег онлайн под низкие проценты, как не попасться на удочки мошейников и при этом сэкономить. Переходи на сайт, и учись занимать онлайн с выгодой!

Leave a comment

Your email address won't be published. Required fields are marked *

Loading...