Come correggere "nessuna stringa di diritto 'aps-environment' valida trovata per l'applicazione" in Xcode 4.3?


153

Ho provato moltissimo a creare una semplice e semplice app iOS in grado di ricevere notifiche push. La mia unica ragione per farlo è stabilire una procedura che alcuni altri membri del team possano utilizzare e non siano stati in grado di trovare una versione aggiornata e funzionante di tali istruzioni altrove sul Web. Il nostro negozio è abbastanza nuovo per gli sviluppatori iOS, personalmente sono completamente inesperto con gli sviluppatori iOS e Xcode. Mi sono imbattuto in decine di tutorial, articoli e post su problemi di Apple e altrove e mi sento come se potessi essere quasi lì ...

Qui è dove devo farlo (nota che sto usando Xcode 4.3 e provando inizialmente a distribuire solo su iOS 5.1, e mi accorgo che alcune cose potrebbero essere cambiate di recente rispetto alle versioni precedenti di Xcode, ma ancora una volta sono nuovo a tutti questo - e trovandolo completamente confuso e contorto):

1) Ho un profilo di provisioning sul mio iPhone con Push abilitato

2) Nel mio progetto di test Xcode ho selezionato quel profilo di provisioning come identità di firma (in Impostazioni build> Firma codice)

inserisci qui la descrizione dell'immagine

3) Ho il mio identificatore di bundle in Riepilogo e Informazioni> Proprietà target iOS personalizzate impostato correttamente * (Penso ??)

4) Ho registerForRemoteNotificationTypes richiamato nel didFinishLaunchingWithOptions del mio delegato

5) Ho didRegisterForRemoteNotificationsWithDeviceToken e didFailToRegisterForRemoteNotificationsWithError nel mio delegato, impostato per registrare rispettivamente il token o l'errore del dispositivo

6) Ho Abilitato i diritti controllato in Riepilogo.

7) Proprio sotto che il File Entitlements selezionato è Tinker6 (il nome del mio progetto di test), che è stato generato automaticamente quando ho selezionato Enable Entitlements

8) Nel file Tinker6.entitlements ho il seguente (che ho raccolto è corretto in base a diversi post in tutto il Web, ma che non riesco a trovare nulla di definitivo dalla stessa Apple su):

inserisci qui la descrizione dell'immagine

aggiornato

9) Inoltre, ho provato tutto senza un file di diritti e ho ottenuto sostanzialmente lo stesso risultato.

10) I contenuti del mio file mobileprovision includono correttamente i diritti (ho mescolato il numero e il dominio ma strutturalmente lo stesso):

<key>application-identifier</key>
<string>12355456A7.com.whatever.tinker</string>
<key>aps-environment</key>
<string>development</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
    <string>12355456A7.*</string>
</array>

/ fine aggiornamento

Quando provo a eseguirlo sul mio dispositivo, ottengo il seguente errore nell'output Xcode:

2012-06-11 12:45:23.762 Tinker6[13332:707] Failed to get token, error: 
Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' 
entitlement string found for application" UserInfo=0x24a3b0 
{NSLocalizedDescription=no valid 'aps-environment' entitlement string 
found for application}

Ho provato a impostare get-task-allow su NO, aps-environment alla produzione, tutte e quattro le possibili combinazioni, stessa cosa.

Come posso superare questo? Dov'è la documentazione definitiva su questo?

- segue un ulteriore background -

* Per quanto riguarda l'ID bundle, non sono ancora chiaro su come debba essere impostato in relazione agli ID app e ID profilo nel profilo di provisioning. Nel portale di provisioning sotto ID app ho questo (di nuovo, ho decodificato il numero e il dominio):

inserisci qui la descrizione dell'immagine

E il set di due bundle id è impostato Ho questo:

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Non sono affatto sicuro che siano corretti o se uno o entrambi debbano essere impostati su 12355456A7.com.whatever.tinker, anche se ho provato quelli precedenti nel processo senza successo ...

