nenhuma string de autorização 'aps-environment' válida encontrada para o aplicativo

83

Estou tentando configurar meu aplicativo para suportar notificação push, mas continuo recebendo este erro: Falha ao obter token, erro: Erro Domain = NSCocoaErrorDomain Code = 3000 "nenhuma string de autorização 'aps-environment' válida encontrada para o aplicativo" UserInfo = 0x1f818fc0 { NSLocalizedDescription = nenhuma string de autorização 'aps-environment' válida encontrada para o aplicativo}

  • Eu habilitei meu aplicativo para oferecer suporte a notificações push (apenas para desenvolvimento neste momento).
  • Eu criei o perfil de provisionamento APÓS habilitar as notificações push.
  • Meu identificador de pacote é o mesmo que aparece no perfil.
  • No meu arquivo de perfil, há uma string: aps-environment
  • Tive a certeza de que, tanto no projeto quanto no destino, na seção "Identidade de assinatura do código", TODOS os valores foram selecionados para ser meu perfil de provisionamento.

Mais alguma ideia? Obrigado.

Bashan
fonte
Nenhuma visão sobre este? Parece algo que muitos encontrariam ...
bashan

Respostas:

64

No meu caso, o que está em meu perfil de provisionamento:

security cms -D -i ~/Downloads/spolskyDevelop.mobileprovision 
...
<key>application-identifier</key>
<string>P5GM95Q9VV.com.dca.spolsky</string>
<key>aps-environment</key>
<string>development</string>

Era diferente das coisas no aplicativo que foi realmente construído (você pode descobrir onde ele foi construído olhando a guia Logs do Xcode)

codesign -d --entitlements - '/Users/drew/Library/Developer/Xcode/DerivedData/spolsky-bdbtdfjeeywhqzccpmmceqvnhgtm/Build/Products/Debug-iphoneos/spolsky-ios.app'
<dict>
    <key>application-identifier</key>
    <string>Y2X6Z7Z2GR.com.dca.spolsky-ios</string>
    <key>get-task-allow</key>
    <true/>
    <key>keychain-access-groups</key>
    <array>
        <string>Y2X6Z7Z2GR.com.dca.spolsky-ios</string>
    </array>
</dict>

Isso era verdade , embora o texto de dica "Atualmente corresponde" em Identidade de assinatura de código estivesse indicando o perfil de provisionamento correto - estranho, não? Para tornar uma história estranha ainda mais estranha, o perfil de provisionamento correto estava sendo instalado no dispositivo quando eu executei, (Configurações-> Geral-> Perfis) me levando a acreditar que o perfil de provisionamento estava certo - mas estava voltando para um ID curinga quando o aplicativo foi realmente iniciado .

A pista era a diferença na saída desses dois comandos:

Y2X6Z7Z2GR .com.dca. spolsky-ios vs P5GM95Q9VV .com.dca. spolsky

Quando fiz a correspondência da parte em negrito, a parte em itálico mudou para corresponder automaticamente. Além disso, a saída de segurança e code-sign estavam de acordo, e não havia mais erro aps-entitlement.

Meu palpite aqui é que o XCode estava usando uma correspondência de estilo curinga no meu ID não curinga. ("spolsky" é, afinal, quase "spolsky-ios"), e isso explica a saída "Corresponde atualmente". Mas algo na cadeia de construção é mais estrito sobre isso, então ele volta para um ID curinga real durante a construção.

Desenhou
fonte
7
Eu experimentei um problema semelhante: as 'Configurações de compilação' do projeto eram diferentes das 'Configurações de compilação' do TARGET ... no meu caso, minhas configurações de destino estavam assumindo os perfis de provisionamento errados.
Rob
1
Suportes ao descobrir isso, encontrei o mesmo problema.
Codemonk
1
Um de meus colegas de trabalho teve esse problema de provisionamento. No entanto, só fui capaz de selecionar a chave de provisionamento não curinga depois de entrar nas configurações de perfil no Xcode e atualizar a lista de certificados / chaves de provisionamento.
cbh2000
1
Minhas configurações de destino para 'depurar' usavam iOS Developer / Automatic, o que fazia com que meu .app apresentasse a identidade de assinatura de código errada. Eu tive que definir explicitamente minhas configurações de projeto e destino para depuração e liberação para usar meu novo ID de assinatura de código, meu problema foi corrigido. Não se trata apenas do seu perfil de provisionamento, também é preciso verificar essas identidades de assinatura de código. Não poderia ter resolvido sem esses comandos de terminal incríveis!
self.name
6
Apenas para registro: para que as notificações push funcionem, é necessário usar um Perfil de Provisionamento específico , com o ID do pacote do aplicativo, e não um com o caractere * curinga.
mgarciaisaia
37

