Distribuir remotamente um aplicativo iOS compilado no Xcode 7 sem a App Store, sub programa de desenvolvedor ou jailbreak?

10

Seguindo estas instruções (consulte também a documentação do desenvolvedor da Apple e a resposta da BoltClock ao aplicativo iOS de teste no dispositivo sem programa de desenvolvedor da Apple ou jailbreak ), consegui compilar um aplicativo iOS (neste caso , proveniência , um aplicativo emulador de console de videogame que não funciona atenda às diretrizes da Apple e nunca será permitido na App Store da Apple) no Xcode 7, assine-o com minha conta pessoal do iCloud, carregue-o no meu iPhone (conectando-o ao meu Mac por USB e selecionando meu iPhone no menu xcode -> Produto -> Destino) e permita que meu telefone o execute "confiando" em aplicativos com esta assinatura em Configurações -> Geral -> Perfil, que instala o certificado associado à minha conta do icloud no dispositivo.

Gostaria de replicar essas etapas com um download sem fio. Posso fazer com que o Xcode produza um executável que eu possa compartilhar com meu irmão, que tem um iPhone, mas não tem acesso a um Mac com o Xcode?

A Rede StackExchange conseguiu algo parecido com isso aparentemente para seu programa beta de aplicativo para iOS, usando a distribuição corporativa da Apple por meio do Mobile Device Management, conforme mencionado nesta pergunta . Há também o BuildStore ( http://builds.io/ ), que por US $ 10 / ano também habilita essa funcionalidade, aparentemente adicionando usuários a uma "equipe de desenvolvedores" associada a uma conta paga do Apple Developer Program (consulte Documentos de desenvolvimento da Apple ) . Com o Xcode 7, é possível fazer isso sem uma empresa ou mesmo uma conta de desenvolvedor paga regular?

update: Graças à ajuda do Stacksza, fiz alguns progressos, que resumirei aqui.

  1. O XCode criará um arquivo (Produto -> Arquivo), mas não permite exportar um arquivo para um arquivo .ipa para distribuição ad hoc sem precisar assinar a camada de conta ADP paga.
  2. Não tem problema, porém, porque a ferramenta Xcode linha de comando faz criar um executável .ipa, mesmo sem conta ADP pago. Use um comando como xcodebuild -exportArchive -archivePath Provenance-Release\ 11-20-15\,\ 22.24.xcarchive/ -exportOptionsPlist ~/manifest.plist -exportPath ~/Provenance(consulte a resposta de Khawar em Como criar ipa no xcode 6 sem a conta de desenvolvedor da Apple? )
  3. Mas este comando requer que você especifique um arquivo .plist de manifesto. A resposta de Razvan em Distribuição de arquivos IPA iOS Over The Air (OTA) para público? contém um manifest.plist de amostra, bem como instruções para o formato de hiperlink necessário para fornecer um link de download, que deve ser hospedado em uma página da Web SSL. Pode ser que o URL do SSL precise calcular o ID do pacote do aplicativo, não tenho certeza.
  4. Mas o procedimento acima só funciona se o aplicativo estiver provisionado para o dispositivo que o baixa e o dispositivo já instalou o certificado de desenvolvedor. Por exemplo, um dispositivo que foi conectado via USB ao meu Xcode agora pode baixar o aplicativo pelo ar, o que é ótimo. Isso é progresso. Mas para dispositivos limpos, recebo o erro Could not install embedded profile: 0xe8008012 (This provisioning profile cannot be installed on this device.)(conforme exibido no console do dispositivo, que pode ser visualizado em Xcode -> Janela -> Dispositivos ou no aplicativo Apple Configurator).
  5. Para que um aplicativo seja provisionado para um dispositivo, ele precisa conter o UDID do dispositivo no embedded.mobileprovisionarquivo, consulte Como incorporar um perfil de provisionamento em um aplicativo iOS , Como automatizar a verificação de um campo na provisão mobile.mobile de um ipa? , Como descobrir qual perfil foi usado para criar o arquivo * .ipa? , e Existe uma maneira de ver quais UDID estão incluídos em uma compilação? . Você não pode simplesmente editar este arquivo para adicionar o UDID, no entanto, porque a CODESIGNATURE do aplicativo não corresponde e o dispositivo relatará o erroFailed to verify code signature of /private/var/mobile/Library/Caches/com.apple.mobile.installd.staging/temp.7jBjpk‌​/extracted/Payload/Provenance.app : 0xe8008017 (A signed resource has been added, modified, or deleted.)}
  6. Ok, então precisamos renunciar ao aplicativo. O Xcode fornece uma ferramenta de linha de comando chamada codesignque pode fazer isso. As instruções estão em Como assinar novamente o arquivo ipa? e Assine novamente o IPA (iPhone) e renuncie um aplicativo para iPhone, insira o novo ID do pacote e envie ao Xcode Organizer para Upload e Como assinar novamente manualmente um IPA com um novo perfil de provisionamento . Eu tive que especificar meu certificado de desenvolvedor, cujo nome exato pode ser encontrado no Keychain Access, na guia Certificates, e se parece com "iPhone Developer: [email protected] (ABCDEFGHIJ)". Então o comando é como codesign -f -s "iPhone Developer: [email protected] (ABCDEFGHIJ)" Payload/Provenance.app. Os comandos de exemplo nas instruções acima incluem um sinalizador chamado--resource-rules, mas não encontrei esse arquivo no meu aplicativo compilado e removi esse sinalizador. Eu me pergunto o que faz e se é necessário. Edit: A excelente postagem no blog Inside Code Signing, de Thomas Kollbach, explica que o --resource-rulessinalizador costumava ser usado para indicar quais partes de um aplicativo devem ser assinadas, mas como o iOS8 está obsoleto e o aplicativo inteiro deve ser assinado.
  7. Agora que o aplicativo adicionou o UDID e está assinado, o download no dispositivo novo fornece os erros Could not install embedded profile: 0xe8008003 (This provisioning profile is malformede A valid provisioning profile for this executable was not found. Meu palpite é que o problema agora é que o dispositivo ainda não instalou o certificado de desenvolvedor. Ao fazer o carregamento via Xcode, antes que o aplicativo seja executado, você deve encontrar o certificado instalado em Configurações -> Geral -> Perfil, selecione seu certificado e toque em "confiar". No entanto, essa opção não aparece após o download do aplicativo ad hoc pelo ar, por isso não tenho certeza de como proceder. Eu acho que preciso de alguma maneira de instalar o certificado de desenvolvedor no dispositivo. De acordo com Instalando o perfil de provisionamento no iOS 8.0.2, era possível simplesmente enviar o certificado por e-mail para o dispositivo, mas isso não funciona mais no iOS 8. Não tentei confirmar. Como posso instalar meu certificado de desenvolvedor em um dispositivo iOS remotamente?
  8. Tentei exportar meu certificado de desenvolvedor do iPhone do Keychain Access e enviá-lo por e-mail para o dispositivo. O dispositivo conseguiu instalar o certificado, mas foi exibido com um aviso vermelho de que não estava assinado, enquanto que quando o certificado foi instalado via Xcode / USB não havia esse aviso. De acordo com o Rhythmic Fistman, é possível re-criptografar um arquivo embedded.mobileprovision? , o perfil deve ser assinado pela Apple para funcionar. Este pode ser o ponto de discórdia. A Apple só assinará seu certificado se você tiver uma conta ADP paga.
  9. Esta postagem no blog sobre provisionamento por Sean Heber foi muito esclarecedora sobre a teoria geral dos certificados de desenvolvedor e perfis de provisionamento (juntamente com os de Kollbach, ambos deveriam ser leitura obrigatória). Ele contém este parágrafo:

    A razão pela qual tudo isso funciona e é seguro é que a Apple gera os perfis de provisionamento no portal e os assina com suas próprias chaves privadas antes de entregá-los a você. A assinatura dos perfis de provisionamento é algo que apenas a Apple pode fazer. O arquivo baixado não pode, portanto, ser adulterado sem torná-lo inválido. Um perfil de provisionamento inválido não será aceito pelo iOS e, portanto, a Apple pode controlar exatamente o que pode e não pode ser provisionado por um desenvolvedor, simplesmente restringindo o acesso à assinatura do perfil de provisionamento para itens que o portal do desenvolvedor permite que você configure no primeiro local - mesmo que os perfis de provisionamento possam oferecer suporte a inúmeras outras opções incríveis que você não pode usar sem o jailbreak. É por isso que você precisa registrar dispositivos de teste no portal, adicione seus certificados ao portal etc. - apenas as coisas no portal (e, portanto, os números que podem ser controlados e limitados arbitrariamente pela Apple) podem ser incluídos em um perfil de provisionamento gerado e devidamente assinado. O portal é onde as políticas e limitações de provisionamento da Apple são realmente aplicadas.

Isso parece responder definitivamente à minha pergunta (posso executar o aplicativo sem uma conta ADP paga) com um "não". Embora este artigo seja anterior ao Xcode 7. Aparentemente, o Xcode 7 enviará o UDID de um dispositivo ao portal da Apple e receberá em resposta um perfil de provisionamento assinado pela Apple, contendo esse UDID. O Xcode 7 só faz isso quando o dispositivo é conectado via USB e reconhecido pelo Xcode, mas se pergunta se uma solicitação manual do Xcode à Apple poderia ser criada? Isso se aprofunda na engenharia reversa do material da Apple do que eu estou acostumado e provavelmente viola o ToS ou o que quer que seja, então acho que estou satisfeito com a resposta "não".

De acordo com a página about do BuildStore , eles gerenciam algo semelhante por email, portanto, é possível.

O Xcode “Build and Archive” da linha de comando é bastante antigo (por volta do xcode 3), mas sugere o uso em xcrunvez do xcodebuildque eu tenho usado.

zigurates
fonte
1
Por favor, considere dividir isso. A questão deve ser curta, simples e fácil de entender. Toda a resposta / processo de como você chegou à sua resposta e à postagem no blog deve estar na seção de respostas.
bmike

Respostas:

2

A resposta é quase SIM!

Consegui instalar novas compilações do mesmo aplicativo nos dispositivos via Fabric.io sem assinatura de desenvolvedor da Apple. (Eu acho que você também pode distribuí-los com o iTunes. Envie o ipa para o testador e ele poderá instalá-lo via iTunes.)

A única desvantagem é que você precisa conectar o dispositivo ao Xcode pelo menos uma vez . Em seguida, você pode instalar remotamente novas versões. (Não encontrei o caminho para fazê-lo manualmente, conhecendo o udid)

Quando você conecta o dispositivo "desconhecido" ao xcode 7, há um fix issuebotão Target general settings. Corrija o problema e o Xcode gerará um novo perfil de provisionamento com este dispositivo incluído. (você pode encontrá-lo em ~/Library/MobileDevice/Provisioning Profiles)

Você pode usar esse perfil de provisionamento para distribuir aplicativos via Fabric.io

  1. Inscrição no Fabric.io
  2. Setup Fabric para o seu projeto (há um guia passo a passo)
  3. Certifique-se de que o xcode use prov certo. perfil para assiná-lo. Automatictrabalhou para mim.
  4. Xcode> projeto> arquivo
  5. o auxiliar de malha detectará a compilação e você poderá distribuí-la.

Desculpe pessoal, que não são proficientes o suficiente com o Xcode, não tenho muito tempo para adicionar um guia menos propenso a erros, mas espero que essa resposta ajude alguém com idéias.

DICA: use este plugin do quicklook para ver o interior do ipas e prov. perfis!

DanSkeel
fonte
1
Sim, esta resposta é consistente com o que descobri nos meus testes. Ainda me pergunto se seria possível dar a volta que "conectar o dispositivo ao xcode pelo menos uma vez passo" por falsificação a mensagem que Xcode envia para os servidores da Apple com o novo UDID dispositivo
ziggurism
2

A partir de alguma versão do iOS 9.x lançada desde que minha resposta foi postada originalmente, isso não é mais uma possibilidade. A Apple agora restringe os downloads do OTA a contas não gratuitas, como mostra os erros nos logs do dispositivo após a instalação falhar.

Eu testei isso extensivamente, pois isso seria incrível para meus aplicativos também.

Posso distribuir meus aplicativos OTA sem uma associação ao programa Developer (custa dinheiro)?

Você pode criar e assinar um IPA e criar o arquivo de manifesto para ele, mas ele não será instalado no dispositivo. A razão para isso é que o Xcode precisa configurar o IPA para esse dispositivo (supostamente assinando-o corretamente com o UDID). Você pode até ver isso acontecer se tentar conectar um novo dispositivo ao Mac e executar seu aplicativo via Xcode. A resposta curta é não.

O que posso fazer para que isso funcione?

Você pode se inscrever no programa Developer com a Apple (custa dinheiro) e adicionar o UDID do dispositivo ao seu perfil, criar um IPA e um arquivo de manifesto, enviá-los para um servidor da Web e enviar a URL.

É realmente uma questão de segurança, pois a barreira dos preços é geralmente o que impede que aplicativos maliciosos sejam distribuídos pela Web. Sem mencionar a manutenção da maioria dos downloads de aplicativos na App Store.

Eu me inscrevi no programa de desenvolvedor? Como faço para distribuí-lo agora?

Você deve ter um servidor da web HTTPS (e um certificado SSL para o qual possa criar sua própria raiz). Você também deve ter adicionado o UDID ao seu perfil de desenvolvedor (não sei exatamente como fazer isso). Você deve usar o Xcode para criar o IPA (Produto> Arquivar> Exportar> Salvar para Implantação Ad-hoc> Entrar com Apple ID> Seguir as instruções) e você obterá um arquivo Plist e um IPA. Coloque os dois no servidor e altere os valores no arquivo Plist para corresponder aos URLs HTTPS no servidor. Em seguida, você usa um link especial para vincular ao manifesto Plist, e ele será exibido solicitando ao usuário que instale seu aplicativo. Se tudo der certo, o usuário terá seu aplicativo. Você também precisa codificar seu próprio método de atualização, se desejar.

Se esse é um aplicativo que você deseja distribuir nesse momento, pode fazer mais sentido colocá-lo na App Store ou, se for para testes beta, use o TestFlight. Se você possui uma conta de desenvolvedor, pode usar o TestFlight e pular todas essas coisas para testar o aplicativo. Tudo o que você precisa é do seu e-mail e para que eles instalem o aplicativo TestFlight na App Store. O TestFlight pode ser gerenciado no iTunes Connect.

AppleBetas
fonte
E depois de se inscrever no desenvolvedor, como você distribui o aplicativo?
Ziggurism
Atualizei minha postagem com as instruções.
AppleBetas
Obrigado, era isso que eu estava procurando. Sei que você disse que era necessário ter uma conta de desenvolvedor paga e provisionar UDIDs, mas eu gostaria de experimentar esse método sem antes. Vou relatar os resultados.
Ziggurism
Seguindo as instruções para criar um arquivo morto, os botões "Carregar na loja de aplicativos", "validar" e "exportar" ficaram acinzentados, com um link abaixo que dizia "A distribuição requer inscrição no Apple Developer Program" para uma página da web para se inscrever no ADP. Então, por um lado, é como você prometeu: uma assinatura de US $ 99 para o Apple Developer Program parece ser necessária, mesmo que você queira apenas fazer uma distribuição ad hoc over-the-air (OTA) do seu aplicativo. O XCode GUI não criará o IPA e o perfil de provisionamento.
Ziggurism
Por outro lado, em stackoverflow.com/questions/26928721/…, o usuário Khawar afirma que isso pode ser feito sem o sub ADP usando a xcodebuildlinha de comando que criará o arquivo .ipa, além de assinar e provisionar o aplicativo se você usar o -exportProvisioningProfilesinalizador (veja o comentário de Pankaj Rathor).
ziggurism
1

Basicamente, alguém tem que assinar o aplicativo. Você pode obter o arquivo IPA, mas ele não será executado em dispositivos arbitrários. Concentre-se nisso e você decidirá rapidamente se deseja suportar o incômodo de cada pessoa usando o Xcode ou se faz sentido pagar pela Apple para assinar seus aplicativos.

Se você está confiando na assinatura de não desenvolvedor do iOS 9 com qualquer ID Apple antigo, todos os testadores precisam entrar com seu ID Apple para executar o aplicativo.

Você pode pagar pela Apple para gerenciar as contas e assinar pagando por um ano de contas de desenvolvedor. Em seguida, você pode enviar um e-mail, exibir o aplicativo em qualquer servidor, usar o TestFlight ou outros métodos mais fáceis para você, além de entregar seu ID Apple aos testadores / usuários do aplicativo.

Você sempre pode enviar o código-fonte para o seu irmão se ele tiver o Xcode, mas você mencionou que era o ponto de não ter alguém com um Mac para instalar e assinar o aplicativo.

A quebra de cadeia é mais fácil do que forjar a cadeia de certificados da Apple, mas eu não recomendo isso.

bmike
fonte
Onde os testadores precisariam fazer login com meu ID da Apple para executar os aplicativos assinados que não são de desenvolvedor?
ziggurism
No Xcode, usar o Mac é o mais fácil. Eu tê-los enviar seu telefone para carregar o aplicativo se ele não pode chegar ao Xcode ...
bmike
Sim, a instalação do Xcode via USB funciona muito bem. Minha pergunta era sobre a possibilidade de distribuição / instalação remota. O StackExchange fez isso pelo aplicativo beta. Eu também quero fazer isso.
ziggurism
O @ziggurism SE pagou por um certificado da empresa. Você precisará de um pouco de papelada legal para fazer isso acontecer. Mais várias centenas de dólares anualmente. TestFlight é a opção mais barata e menos uma área cinzenta. O SE fez não é provável "by the book" de acordo com a licença para os certificados que eles usaram, mas eu não sou um advogado ...
bmike