Nota Mi rendo conto che ci sono molti post con titoli simili, tuttavia sembrano tutti non aggiornati in base ai nomi dei file e così via, e il fatto che nessuna delle soluzioni sembri essere utile. Spero che il maggior livello di dettaglio che ho fornito garantisca una risposta di qualità. Probabilmente assegnerò una ricompensa il più presto possibile e se darai una risposta di alta qualità che porta a una soluzione, ti assegnerò la ricompensa e promuoverò la tua risposta tramite Twitter e il mio blog. Soprattutto se pubblichi un post davvero buono "ecco gli esatti 500 passi necessari per far funzionare una semplice app di notifica push che includa il provisioning e quant'altro" sul tuo blog o altro.

Risposte:


94

Se hai creato il tuo profilo di provisioning prima di configurare il app IDpush per, prova a rigenerare il profilo di provisioning.

Portale di provisioning iOS -> Provisioning -> Il tuo certificato -> EDIT -> Apporta una modifica -> Scarica nuovo provisioning

Ha funzionato per me. Ora sono in grado di utilizzare push.


puoi essere più esplicito riguardo a cosa comporta esattamente "rigenerare il profilo di provisioning"? È un passaggio in XCode, nel portale di provisioning, dove? Grazie!
jwl

2
Nel portale Aggiungi o rimuovi semplicemente un dispositivo e il tuo provisioning verrà generato. Successivamente, fai doppio clic e installa nel tuo portachiavi.
elp,

scusa se sono denso, ma aggiungilo / rimuovilo in Dispositivi? O da qualche parte sotto l'attuale profilo di provisioning in questione, e se sì esattamente dove?
jwl,

L'aggiunta o la rimozione di dispositivi è un trucco per rigenerare il provisioning. Devi rigenerarne uno per utilizzare la notifica push, perché è collegato all'ID app e al certificato push ..
elp

69

Prima di tutto, non è necessario il file entitlements a meno che non si aggiungano coppie chiave / valore personalizzate che non esistono nel profilo di provisioning. Quando viene creata l'app, tutte le autorizzazioni dal profilo di provisioning verranno copiate nell'app.

Dato che viene ancora visualizzato un messaggio di errore relativo ai diritti mancanti, posso solo supporre che le opzioni di firma del codice non siano corrette nelle impostazioni di compilazione.

È necessario assicurarsi che sia selezionato il profilo corretto per la configurazione "Debug" e, per sicurezza, di aver selezionato il profilo corretto sia per "Debug" sia per il nodo figlio etichettato "Any iOS SDK":

inserisci qui la descrizione dell'immagine

Sebbene questa schermata mostri il profilo "Sviluppatore automatico" selezionato, seleziona il profilo di provisioning esatto che desideri dal menu a discesa, solo a scopo di test. È possibile che Xcode scelga automaticamente un profilo diverso da quello desiderato.

Assicurati anche di fare una build pulita, eliminare completamente l'app dal tuo dispositivo, ecc. Questo è solo per assicurarti di non avere qualche lanugine vecchia in giro.


Per # 2 nel mio post, penso che sia impostato correttamente, anche se ho aggiunto uno screenshot per chiarire. Ho anche provato a rimuovere completamente l'app e a lasciarla spenta per 2 giorni per una raccomandazione che ho visto da qualche parte che ci vuole un giorno prima che alcune informazioni vengano ripristinate (sì, lo sto afferrando alla cannuccia !?). Ma quando dici "Devi assicurarti che sia selezionato il profilo corretto per la configurazione" Debug "" cosa intendi esattamente - dove lo seleziono?
jwl

Se fai clic sulla parte "iPhone Developer" o su qualsiasi valore impostato come valore corrente, vedrai un elenco a discesa di tutti i profili di provisioning di cui Xcode è a conoscenza. Assicurati che sia selezionato quello corretto o che l'elemento "Sviluppatore automatico" scelga quello corretto. Il menu a discesa dovrebbe mostrarti tutto.
Mike Weller,

