Funcionalidades de versão do jogo Unreal Engine 4 para iOS

Saudações.

Neste artigo, listarei as dificuldades e os momentos não óbvios que encontrei pessoalmente ao lançar o jogo no iOS, bem como suas soluções.

O jogo começou a ser criado no Unreal Engine 4.18, agora a última versão da loja usa o UE 4.24. No início, o jogo foi lançado no Android, depois que comecei a lançá-lo no iOS.

imagem

Quem pode estar interessado no artigo:

  • Desenvolvedores de jogos UE 4 que decidem colocar seu trabalho na App Store.
  • Desenvolvedores de aplicativos iOS (algumas partes do artigo falam apenas sobre o ecossistema da Apple sem estar vinculado ao UE 4).


Aviso Legal:
  • .
  • — , , .
  • - .
  • - , .


Spoiler
51 , iOS, «The status of your app, Sokopango, is now „Ready for Sale“.». 40 .


1. Primeiros passos na App Store Connect


1.1 Verificação do programa Apple ID


Depois de pagar pela associação (registrar / ingressar no Apple Developer Program) com um cartão virtual (este é o local onde, ao pagar pela Internet, em vez do meu nome, preciso indicar “DIGITAL CARD” - este é o meu banco, você pode ter um titular de cartão diferente), eu foi necessário confirmar a identidade, porque As informações da minha conta não correspondem aos dados do titular do cartão.
Aqui está uma parte do texto da carta da pessoa que verifica meu registro:
...
Para prosseguir com a inscrição no Apple Developer Program, precisamos verificar a identidade do desenvolvedor que usará a conta.

Faça o upload de uma cópia da identificação com foto do desenvolvedor. O ID deve atender aos requisitos de verificação para sua região:

  • Passaporte emitido pelo governo
  • Válido (não expirado)
  • Inclui o nome em caracteres romanos *

* Se o ID não incluir um nome romanizado, você também deverá enviar uma tradução em inglês certificada pelo advogado.
...

Tive sorte de ter um passaporte válido. Fiz uma varredura e enviei em resposta à carta. Naquele dia, entrei para o Apple Developer Program.

Portanto, se você pagar uma taxa de um cartão cujas informações do titular sejam diferentes do seu nome, esteja preparado para confirmar a identidade do desenvolvedor.

1.2 Confirmação de pagamento


Se o aplicativo for lucrativo (é pago ou há compras internas), você deve especificar os dados de pagamento em seu perfil.

Nós vamos:

  • App Store Connect .
  • Acordos, impostos e serviços bancários .
  • Vamos para os "aplicativos pagos".
  • Nós preenchemos os dados necessários. Essas serão as informações de contato, o formulário fiscal e a indicação da conta bancária da moeda. No formulário de imposto no “Tipo de beneficiário efetivo”, indiquei “Proprietário individual / único”, portanto, sempre indiquei meus dados pessoais (nome e número de telefone), também indiquei a conta em moeda estrangeira que abri na conta pessoal do banco em um minuto.
  • Enviamos para verificação, aguardamos confirmação e o status estimado de "Ativo".

Você também pode ler sobre isso no fluxo de trabalho para configurar compras no aplicativo .

1.3 Vídeo para visualizar o aplicativo


Nas configurações da página do aplicativo, além das capturas de tela, você pode baixar mais vídeos. Um link para um vídeo do YouTube é simplesmente inserido no Google Play. Na App Store, citação diferente:
Para baixar o vídeo para visualizar um aplicativo, você deve usar o Safari e OS X versão 10.10 e posterior.
Como se viu, as imagens podem ser baixadas de qualquer navegador em qualquer sistema operacional e o vídeo apenas no Safari, disponível apenas no MacOS.

Eu já tinha um vídeo pronto, mas ele não se encaixava no tamanho das laterais.

Breve especificação do vídeo (textos de erro na App Store Connect quando o vídeo não foi carregado):
  • Tela de 6,5 polegadas do iPhone - "As dimensões de visualização do aplicativo devem ser: 1920x886, 886x1920".
  • iPhone 5,5‑ — «App preview dimensions should be: 1920x1080, 1080x1920.».
  • iPad Pro (3- ) 12,9- — «App preview dimensions should be: 1600x1200, 1200x1600.».
  • iPad Pro (2- ) 12,9‑ — «App preview dimensions should be: 1200x900, 900x1200, 1600x1200, 1200x1600.».