O problema ocorre porque o Perfil de Aprovisionamento atual não contém informações de APNS, pois o Perfil de Aprovisionamento é criado ANTES de criar o certificado de APNS.

Portanto, para resolver o problema, crie um novo Perfil de Provisionamento e selecione o Perfil de Provisionamento no Xcode para limpar o erro.

Raptor
fonte
Não funcionou para mim. Quaisquer outras dicas. por favor, olhe isto: stackoverflow.com/questions/25679750/…
Ajeet
29

Eu tive esse mesmo problema depois que as notificações push já estavam funcionando no meu dispositivo. Parece que o Xcode armazenou algo em cache incorretamente, então atualizá-lo corrigiu meu problema:

  1. Xcode -> Preferências -> Contas
  2. Ver os detalhes da sua conta de desenvolvedor
  3. Basta clicar em Atualizar para os Perfis de Provisão algumas vezes. Eu estava vendo essas mudanças a cada atualização. Continue atualizando até que eles parem de mudar.
Oren
fonte
Curiosamente, isso funcionou para mim! Eu atualizei até que ele parou de atualizar, então limpei minha pasta de compilação e reiniciei o XCode. Isso foi depois que verifiquei o ID do pacote no perfil de provisionamento e no aplicativo criado (onde correspondia em ambos, me deixando ainda mais perplexo).
Sean Michael Dorian
Não há mais o botão Atualizar (?)
Gerry
9

recebi este erro e não criei um novo perfil de provisionamento; criou um novo e teve que reiniciar o xCode, mas funciona agora!

Jasonpurdy
fonte
9

Esteja ciente de que o identificador do pacote deve corresponder ao perfil de provisionamento de maneira sensível a maiúsculas e minúsculas . Eu tinha algo como com.FirstLast.appname quando deveria ser com.firstlast.appname. Bem, isso me manteve ocupado por um bom tempo.

sudo
fonte
Eu tive o mesmo problema, isso resolveu para mim.
kuba
9

Corrigi esse problema habilitando o recurso de notificação por push.

Selecione Projeto> Alvo> Capacidades> Ativar notificações push

veja a imagem

Erro 404
fonte
3

Se esse problema aconteceu repentinamente após a atualização para o Xcode 8, você pode encontrar um aviso na tela de recursos que permitirá que você corrija isso automaticamente:

Selecione Projeto> Alvo> Capacidades> Ativar notificações push

Departamento B
fonte
Isso é o que me salvou de dores de cabeça. Obrigado!
jpaljasma
2

Produto-> Clean fez isso por mim. Espero que isso aconteça para outra pessoa.

Louis Cremen
fonte
eu faço as duas limpezas. A limpeza secundária via comando-opção-shift-k também é útil.
desenhou ..
2

Eu encontrei isso em um caso de uso possivelmente não frequente. Estou trabalhando com o Xcode 6 e o ​​iOS 8. Estava criando uma série de projetos de aplicativos totalmente novos e tentando reutilizar o mesmo ID de pacote, para não precisar passar por toda a configuração do portal novamente. Isso também era apenas para testes de sandbox.

Eu descobriria que, embora a configuração e o registro funcionassem bem para o primeiro aplicativo, se eu excluísse esse aplicativo do dispositivo, definisse o mesmo ID de pacote para o segundo aplicativo e tentasse registrar PNs com esse aplicativo, obteria esse erro.

Minha solução foi:

  1. Remova o perfil de provisionamento associado do dispositivo.
  2. Remova o perfil de provisionamento associado do Xcode.
  3. Fechar Xcode
  4. Clique duas vezes em meu .mobileprovisionarquivo baixado para instalá-lo de volta no Xcode
  5. Abra o projeto e implante-o.

Essa abordagem parece perder qualquer estado anterior e posso me registrar para PNs com o novo aplicativo / mesmo ID de pacote.

KevinH
fonte
2

Para quem obteve esse erro no ios 10, você pode tentar seguir as etapas:

1. Limpe seu projeto.
2.e marque Alvos -> Recursos -> Notificação push. Se estiver desativado, ative-o.

E o problema será resolvido. As etapas acima me ajudam a me livrar desse problema. Espero que seja útil para alguém.

bittu
fonte
0

Novo perfil de provisionamento funcionou para mim. Certifique-se de usar um perfil de desenvolvedor se estiver em desenvolvimento (não use Ad Hoc). Ficou bem depois disso, não faço ideia por que o antigo parou de funcionar direito.

user3344717
fonte