E sei sicuro di avere l'ultimo profilo di provisioning? Potrebbe essere che hai una versione precedente, da prima dell'attivazione del push?
Mike Weller,

2
Beh, sì, credo di si. Quello che ho fatto per ottenere il nuovo profilo di provisioning è, in Xcode Organizer, eliminare il profilo sia dalla Libreria che dal dispositivo, quindi tornare alla schermata Libreria facendo clic su Aggiorna. Ciò lo ha rimosso dal portale di provisioning. Ho quindi aggiunto questo al dispositivo. E come mostrato sopra, il contenuto ish XML del file mobileprovision mostra i giusti diritti
jwl

3
Ach, scusa. Ci deve essere un -prima del percorso: codesign -d --entitlements - /path/to/my.app. A questo punto vale anche la pena di ricontrollare che ci si trova nella directory Debug-iphoneos, poiché "Show In Finder" a volte può portarti nel posto sbagliato.
Mike Weller,

64

Ho riscontrato questo problema in Xcode 8. Devi abilitare Target—> funzionalità—> notifica push. Controlla lo screenshot.

inserisci qui la descrizione dell'immagine


1
Questo mi aiuta !!!! Basta fare clic su un pulsante ... risolvere il mio problema che debug per ore ... Anche Xcode8.
Veck Hsiao,

3
OMG grazie! Dai Apple, dacci un messaggio di errore più ragionevole!
Ferran Maylinch,

Xcode 8 disattivato Notifiche push per la mia app, quindi questa soluzione ha funzionato.
Kevin,

1
Grazie, devo aver eseguito le altre fasi di installazione 3 volte prima di averlo trovato. Mi sento un idiota, ma anche che gli strumenti fanno male per permettere che questo sia il problema.
Collin Flynn,

mi hai salvato la giornata, amico!
Oskarko,

47

Il modo più semplice è farlo dai tuoi account con Xcode:

Vai su Xcode -> Preferenze -> Scegli la scheda Account -> Visualizza dettagli -> Premi il pulsante di aggiornamento in basso a sinistra -> Fatto.

Costruisci di nuovo e dovrebbe funzionare.


19

Ok, ho affrontato il problema prima. Poiché la notifica push richiede l'implementazione sul lato server, per me ricreare il profilo non era un'opzione. Quindi ho trovato questa soluzione SENZA creare un nuovo profilo di provisioning.

Xcode non sta selezionando correttamente il profilo di provisioning corretto sebbene lo stiamo selezionando correttamente.

Prima vai all'organizzatore. Nella scheda Dispositivi, Profilo di provisioning dall'elenco Libreria, selezionare il profilo desiderato che si sta tentando di utilizzare. Fai clic destro su di esso e quindi "Rivela profilo nel Finder".

inserisci qui la descrizione dell'immagine

Il profilo corretto verrà selezionato nella finestra del Finder aperta. Nota il nome.

inserisci qui la descrizione dell'immagine

Ora vai su Xcode> Log Navigator. Seleziona il filtro per "Tutti" e "Tutti i messaggi". Ora nell'ultima fase (Build Target) cercare il passaggio chiamato "ProcessProductPackaging" espanderlo. Nota il nome del profilo di provisioning. NON devono corrispondere se si verifica l'errore. inserisci qui la descrizione dell'immagine

Ora nella finestra del Finder aperto elimina il profilo di provisioning non autorizzato utilizzato da Xcode. Ora costruisci di nuovo. L'errore dovrebbe essere risolto. In caso contrario, ripetere il processo per trovare un altro profilo canaglia per rimuoverlo.

Spero che questo ti aiuti.


Questo è stato colpa mia, ma risolto usando questo metodo. Avevo inserito accidentalmente nella casella delle informazioni un identificativo diverso da quello con cui avevo generato il certificato.
JavaCoderEx

18