Aqui você pode ver as especificações para a visualização de vídeo do aplicativo.

A especificação lista muito mais permissões para diferentes dispositivos. Para minha página, havia 4 vídeos com permissões da lista acima.

Não queria fazer um novo vídeo, tinha que editar o existente. Para alterar a resolução, encontrei na Internet o primeiro site em que mudei o tamanho do vídeo. A resolução foi alterada adicionando barras pretas à imagem. Para mim foi aceitável.

Além disso, meu vídeo durou mais de 30 segundos (este é o máximo para a visualização), então tive que cortá-lo um pouco.

Também o tornou o primeiro editor on-line que se deparou.

1.4 Outros


  • Surpreso que não haja categoria de jogos Arcade.
  • Você não pode definir um preço arbitrário nas compras, ao contrário do Google Play.

2. Montagem do projeto


2.1 Configuração do projeto


Toda a informação está na documentação . Olhei separadamente nas configurações (o " Construir " e " config " pastas , e os " ProjectName.Target.cs ", " ProjectName.Build.cs " arquivos ) nas ActionRPG e UnrealMatch3 projectos modelo - Eu tomei um monte de lá.

Certifique-se de ter pelo menos 1 certificado, perfil e identificador (App ID / Bundle ID) para montar e colocar o aplicativo na App Store.

Eu tinha / tenho:

  • 2 certificados - para a loja (digite "iOS Distribution" - o conjunto com este certificado será carregado para o App Store Connect) e para teste (tipo "iOS Development" - quando o aplicativo for enviado diretamente para o iPhone via USB).
  • 1 identificador.
  • 2 ( ) — . UDID iTunes.
  • 2 — ( , ).

2.2 MacOS


Graças à política da Apple, você precisa do MacOS para criar um projeto para iOS. Eu tenho o Windows, a compilação cruzada, como na construção no Linux, não pode ser feita.

Houve tentativas inúteis de instalar / executar uma imagem virtual do MacOS no meu AMD Phenom.
Eu tive que parar em uma máquina virtual de aluguel. Eu procurei e encontrei este serviço .

O registro e o pagamento são combinados, ou seja, você não pode simplesmente se registrar, você tem que pagar imediatamente (vi isso pela primeira vez). Comprei a tarifa macOS Mojave Cloud Basic por US $ 34,99 por mês. Imediatamente após o registro / pagamento, recebi uma carta com instruções e acesso.

Para acessar o servidor remoto, você precisará instalar o NoMachine Enterprise Client.
Entrei, atualizei o sistema operacional (não era a versão mais recente) e instalei o Xcode.

2.3 Compilação remota


VPS alugado, configurar o projeto, Xcode set - é hora de construir o projeto.

Mas primeiro você precisa configurar a compilação remota, leia a documentação .

Você também precisa desativar temporariamente o cliente SSH existente; caso contrário, haverá um erro relacionado ao rsync durante a compilação remota (não lembro o texto do erro).

Eu tenho o Windows 10, acabei de renomear a pasta " C: \ Windows \ System32 \ OpenSSH ".
Depois disso, no terminal, você pode executar o comando " where ssh.exe " para verificar se o sistema operacional não possui clientes SSH disponíveis. Minha resposta é "INFORMAÇÃO: não consigo encontrar os arquivos de acordo com os modelos fornecidos". Postagem

ajudada . No meu VPS, o SSH não precisava ser configurado - tudo funcionava imediatamente.



Não me lembro por que o salvei para mim , um artigo sobre como configurar uma compilação remota de projeto - de repente, é útil.

2.4 Um pouco sobre a montagem do projeto


Minha montagem demora em média de 20 a 50 minutos. 20 minutos quando o conteúdo não foi alterado, mas conseguiu consertar algo nas configurações.

Mas se houve uma atualização no mecanismo ou algo mudou seriamente no conteúdo, o assembly pode aumentar. Aumentou em média até 50 minutos.

Ao compilar remotamente no VPS, o código-fonte do mecanismo, o projeto, os arquivos temporários etc. são copiados. Tudo isso está em " [Home] / UE4 / ".

Dependendo das configurações do projeto, o arquivo IPA resultante pode ter um tamanho diferente.
O tamanho do arquivo recebido é afetado apenas pela opção “Build Configuration” (Configurações do projeto - Projeto - Embalagem) - Desenvolvimento ou Remessa.

