Atualmente, construo todos os meus aplicativos com hudson usando xcodebuild seguido de um xcrun sem problemas
Recebi alguns arquivos IPA de pessoas diferentes que gostaria de assinar novamente com uma conta corporativa em vez da corporativa (para a loja de aplicativos ou, às vezes, com distribuição ad-hoc).
Meu problema é que, quando tento renunciar ao aplicativo, ele não é instalado no meu dispositivo (e deveria, pois é uma versão Enterprise). A mensagem de erro está no dispositivo (não no iTunes) e diz-me simplesmente que não foi possível instalar o aplicativo. Não há mais informações.
Encontrei algumas informações ( http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for- upload / )
E isso pode ser possível. O problema que estou enfrentando é que ele não parece incorporar o perfil de provisionamento móvel, como faço com minhas compilações normais (usando xcrun). Isso é possível de controlar com a ferramenta codesign, ou é possível assinar novamente com xcrun ?
Com o meu script de demissão eu atualmente
- descompacte app.ipa
- appname = $ (ls Payload)
- xcrun -sdk iphoneos PackageApplication -s "$ provisioning_profile" "$ project_dir / Payload / $ appname" -o "$ project_dir / app-resigned.ipa" --sign "$ provisioning_profile" --embed "$ mobileprovision"
Eu olhei no arquivo ipa resultante e parece ser muito semelhante ao aplicativo original. Quais arquivos realmente devem mudar aqui? Inicialmente, pensei que o _CodeSignature / CodeResources mudaria, mas o conteúdo parece exatamente o mesmo.
Ponteiros são muito apreciados.
/usr/bin/codesign -d --entitlements :entitlements.plist /Payload/appname.app
Então, durante o suplemento renunciar--entitlements entitlements.plist
As respostas a esta pergunta estão um pouco desatualizadas e faltam etapas potencialmente importantes, portanto, este é um guia atualizado para instalar um aplicativo de um desenvolvedor externo.
----- Como renunciar a um aplicativo iOS -----
Digamos que você receba um aplicativo (por exemplo, MyApp.ipa) de outro desenvolvedor e deseje poder instalá-lo e executá-lo em seus dispositivos (usando o ideviceinstaller , por exemplo).
Preparar novos ativos de assinatura
A primeira etapa é obter um perfil de provisionamento que inclua todos os dispositivos que você deseja instalar e executar. Verifique se o perfil contém um certificado que você instalou no seu Keychain Access (por exemplo, iPhone Developer: Some Body (XXXXXXXXXX)). Faça o download do perfil (MyProfile.mobileprovision) para poder substituir o perfil incorporado no aplicativo.
Em seguida, prepararemos um arquivo de direitos para incluir na assinatura. Abra seu terminal e execute o seguinte.
Isso criará um arquivo xml descrevendo seu perfil de provisionamento . Em seguida, queremos extrair os direitos em um arquivo.
Substituir o perfil de provisionamento e renunciar ao aplicativo
Se você estiver trabalhando com um arquivo .ipa , primeiro descompacte o aplicativo (se você tiver um .app , poderá pular esta etapa).
Seu diretório de trabalho agora conterá
Payload/
ePayload/MyApp.app/
. Em seguida, remova os arquivos antigos de assinatura de código.Substitua o perfil de provisionamento existente (por exemplo, built.mobileprovision) pelo seu.
Agora assine o aplicativo com o certificado incluído no seu perfil de fornecimento e os entitlements.plist que você criou anteriormente.
IMPORTANTE: você também deve renunciar a todas as estruturas incluídas no aplicativo . Você os encontrará em
Payload/MyApp.app/Frameworks
. Se o aplicativo estiver escrito em Swift ou se incluir estruturas adicionais, elas deverão ser renunciadas ou o aplicativo será instalado, mas não será executado.Agora você pode compactar novamente o aplicativo.
Feito
Agora você pode remover o
Payload
diretório, pois possui seu aplicativo original (MyApp.ipa) e sua versão renunciada (MyApp-resigned.ipa). Agora você pode instalar o MyApp-resigned.ipa em qualquer dispositivo incluído no seu perfil de provisionamento.fonte
Eu segui com sucesso essa resposta, mas como os direitos mudaram, simplesmente removi a
--entitlements "Payload/Application.app/Entitlements.plist"
parte da penúltima declaração e ela funcionou como um encanto.fonte
SecItemCopyMatching: missing entitlement
. Eu não tenho arquivo Entitlements.plist separado, de modo a preservar os direitos que eu usei @ comentário de LordT : primeiro criar um arquivo de direitos:echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>/usr/bin/codesign -d --entitlements - temp/Payload/$APP_NAME | sed -E -e '1d'" > temp/newEntitlements
, em seguida, usá-lo no momento da assinatura:--entitlements temp/newEntitlements
.Verificado com o Mac OS High Sierra e o Xcode 10
Você pode simplesmente implementar o mesmo usando o aplicativo iResign .
Dê o caminho de 1) .ipa
2) Novo perfil de provisão
3) Arquivo de direitos (opcional, adicione apenas se você tiver direitos)
4) ID do pacote
5) Certificado de Distribuição
Você pode ver o arquivo .ipa de saída salvo após a nova assinatura
Ferramenta simples e poderosa
fonte
Nenhuma dessas abordagens de demissão funcionava para mim, então tive que trabalhar em outra coisa.
No meu caso, eu tinha um IPA com um certificado expirado. Eu poderia ter reconstruído o aplicativo, mas como queríamos garantir a distribuição exata da mesma versão (apenas com um novo certificado), não queríamos reconstruí-lo.
Em vez das formas de renúncia mencionadas nas outras respostas, eu me virei para o método do Xcode de criar um IPA, que começa com um .xcarchive de uma compilação.
Dupliquei um .xcarchive existente e comecei a substituir o conteúdo. (Ignorei o arquivo .dSYM.)
Extrai o aplicativo antigo do arquivo IPA antigo (via descompactação; o aplicativo é a única coisa na pasta Payload)
Mudei este aplicativo para o novo .xcarchive,
Products/Applications
substituindo o aplicativo que estava lá.Eu editei
Info.plist
, editandoApplicationProperties/ApplicationPath
ApplicationProperties/CFBundleIdentifier
ApplicationProperties/CFBundleShortVersionString
ApplicationProperties/CFBundleVersion
Name
Mudei o .xcarchive para a pasta de arquivos do Xcode, normalmente
/Users/xxxx/Library/Developer/Xcode/Archives
.No Xcode, abri a janela do Organizer, peguei esse novo arquivo e fiz uma exportação regular (neste caso, Enterprise).
O resultado foi um bom IPA que funciona.
fonte
Eu acho que o mais fácil é usar o Fastlane:
fonte
Com a opção de demissão do Fastlane suspiro, você pode fazer isso com muita facilidade.
Você pode fazer o download do perfil usando o suspiro também, pouco antes do comando.
fonte
Obrigado, Erik, por postar isso. Isso funcionou para mim. Gostaria de adicionar uma nota sobre uma etapa extra que eu precisava. Em "Payload / Application.app /", havia um diretório chamado " CACertChains " que continha um arquivo chamado " cacert.pem ". Eu tive que remover o diretório e o .pem para concluir essas etapas. Obrigado novamente! -
fonte
Se você possui um aplicativo com extensões e / ou um aplicativo de monitoramento e possui vários perfis de provisionamento para cada aplicativo de extensão / monitoramento, use este script para assinar novamente o arquivo ipa.
Assinando novamente o script no Github
Aqui está um exemplo de como usar este script:
Você também pode incluir outros perfis de provisionamento de extensões, adicionando-o com outra opção -p.
Para mim - todos os perfis de provisionamento foram assinados pelo mesmo certificado / identidade de assinatura.
fonte
fastlane sigh resign YourApp.ipa --signing_identity "iPhone Distribution: YourCompanyOrDeveloperName" -p <path_to_provisioning_profile_for_app>.mobileprovision -p <path_to_provisioning_profile_for_watchkitextension>.mobileprovision
vez disso.