La risposta è stata: ricominciare da capo, fare tutto allo stesso modo ma creare un nuovo profilo di provisioning e installarlo. Ha funzionato L'ispezione di tutti i dettagli (diritti nella fornitura di dispositivi mobili) è esattamente la stessa di qualsiasi cosa nella mia domanda qui. Ma ora funziona. Mela: WAT?

Ovviamente, sarebbe stato ovvio farlo se fosse stato possibile eliminare i profili di provisioning. Ma poiché ciò non è possibile, non volevo ingombrare il nostro team con un sacco di profili di test. Tuttavia, alla fine perse la pazienza e lo provò comunque, e alla fine ha funzionato. Whatevs.


Creazione di un nuovo profilo e "sporcare" il vecchio uno come si dice in questa altra questione SO ha lavorato per me: stackoverflow.com/questions/5681172/...
scurioni

Tutto quello che dovevo fare era eliminare il profilo di provisioning esistente dal portale e ricrearlo. Puoi eliminare i profili ora dopo l'aggiornamento, quindi non è necessario creare un nuovo ID app.
odyth,

Il nuovo profilo di provisioning con lo stesso ID app e certificato di distribuzione ha risolto il problema per me. +1 :)
Azik Abdullah,

18

Elimina il vecchio profilo di provisioning da XCode in Organizer.

Quindi, genera un nuovo profilo di provisioning per lo stesso ID bundle nel portale di provisioning iOS (dopo aver abilitato il push).

Importa il nuovo profilo di provisioning in XCode, impostalo nelle impostazioni di creazione dell'app.

Costruisci, corri, funziona.

L'ho appena fatto.

Mi ci sono voluti 10 minuti dall'errore al successo.


Questo è quello che ha funzionato anche per me. La modifica del vecchio profilo di provisioning e il download non hanno funzionato per me. Grazie!
Prageeth,

Come utile addendum, invece di ottenere un nuovo profilo di provisioning, sono stato semplicemente in grado di eliminare quello vecchio
ritmatter,

1
Consiglio vivamente di non farlo a mano. Usa github.com/fastlane/PEM .
fatuhoku,

16

XCode 6.1.1 e più account sviluppatore apple

Un'altra risposta per questo mix già abbastanza completo: ho riscontrato di nuovo questo problema oggi, e questa volta era dovuto al fatto che avessi più account Apple. Prima dovevo aggiungere il secondo account sviluppatore in XCode> Preferenze> Account> +

Assicurarsi che la funzionalità di notifica push sia attivata