O sinalizador “Para distribuição”, assim como o certificado e o perfil selecionados, não afetam o tamanho.

A única coisa com o sinalizador "Para distribuição" definido é o certificado e o perfil de distribuição, que devem ser selecionados, caso contrário, o projeto não será montado.

Além disso, quando o sinalizador "Para distribuição" é definido, o prefixo "Distro_" é adicionado ao arquivo e, durante a montagem de Remessa, o sufixo "-IOS-Shipping" é adicionado.

Por exemplo, as dimensões de minhas montagens:

  • Desenvolvimento-compilação - 186 Mb.
  • Montagem de expedição - 491 Mb.

Ambos os arquivos podem ser carregados no telefone via USB para teste.

Quanto ao arquivo grande obtido durante a montagem de Remessa, pelo que entendi, ele contém recursos para diferentes dispositivos.

Aqui estão as informações exibidas neste arquivo na App Store Connect:

imagem

2.5 Erros e soluções de montagem


2.5.1 Problema com perfis


Erro:
Provisão não encontrada. É necessária uma provisão para implantar seu aplicativo no dispositivo.
Chave de assinatura não encontrada. O aplicativo não pôde ser assinado digitalmente, porque a chave de assinatura não está configurada.
...
Solução: exclua perfis do diretório " C: \ Usuários \ [Nome do usuário] \ AppData \ Local \ Apple Computer \ MobileDevice \ Provisioning Profiles " e importe-os novamente para o projeto.

Os erros podem ter ocorrido devido ao fato de eu ter importado perfis e certificados nas configurações do editor e através do IPhonePackager.

Como resultado, havia vários, embora devessem ter 2 unidades.

2.5.2 Problema com o Xcode


Erro:
SDK MacOSX.sdk inválido, não encontrado em /Library/Developer/CommandLineTools/Platforms/MacOSX.platform/Developer/SDKs
SDK iPhoneOS.sdk inválido, não encontrado em / Library / Developer / CommandLineTools / Platforms / iPhoneOSplpl

Solução: no terminal, execute o comando " sudo xcode-select -r ".

2.5.3 Erros diversos relacionados ao rsync


Erros:
  • alguns arquivos / atributos não foram transferidos (consulte os erros anteriores) (código 23) em /home/lapo/packaging/rsync-3.0.4-1/src/rsync-3.0.4/main.c
  • Erro rsync: erro no código IPC (código 14)
  • de outros
Solução: reinicie a montagem. Às vezes, tenho que reiniciá-lo 2-3 vezes para iniciar o projeto. Além disso, a montagem pode ser interrompida no início e no final.

2.5.4 Falha na construção do desenvolvimento


Erro:
Provisioning profile «Development» doesn't match the entitlements file's value for the get-task-allow entitlement
Code signing is required for product type 'Application' in SDK 'iOS 12.2'

Solução: este post ajudou .
Na lista de identificadores, fui à direita, coloque a bandeira no iCloud, salve-a.
Havia uma mensagem de que os perfis se tornariam inválidos - e isso aconteceu.
Uma tentativa de construir (para verificação) é um erro. Deveria ser assim.
Mais uma vez fui ao meu identificador, agora removi a bandeira no iCloud e a salvei.
A assembléia foi bem sucedida.

Então tive que excluir perfis inválidos do projeto e criar novos. Ou você pode tentar fazer login no perfil no site, salvá-lo localmente e recarregá-lo no projeto.

2.5.5 Problemas de certificado


Erro:
A chave não pode ser usada no estado especificado

Eu apaguei os certificados das configurações do projeto, tentei adicioná-los novamente, ao adicioná-lo exigia uma senha digitada. Novamente a montagem com um erro, não me lembro qual.

Solução: remoção de certificados (do repositório de certificados, consulte a seção 2.6.a ) e perfis (do catálogo, consulte a seção 2.5.1 ), re-geração (se necessário), importação para o projeto.

O que fiz - em vez de importar certificados e perfis existentes, eu regenerei tudo e o adicionei ao projeto. Ao adicionar certificados, uma senha não era mais necessária, mas era necessário especificar o arquivo " * KeyPair.key ".
Depois disso, o projeto foi montado com sucesso.

2.6 Um pouco sobre certificados


  1. . IE, , . " MMC".
  2. 2 , 2-3 , «Maximum number of certificates generated». , , .

