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: username@mac.com (ABCDEFGHIJ)". Então o comando é comocodesign -f -s "iPhone Developer: username@mac.com (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.