Successivamente, dovevo abilitare esplicitamente l'acquisto in-app nell'app (non avevo bisogno di farlo in precedenza). XCode> (la finestra dell'app)> Target> Funzionalità> Acquisto in-app ON (e in questa fase mi è stata data la possibilità di scegliere il certificato corretto)

Nota che avevo già aggiunto il certificato abilitato Push facendo doppio clic su di esso nel Finder.

inserisci qui la descrizione dell'immagine


Stavo scervellando questo, immagino che quando sono passato all'Xcode 8 beta ha disattivato il mio interruttore per le notifiche push o qualcosa del genere. Grazie
INVINCEable il

Grazie, ecco perché ho avuto questo problema. Il mio ID app è abilitato per acquisti in-app, game-center ecc., Ma in Xcode / funzionalità sono tutti disattivati ​​prima, nessun problema. Da allora aggiornato a Xcode 8 sto avendo questo problema. Dopo aver abilitato IAP e Game Center in Xcode, il problema è sparito!
Ethan Long,

11

(Xcode 5) Bene, dopo aver trascorso un'ora ho risolto il mio problema. Anche se si genera nuovamente il file di provisioning in Xcode 5, è necessario aggiornare manualmente il proprio account. Nella scheda Organizer ho modificato solo il file di provisioning che non funzionava, Xcode continuava a essere compilato con il vecchio file di provisioning.

Quindi vai a

Xcode> Preferenze> Account> Visualizza dettagli (Seleziona il tuo account)

Quindi aggiorna i tuoi file di provisioning.


7

Il mio problema era semplicemente che stavo firmando con il profilo di provisioning con caratteri jolly gestito da Xcode.

Dopo aver creato un profilo specifico per l'app (e averlo scaricato, fatto doppio clic su di esso e assicurato che le mie Impostazioni di costruzione vi si riferissero), ho ricevuto correttamente un token del dispositivo APNS.


Ho avuto anche questo problema. Xcode 5 è abbastanza bravo ad aggiornare i profili di provisioning. Ho aggiunto il servizio APNS più avanti nello sviluppo. Devi assicurarti come il poster sopra indica che il tuo profilo di provisioning è in realtà il profilo unico per l'app su cui stai lavorando e non un carattere jolly.
Michael,

@Michael, come puoi esserne sicuro? Ho provato a modificarlo nelle impostazioni di compilazione (in Firma codice), che al momento non è impostato su nessuno. Quando scelgo il profilo e la build corretti, viene visualizzato un errore, quindi torna al profilo di provisioning con caratteri jolly.
Ian Jamieson,

@ian che errore stai ricevendo? Sei sicuro che sia un profilo valido?
Michael,

Ah, l'ho ordinato, dovevo scaricare di nuovo il certificato corretto sul mio Mac. Questo sembra aver fatto il trucco. Grazie.
Ian Jamieson,

Felice di sentirlo. Quello che faccio di solito quando sembra che le impostazioni siano corrette. Ripeti tutti i certificati. Sembra essere il problema più volte che no.
Michael,

6

Ho avuto lo stesso problema con tutti gli altri e ho provato tutti i trucchi di cui sopra, niente ha funzionato. Ho anche cancellato e ricominciato da capo con un altro account sviluppatore.

Ciò che ha funzionato per me alla fine è stato

  1. Fai come suggerito sopra e crea l'ID APP
  2. Quindi creare il profilo di provisioning
  3. NON utilizzare il profilo jolly del team (gestito da xcode one) nella sezione di sviluppo del provisioning. Devi crearne uno separato utilizzando l'ID app per cui hai attivato la notifica push. In questo modo quando lo svilupperai avrà la funzione di notifica push integrata.

Non so se puoi abilitarlo per un'app jolly, ma dopo aver provato almeno 12 suggerimenti diversi e aver perso alcuni giorni spero che questo aiuti qualcuno


2
Ma questo non aggiunge nulla alle risposte esistenti, che già danno questo consiglio. Ovviamente un'app push ha bisogno del proprio profilo; i documenti sono abbastanza chiari sul fatto che il profilo jolly non può essere utilizzato per nessuna app che necessita di diritti speciali.
matt

1
L'ho fatto, ma la mia app selezionerà sempre e solo il profilo di provisioning con caratteri jolly, non posso forzarlo a selezionare quello con le notifiche push abilitate.
Ian Jamieson,

3

Hai citato un profilo di provisioning ma non vedo alcuna menzione di un profilo push di Apple.

Per usare Push devi avere un profilo push (ce ne sono due, uno per lo sviluppo e uno per il rilascio). Dopo averlo creato, devi assicurarti che contenga i certificati pertinenti (vedi la sezione EDIT di seguito).

Questo è un eccellente tutorial che ti guiderà attraverso tutti i passaggi:

http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

A me oa chiunque altro occorrerebbero ore e ore per scrivere una risposta dettagliata e dettagliata come questo tutorial, quindi non ho intenzione di tentare, né rivendicare la generosità quando questo tutorial esiste già.

PS Credo che non ti servano più diritti, questa è una cosa ereditata.

EDIT: dovresti anche verificare di avere i profili necessari sul dispositivo: vai alle impostazioni, quindi ai profili generali, controlla che i tuoi profili siano elencati, in particolare il profilo push ovviamente. Puoi anche verificarlo dalla sezione Organizer di XCode. In Organizer ci sono due sezioni che dicono i profili di provisioning: uno in alto a sinistra nella libreria (questi sono i profili in XCode che usi per firmare ecc.) Inoltre vedrai una sezione chiamata Profili di provisioning per il dispositivo collegato, questo è il profilo installato sul portatile. Se non sono installati sul portatile, è possibile scaricarli dal sito Web del portale di provisioning, quindi fare clic sul pulsante Aggiungi nella parte inferiore della finestra Organizer.

Mentre nel portale di provisioning dovresti anche verificare che il profilo push di Apple includa i certificati: - fai clic su Provisioning nel menu a sinistra - vedrai un elenco del tuo profilo, seleziona MODIFICA il profilo push di Apple - vedrai una sezione di certificati, con un elenco di sviluppatori o tester ecc. presenti nel progetto, assicurarsi che la casella di controllo sia selezionata per essi. - vedrai anche una sezione dei dispositivi, assicurati che il dispositivo su cui stai testando sia stato aggiunto.

Se si dispone di vecchi profili in XCode o sul dispositivo, eliminarli e scaricare / aggiornare / installare tutti i nuovi profili dal portale di provisioning


Se i diritti sono una cosa legacy, allora perché ricevo un messaggio in cui non mi lamento? Ho già seguito il tutorial collegato alla lettera senza fortuna ... grazie comunque.
jwl

Inoltre, ho aggiunto alcune informazioni sul file mobileprovision effettivo che potrebbero essere utili.
jwl

è vero, non ho nemmeno impostato alcun .entitlements per inviare correttamente le notifiche. Una cosa che mi ha fatto inciampare mentre lo facevo era che dovevo scaricare manualmente mobileprovision, quindi andare a costruire le impostazioni e cambiare l'identità della firma in modo che corrispondesse a quella appena scaricata, nel mio caso, a quanto pare Xcode sta scegliendo la mobileprovision jolly.
X Slash,

Anch'io ho ricevuto un messaggio di errore sui diritti qualche tempo fa, è un'aringa rossa, vedi la risposta di Mike Wellers, è quello che ho fatto nel mio caso.
Gruntcakes,

Ho aggiornato la risposta con alcune altre cose da controllare.
Gruntcakes,

2

Mi sono imbattuto in questo stesso problema. Per me, il problema era che il nome del mio prodotto ($ TARGET_NAME) non era in maiuscolo nello stesso modo presentato nel certificato fornito da Apple. Ad esempio, avevo com.companyid.APNDemo mentre il certificato Apple utilizzava com.companyid.apndemo.

Ho cambiato il mio obiettivo in minuscolo e ha funzionato. Nota: L'indizio per me era che l'impostazione di firma del codice in Impostazioni build era impostata sul mio certificato di sviluppatore predefinito; non il profilo di provisioning APNTest.


1

Molte delle risposte di cui sopra sono corrette. Tuttavia, sembra esserci più di un possibile errore quando si tratta di questo.

Quello che avevo era un problema di capitalizzazione con il mio ID app. Il mio ID app per qualche motivo non era in maiuscolo ma la mia app lo era. Una volta ricreato l'ID app con le maiuscole corrette, tutto ha funzionato senza problemi. Spero che questo ti aiuti. Frustrante come l'inferno però.

PS se continua a non funzionare, prova a modificare manualmente il campo Identità firma codice con "modifica". Modificare la seconda riga con il nome del nome profilo di provisioning corretto.


1

Mi ci sono volute ore per risolverlo. Dato che qualcuno sta usando script personalizzati per firmare e comprimere mentre altri usano xcode stesso, c'è solo un modo per controllare cosa è finito nella tua app. Scarica i tuoi diritti con

codesign --display --entitlements :- path/to/MyApp.app

e controlla aps-environmente application-identifier.


ho avuto lo stesso problema. Volevo solo chiedere, il percorso verso l'app è per l'app installata sul simulatore?
Ajeet

no, è il percorso dell'app compilata per il dispositivo reale, nella directory di costruzione di xcode.
abitazione dal

1

Questo errore può verificarsi quando il certificato è scaduto.

La soluzione è rinnovare il certificato e firmare l'applicazione con esso.


1

Devi assicurarti di avere nei tuoi profili di provisioning ( https://developer.apple.com/account/ios/profile/ ) un profilo di distribuzione iOS.

Quando carichi da xCode su App Store, assicurati di avere aps-environment nelle autorizzazioni. In caso contrario, scaricarli da Visualizza account -> Visualizza dettagli -> Scarica tutto.


1

Ho avuto un problema simile. Ho rimbalzato tra XCode 7 e 8 per una serie di motivi. Una volta che hai usato 8 per compilare, dovrai usare 8. Ho semplicemente usato Xcode 8 e ho applicato alcune delle modifiche suggerite sopra e ha funzionato.



0

Sembra che ci sia qualcosa di eccentrico con i diritti "automatici" in Xcode 4.6.

Esiste un file Entitlement.plist per ciascun SDK in:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/Entitlements.plist

Una soluzione alternativa che mi è venuta in mente è stata quella di modificare questo file e aggiungere manualmente la subdola chiave aps-environment in questo modo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    <key>aps-environment</key>
    <string>development</string>
    <key>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    </array>
</dict>
</plist>

Quindi, Xcode sta generando il file Xcent corretto, che contiene la chiave aps-environment in:

/Users/mySelf/Library/Developer/Xcode/DerivedData/myApp-buauvgusocvjyjcwdtpewdzycfmc/Build/Intermediates/myApp.build/Debug-iphoneos/myApp.build/myApp.xcent

Puoi individuare dove viene creato il tuo file Xcent usando Log Navigator di Xcode,
cercare "ProcessProductPackaging".

Sfortunatamente, questo è l'unico modo che ho trovato per risolvere il problema .
(e finalmente in grado di ottenere correttamente il token push ora)

Mi chiedo solo se è disponibile un'altra soluzione più elegante.
Si prega di consultare la mia domanda SO per maggiori dettagli al riguardo:
il diritto automatico Xcode 4.6 non funziona - "nessun ambiente aps valido"


0

Prima di eliminare e rigenerare AppID / profili, assicurarsi che la libreria e il dispositivo abbiano gli stessi (e corretti) profili installati.

Ho iniziato a vedere questo errore dopo la migrazione a un nuovo computer. Push aveva funzionato correttamente prima della migrazione.

Il problema era (duh) che non avevo importato i profili nella libreria Xcode sul nuovo computer (in Organizer / Dispositivi in ​​Libreria-> Profili di provisioning).

La parte confusa era che il DISPOSITIVO aveva già i profili giusti e si presentavano come previsto nelle impostazioni di compilazione, quindi tutto sembrava corretto lì, ma XCode LIBRARY non li aveva, quindi stava firmando l'app con ... ?? ?


0

Questo è ciò che l'ha risolto per me. (Avevo già provato ad attivare / disattivare le funzionalità, ricreando il profilo di provisioning, ecc.).

Nella scheda Impostazioni build , in Diritti firma codice , il mio file .entitlements non era un collegamento per tutte le sezioni. Una volta aggiunto alla sezione Any SDK , l'errore è stato risolto.

inserisci qui la descrizione dell'immagine


0

Ho provato tutte le risposte elencate qui, ma nessuno ha risolto il mio problema. Nel mio caso questo errore è dovuto al mio sciocco errore nella creazione di Appid. Ho usato l' ID app Wildcard invece di utilizzare l' ID app esplicito ha causato il problema

Se desideri che un'applicazione riceva notifiche remote (notifica push), devi utilizzare un ID app esplicito , come com.tutsplus.push , invece di com.tutsplus. *

Si prega di trovare ScreenShot, inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.