3


3.1


Para testar no telefone ao instalar o aplicativo via USB, você precisa usar o certificado de desenvolvimento e o perfil de desenvolvimento com o UDID do dispositivo especificado.
Consequentemente, o projeto deve ser montado com este certificado e perfil. Como escrevi acima, não importa qual opção está selecionada em "Configuração da compilação" - Desenvolvimento ou remessa, mas o sinalizador "Para distribuição" deve estar desmarcado.

3.2 IPhonePackager


O aplicativo é instalado através do programa IPhonePackager (caminho " [Caminho do mecanismo] \ Mecanismo \ Binários \ DotNET \ IOS \ IPhonePackager.exe ").
Na inicialização, uma caixa de diálogo para selecionar um projeto será aberta, ela deverá ser fechada. No programa que é aberto, vá para a guia Ferramentas avançadas - clique no botão Instalar IPA no hardware ... - selecione um arquivo ipa - aguarde uma instalação bem-sucedida.
Minha instalação no telefone leva de 20 a 80 segundos (dependendo do tamanho do arquivo e da fase da lua).

Periodicamente, não conseguia instalar o aplicativo através do IPhonePackager (era real antes da transição para o UE 4.24).

Erro (antes do UE 4.24): "Instalação \ Atualização de" FileName.ipa "falhou com erro de extração de pacote com falha em ..."

A peculiaridade do erro é que o envio do arquivo trava (é enviado em partes) ou é rapidamente copiado para o telefone (por exemplo, meio gigabyte por segundo).

Solução (nem sempre funcionava): reconecte o cabo ao telefone ou cole outro cabo ou reinicie o telefone. Mas, às vezes, nada disso ajudou (embora o iTunes tenha visto o telefone), então tive que adiar o teste.

3.3 TestFlight


Você também pode testar o aplicativo através do TestFlight. Teste fechado, por convite.

Na App Store Connect em TestFlight:

  • na subseção "App Store Connect Users", adicione-se.
  • na subseção "Testadores e grupos", adicione um grupo de testadores e adicione o email dos usuários que testarão o aplicativo. Eles receberão cartas de convite e um código que permitirá que eles se conectem ao programa de teste - para instalar o aplicativo em teste.

O grupo de testadores criado possui 2 seções: Testadores e montagens :
  • nos " testadores " estão os endereços para correspondência dos usuários que serão conectados ao teste, bem como um link para o aplicativo pelo qual esses usuários podem instalar o aplicativo.
  • em " montagens " existem montagens disponíveis para teste - aquelas que serão especificadas manualmente.

Você também precisará instalar o aplicativo TestFlight no seu telefone .

O desenvolvedor, administrador ou titular da conta não precisará digitar um código. A versão mais recente do aplicativo estará disponível quase imediatamente após o download no App Store Connect.

Mas todos os outros devem ser convidados (um código de ativação será enviado) e a versão que será indicada no grupo de testadores estará disponível para eles.

4 Faça o download na App Store Connect


Se o UE versão 4.24 estiver instalado (é necessário o Xcode 11) e superior, o Transporter precisará baixar o aplicativo para o App Store Connect .

Se a UE versão 4.23 estiver instalada (é necessário o Xcode 10) e abaixo, o Application Loader é usado:
imagem

No Transporter, as credenciais de ID da Apple são usadas para efetuar login, e no Application Loader apenas o logon é necessário e a senha terá que ser gerada, você pode ler sobre isso em página oficial Usando senhas específicas do aplicativo .

Como tenho o Windows, preciso transferir arquivos ipa para o VPS. Estou usando o serviço de envio do Firefox . É conveniente para mim porque você não precisa fazer login - abriu um site, enviou um arquivo, recebeu um link, fez o download de um arquivo em uma máquina virtual.

5 compras no jogo


5.1 Configurações na App Store Connect


Antes de enviar o aplicativo para verificação, criei imediatamente compras no jogo. Como se viu, eles são verificados / aprovados junto com o aplicativo.
Para compras aprovadas, é recomendável anexar uma captura de tela da janela de
compras (para cada compra), onde o botão para fazer uma compra estará visível. Eu tinha uma captura de tela para todas as compras. A captura de tela foi tirada do editor (não do jogo) e corrigida.

