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.
- 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.
- 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? ) - 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.
- 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). - Para que um aplicativo seja provisionado para um dispositivo, ele precisa conter o UDID do dispositivo no
embedded.mobileprovision
arquivo, 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.)}
- Ok, então precisamos renunciar ao aplicativo. O Xcode fornece uma ferramenta de linha de comando chamada
codesign
que 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 é comocodesign -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-rules
sinalizador 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. - 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 malformed
eA 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? - 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.
- 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 xcrun
vez do xcodebuild
que eu tenho usado.
Respostas:
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 issue
botãoTarget 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
Automatic
trabalhou para mim.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!
fonte
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.
fonte
xcodebuild
linha de comando que criará o arquivo .ipa, além de assinar e provisionar o aplicativo se você usar o-exportProvisioningProfile
sinalizador (veja o comentário de Pankaj Rathor).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.
fonte