MASTG-TECH-0092: Assinatura de arquivos IPA
Para instalar um arquivo IPA em um dispositivo não-jailbroken, ele precisa ter uma assinatura válida. Em um dispositivo com jailbreak, isso não é necessário após a instalação do AppSync Unified.
Primeiro, você precisa obter um perfil de provisionamento e certificado de desenvolvedor, conforme explicado em Como obter um Developer Provisioning Profile.
Aviso
Se você tem uma conta Apple normal, só poderá assinar o IPA com um Bundle identifier modificado (único). Se você tem uma conta de Desenvolvedor, pode assinar com o Bundle identifier original.
O processo de assinatura pode ser feito usando assinador de aplicativos iOS, fastlane, Sideloadly ou codesign.
Usando fastlane¶
Crie um diretório fastlane e crie um arquivo Fastfile conforme descrito na documentação de resigning. Coloque tanto o Fastfile quanto seu IPA no diretório fastlane.
Exemplo:
lane :resignipa do
resign(
ipa: "./filename.ipa",
signing_identity: "Apple Development: MAS@owasp.org (LVGBSLUQB4)",
provisioning_profile: "./embedded.mobileprovision",
)
end
Em seguida, execute o comando fastlane resignipa.
$ fastlane resignipa
[✔] 🚀
[15:21:51]: Get started using a Gemfile for fastlane https://docs.fastlane.tools/getting-started/ios/setup/#use-a-gemfile
[15:21:52]: Driving the lane 'resignipa' 🚀
[15:21:52]: --------------------
[15:21:52]: --- Step: resign ---
[15:21:52]: --------------------
...
[15:22:03]: Successfully signed /test.ipa!
[15:22:03]: Successfully re-signed .ipa 🔏.
+-----------------------------+
| fastlane summary |
+------+--------+-------------+
| Step | Action | Time (in s) |
+------+--------+-------------+
| 1 | resign | 11 |
+------+--------+-------------+
[15:22:03]: fastlane.tools finished successfully 🎉
Uma vez configurado, tudo o que você precisa fazer é alterar o caminho no Fastfile para o IPA que deseja reassinar e executar o comando novamente.
Mais informações podem ser encontradas na documentação oficial: "Codesign an existing ipa file with fastlane resign"
Aviso
Por padrão, o fastlane sempre usará o Bundle identifier do perfil de provisionamento fornecido, tanto para contas Apple normais quanto para contas de Desenvolvedor. Se você tem uma conta de Desenvolvedor, pode especificar o Bundle identifier desejado usando diretamente o script resign.sh incluído no Fastlane e especificando a propriedade --bundle-id:
$ /opt/homebrew/Cellar/fastlane/2.226.0/libexec/gems/fastlane-2.226.0/sigh/lib/assets/resign.sh /Users/MAS/uncrackable1.ipa <CERTIFICATE> -p /Users/MAS/embedded.mobileprovision /Users/MAS/signed.ipa -v --bundle-id "org.mas.myapp"
Specified provisioning profile: '/Users/MAS/embedded.mobileprovision'
Original file: '/Users/MAS/uncrackable1.ipa'
Certificate: '<CERTIFICATE>'
Specified bundle identifier: 'org.mas.myapp'
Output file name: '/Users/MAS/signed.ipa'
Current bundle identifier is: 'org.mas.testapp'
New bundle identifier will be: 'org.mas.myapp'
Validating the new provisioning profile: /Users/MAS/embedded.mobileprovision
Profile app identifier prefix is '6FZT6QZ6X3'
Profile team identifier is '6FZT6QZ6X3'
Updating the bundle identifier from 'org.mas.testapp' to 'org.mas.myapp'
Fixing nested app and extension references
Extracting entitlements from provisioning profile
Resigning application using certificate: '<CERTIFICATE>'
and entitlements from provisioning profile: /Users/MAS/embedded.mobileprovision
_floatsignTemp/Payload/UnCrackable Level 1.app: replacing existing signature
_floatsignTemp/Payload/UnCrackable Level 1.app: signed app bundle with Mach-O universal (armv7 arm64) [org.mas.myapp]
Repackaging as /Users/MAS/signed.ipa
Usando Sideloadly¶
O Sideloadly pode cuidar da obtenção de um certificado válido para seu aplicativo, mas não é possível simplesmente assinar um arquivo IPA existente no local. O Sideloadly assinará o arquivo IPA fornecido e o instalará diretamente no dispositivo conectado. Ao usar uma conta Apple normal, o Sideloadly modificará o nome original do pacote acrescentando seu identificador de equipe (por exemplo, sg.vp.UnCrackable1 se torna sg.vp.UnCrackable1.QH868V5764).