Porque a captura de tela deve ter um determinado tamanho (640x920 pixels), tive que pressionar partes da imagem umas nas outras. Assim, a aparência da janela de compras na captura de tela e no jogo é diferente.

imagem

Os botões para compras devem estar visíveis, mesmo que nada aconteça quando você clica neles.

No início, ocultei os botões de compra, mostrei-os apenas depois de receber informações sobre eles (preço, nome, moeda etc.) - não é necessário fazer isso. Por esse motivo, meu aplicativo e minhas compras não foram aprovados na verificação.

5.2 Opção "bUseStoreV2" no arquivo de configuração e método "RestoreInAppPurchase"


Por padrão, a opção " bUseStoreV2 = true " está ativada para o projeto , consulte " [EngineFolder] /Config/IOS/IOSEngine.ini ". As compras no jogo não funcionaram com ela. E esse problema não era para mim sozinho, com base no número de postagens no fórum e no AnswerHub.

Solução: registrei a linha " bUseStoreV2 = false " no arquivo " [UnrealProject] /Config/IOS/IOSEngine.ini ". Se não houver arquivo, nós o criamos - examinamos exemplos de projetos ou pesquisamos na Internet.

Obviamente, em cada compra, você precisará digitar seu nome de usuário / senha do ID Apple, mas para mim é melhor que nada, e não houve tempo para entender.

A recuperação de dados de compra ainda não funcionou para mim (método " RestoreInAppPurchase") e, o mais importante, os preços das compras não foram exibidos (o" método ReadInAppPurchaseInformation ), embora tudo tenha funcionado bem no Android. Depois de algum tempo, removi o uso de " RestoreInAppPurchase " (eu tinha um anúncio que podia ser desativado, mas removi o anúncio e, consequentemente, essa compra também, e não havia necessidade de restaurar os dados das compras compradas) e, milagrosamente, depois disso carregando preços no jogo.

6 Revisão / Verificação


Como foi a primeira vez comigo.
15.06 — 1- , 14 . . , ( ). , , .

18.06 — 2- , 2- . , , . , , , .

21.06 — 3- . 9 , , .

30.06 — 4- , 9 . , 2.3.1 ( - ). , — . ( . 5.1), . . — , ( ). , . — , . , -, (. . 5.1). ( , , , ). , .

, , — , , . . , , , .

17.07 — 5- , 7 . , 2.3.1. . , , . . , , .

26.07 — 6- , 18 , 18 .

Conclusões (subjetivamente):

  • no Google Play, foi fácil verificar a aprovação do aplicativo na loja, aqui todos olharão sob uma lupa. Talvez haja bots, pessoas aqui. O que é melhor? Eu não sei.
  • as respostas com base nos resultados da verificação, na maioria das vezes, não contêm informações sobre o que precisa ser corrigido.
  • momentos não óbvios - as compras foram rejeitadas e só descobri que quando decidi ir para a página com as configurações deles, não havia mensagens.
  • Para acelerar o lançamento da verificação, escreva-a em todas as instâncias da Apple - escreva mensagens no centro de soluções, recorra (do centro de soluções), faça perguntas à equipe de verificação.

7 Resumo do artigo


Minha lista de verificação, que compilei para mim (um análogo aproximado da página oficial ), para liberar o aplicativo no iOS:

  1. registre-se e pague pela participação no programa do desenvolvedor .
  2. Se você possui Windows, pode usar o VPS com o macOS.
  3. ao compilar remotamente no macOS, você só precisa instalar o Xcode, o Unreal Launcher / Editor / etc. não há necessidade de instalar.
  4. .
  5. — 2 . — development distribution/shipping — .
  6. .
  7. .
  8. SSH MacOS . , , PyTTY.
  9. montagem do projeto - artigo . Atenção: ao montar com o sinalizador “Para Distribuição”, é necessário selecionar o perfil / certificado de distribuição, caso contrário, selecione o perfil / certificado de desenvolvimento. Selecionado nas configurações do projeto ou na seção " Config / DefaultEngine.ini " " [/Script/IOSRuntimeSettings.IOSRuntimeSettings] ", MobileProvision / SigningCertificate - lines.
  10. teste de dispositivo - artigo .

8 Conclusão


Tudo isso aconteceu comigo no verão de 2019. Eu poderia esquecer algo e não descrever dessa maneira, alguns momentos podem se tornar irrelevantes.

Eu ficaria feliz se essa informação ajudar alguém.

All Articles