wake-up-neo.com

Wie kann man in Xcode 4.3 beheben, dass für die Anwendung keine gültige Berechtigungszeichenfolge für "aps-environment" gefunden wurde?

Ich habe mich sehr sehr bemüht, eine einfache iOS-App zu erstellen, die Push-Benachrichtigungen empfangen kann. Mein einziger Grund dafür ist die Einrichtung eines Verfahrens für einige andere Teammitglieder, die keine aktuelle Arbeitsversion solcher Anweisungen an anderer Stelle im Internet finden konnten. Unser Shop ist für iOS-Entwickler ziemlich neu, ich persönlich bin mit iOS-Entwicklern und Xcode völlig unerfahren. Ich bin durch Dutzende von Tutorials, Artikeln und Trouble-Posts von Apple und anderswo gestolpert, und ich habe das Gefühl, fast da zu sein ...

Hier muss ich vorgehen (beachten Sie, dass ich Xcode 4.3 verwende und zunächst versuche, es nur für iOS 5.1 bereitzustellen, und ich stelle fest, dass sich in letzter Zeit einige Dinge gegenüber früheren Versionen von Xcode geändert haben, aber ich bin wieder neu für alle dies - und es völlig verwirrend und verworren zu finden):

1) Auf meinem iPhone ist ein Bereitstellungsprofil vorhanden, für das Push aktiviert ist

2) In meinem Xcode-Testprojekt wurde dieses Bereitstellungsprofil als Signaturidentität ausgewählt (unter Build-Einstellungen> Codesignatur).

enter image description here

3) Ich habe meine Bundle-ID unter Zusammenfassung und Info> Benutzerdefinierte iOS-Zieleigenschaften richtig eingestellt * (glaube ich?)

4) Ich habe registerForRemoteNotificationTypes, die in didFinishLaunchingWithOptions meines Delegaten aufgerufen werden

5) Ich habe didRegisterForRemoteNotificationsWithDeviceToken und didFailToRegisterForRemoteNotificationsWithError in meinem Delegaten eingerichtet, um das Geräte-Token bzw. den Fehler zu protokollieren

6) Ich habe unter "Zusammenfassung" die Option "Berechtigungen aktivieren" aktiviert.

7) Unmittelbar darunter ist Tinker6 (der Name meines Testprojekts) als Berechtigungsdatei ausgewählt, die automatisch generiert wurde, wenn ich Berechtigung aktivieren aktiviert habe

8) In der Datei Tinker6.entitlements habe ich Folgendes (was ich gesammelt habe, basiert auf mehreren verschiedenen Posts im gesamten Web, aber ich kann nichts Bestimmtes von Apple selbst finden) :

enter image description here

aktualisiert

9) Außerdem habe ich das Ganze ohne eine Berechtigungsdatei ausprobiert und erhalte im Wesentlichen das gleiche Ergebnis.

10) Der Inhalt meiner mobileprovision-Datei enthält die Berechtigungen ordnungsgemäß (ich habe die Nummer und die Domain verschlüsselt, aber strukturell identisch):

<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>

/ Update beenden

Wenn ich versuche, dies auf meinem Gerät auszuführen, wird in der Xcode-Ausgabe der folgende Fehler angezeigt:

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}

Ich habe versucht, get-task-allow auf NO zu setzen, aps-environment auf production, alle vier möglichen Kombinationen, dasselbe.

Wie komme ich daran vorbei? Wo ist die endgültige Dokumentation dazu?

- Weitere Hintergründe folgen -

* Was die Paket-ID anbelangt, ist mir immer noch nicht klar, wie dies in Bezug auf App-IDs und Profil-IDs im Provisioning-Profil eingestellt werden soll. Im Provisioning-Portal unter App-IDs habe ich folgendes (nochmals die Nummer und Domain verschlüsselt):

enter image description here

Und die zwei Stellen Bundle-ID gesetzt ist, habe ich diese:

enter image description hereenter image description here

Ich bin mir überhaupt nicht sicher, ob diese korrekt sind oder ob einer oder beide auf 12355456A7.com.whatever.tinker gesetzt werden sollen, obwohl ich diese zuvor ohne Erfolg ausprobiert habe ...

Anmerkung Ich stelle fest, dass es viele Posts mit ähnlichen Titeln gibt, jedoch scheinen sie alle veraltet zu sein, basierend auf den angegebenen Dateinamen und so weiter, und die Tatsache, dass keine der Lösungen nützlich zu sein scheint. Ich hoffe, dass der größere Detaillierungsgrad, den ich gegeben habe, eine qualitativ hochwertige Antwort garantiert. Ich werde wahrscheinlich so schnell wie möglich ein Kopfgeld zuweisen. Wenn Sie eine qualitativ hochwertige Antwort geben, die zu einer Lösung führt, werde ich Ihnen das Kopfgeld gewähren und Ihre Antwort über Twitter und meinen Blog bewerben. Besonders wenn Sie einen wirklich guten Crosspost posten "hier sind die genauen 500 Schritte, die Sie benötigen, um eine einfache Push-Benachrichtigungs-App zum Laufen zu bringen, einschließlich Provisioning und was auch immer" Artikel auf deinem Blog oder was auch immer.

152
jwl

Die Antwort lautete: Neu starten, alles auf die gleiche Weise tun, aber ein neues Bereitstellungsprofil erstellen und installieren. Das hat funktioniert. Das Überprüfen aller Details (Berechtigungen in der mobilen Bereitstellung) sieht gena so aus, wie alles in meiner Frage hier. Aber jetzt funktioniert es. Apple: WAT?

Natürlich wäre es naheliegend gewesen, dies zu tun wenn es war möglich, Bereitstellungsprofile zu löschen. Da dies jedoch nicht möglich ist, wollte ich unser Team nicht mit einer Reihe von Testprofilen überladen. Trotzdem verlor er schließlich die Geduld und versuchte es trotzdem und es funktionierte. Was auch immer.

18
jwl

Wenn Sie Ihr Bereitstellungsprofil erstellt haben, bevor Sie das app ID Versuchen Sie für Push, das Bereitstellungsprofil neu zu generieren.

iOS-Bereitstellungsportal -> Bereitstellung -> Ihr Zertifikat -> BEARBEITEN -> Bearbeiten -> Neue Bereitstellung herunterladen

Hat für mich gearbeitet. Jetzt kann ich Push verwenden.

94
elp

Zunächst benötigen Sie die Berechtigungsdatei nur, wenn Sie benutzerdefinierte Schlüssel/Wert-Paare hinzufügen, die im Bereitstellungsprofil nicht vorhanden sind. Wenn Ihre App erstellt wird, werden alle Berechtigungen aus dem Bereitstellungsprofil in die App kopiert.

Da immer noch eine Fehlermeldung zu fehlenden Berechtigungen angezeigt wird, kann ich nur davon ausgehen, dass die Codesignaturoptionen in den Buildeinstellungen nicht korrekt sind.

Sie müssen sicherstellen, dass das richtige Profil für die "Debug" -Konfiguration ausgewählt ist, und sicherheitshalber das richtige Profil für den "Debug" -Knoten und den untergeordneten Knoten mit der Bezeichnung "Beliebiges iOS-SDK" ausgewählt haben:

enter image description here

Obwohl in diesem Screenshot das ausgewählte Profil "Automatischer Entwickler" angezeigt wird, wählen Sie das gewünschte Bereitstellungsprofil nur zu Testzwecken aus der Dropdown-Liste aus. Möglicherweise wählt Xcode automatisch ein anderes Profil als das von Ihnen gewünschte.

Stellen Sie außerdem sicher, dass Sie einen sauberen Build erstellen, die App vollständig von Ihrem Gerät löschen usw. Dies dient nur dazu, sicherzustellen, dass keine alten Flusen herumhängen.

68
Mike Weller

Ich habe dieses Problem in Xcode 8 festgestellt. Sie müssen Target -> Capabilities -> Push-Benachrichtigung aktivieren. Überprüfen Sie den Screenshot.

enter image description here

64
DipakSonara

Am einfachsten geht das von deinen Konten mit Xcode:

Gehen Sie auf Xcode -> Einstellungen -> Registerkarte "Konten" -> Details anzeigen -> Klicken Sie auf die Schaltfläche "Aktualisieren" unten links -> Fertig.

Erstellen Sie erneut und es sollte funktionieren.

47
ooxio

Ok, ich habe mich vorher dem Problem gestellt. Da die Push-Benachrichtigung eine serverseitige Implementierung erfordert, war das Neuerstellen eines Profils für mich keine Option. Ich habe diese Lösung gefunden, OHNE ein neues Bereitstellungsprofil zu erstellen.

Xcode wählt das richtige Bereitstellungsprofil nicht richtig aus, obwohl wir es richtig auswählen.

Gehe zuerst zum Veranstalter. Wählen Sie auf der Registerkarte Geräte in der Liste Bereitstellungsprofil aus Bibliothek das gewünschte Profil aus, das Sie verwenden möchten. Klicken Sie mit der rechten Maustaste darauf und wählen Sie "Profil im Finder anzeigen".

enter image description here

Das richtige Profil wird im geöffneten Finder-Fenster ausgewählt. Notieren Sie den Namen.

enter image description here

Gehen Sie nun zu Xcode> Log Navigator. Filter für "Alle" und "Alle Nachrichten" auswählen. Suchen Sie nun in der letzten Phase (Build Target) nach dem Schritt "ProcessProductPackaging", und erweitern Sie ihn. Notieren Sie den Namen des Bereitstellungsprofils. Sie sollten NICHT übereinstimmen, wenn Sie den Fehler haben. enter image description here

Löschen Sie nun im Fenster "Geöffneter Finder" das Rogue-Bereitstellungsprofil, das Xcode verwendet. Jetzt wieder aufbauen. Der Fehler sollte behoben sein. Wenn nicht, wiederholen Sie den Vorgang, um ein anderes Rogue-Profil zum Entfernen zu finden.

Hoffe das hilft.

19
Max

Löschen Sie das alte Bereitstellungsprofil aus XCode in Organizer.

Generieren Sie anschließend im iOS-Bereitstellungsportal ein neues Bereitstellungsprofil für dieselbe Bundle-ID (nachdem Sie Push aktiviert haben).

Importieren Sie das neue Bereitstellungsprofil in XCode und legen Sie es in den Einstellungen für die App-Erstellung fest.

Bauen, laufen, es funktioniert.

Ich habe es einfach gemacht.

Ich habe 10 Minuten vom Fehler zum Erfolg gebraucht.

18
user1006117

XCode 6.1.1 und mehrere Apple Entwicklerkonten

Eine weitere Antwort auf diese bereits ziemlich umfassende Mischung: Ich bin heute wieder auf dieses Problem gestoßen, und diesmal lag es daran, dass ich mehrere Apple) - Konten hatte. Ich musste zuerst das zweite Entwicklerkonto in = hinzufügen XCode> Einstellungen> Konten> +

Stellen Sie sicher, dass die Push-Benachrichtigungsfunktion aktiviert ist

Als nächstes musste ich den In-App-Kauf in der App explizit aktivieren (dies musste ich vorher nicht tun). XCode> (das App-Fenster)> Ziele> Funktionen> In-App-Kauf EIN (und zu diesem Zeitpunkt erhielt ich die Option, das richtige Zertifikat auszuwählen)

Beachten Sie, dass ich das Push-fähige Zertifikat bereits durch Doppelklicken im Finder hinzugefügt habe.

enter image description here

16
kris

(Xcode 5) Nun, nach einer Stunde habe ich mein Problem gelöst. Auch wenn Sie die Bereitstellungsdatei in Xcode 5 erneut generieren, sollten Sie Ihr Konto manuell aktualisieren. Ich habe nur die Bereitstellungsdatei auf der Registerkarte "Organizer" geändert, die nicht funktioniert hat. Xcode wurde weiterhin mit der alten Bereitstellungsdatei erstellt.

Also geh zu

Xcode> Einstellungen> Konten> Details anzeigen (Wählen Sie Ihr Konto aus)

Aktualisieren Sie dann Ihre Bereitstellungsdateien.

11

Mein Problem bestand einfach darin, dass ich mit dem von Xcode verwalteten Wildcard-Bereitstellungsprofil signierte.

Nachdem ich ein app-spezifisches Profil erstellt (und es heruntergeladen, darauf doppelt geklickt und sichergestellt habe, dass meine Build-Einstellungen darauf verweisen), erhielt ich erfolgreich ein APNS-Gerätetoken.

7
Graham Perks

Ich hatte das gleiche Problem wie alle anderen und habe alle oben genannten Tricks ausprobiert, nichts hat funktioniert. Ich habe sogar mit einem anderen Entwicklerkonto gelöscht und neu begonnen.

Was am Ende für mich funktioniert hat, war

  1. Gehen Sie wie oben beschrieben vor und erstellen Sie eine APP-ID
  2. Erstellen Sie dann ein Bereitstellungsprofil
  3. Verwenden Sie NICHT das von xcode one verwaltete Team-Platzhalterprofil im Entwicklungsabschnitt der Bereitstellung. Sie müssen eine separate App mit der App-ID erstellen, für die Sie die Push-Benachrichtigung aktiviert haben. Auf diese Weise ist bei der Entwicklung die Push-Benachrichtigungsfunktion integriert.

Ich weiß nicht, ob Sie das für eine Wildcard-App aktivieren können, aber nachdem Sie mindestens 12 verschiedene Vorschläge ausprobiert und einige Tage verloren haben, hoffe ich, dass dies jemandem hilft

6
Michael Ellams

Sie erwähnen ein Bereitstellungsprofil, aber ich sehe keine Erwähnung eines Apple Push-Profils.

Um Push verwenden zu können, müssen Sie ein Push-Profil haben (eines für die Entwicklung und eines für die Freigabe). Nachdem Sie es erstellt haben, müssen Sie sicherstellen, dass es die relevanten Zertifikate enthält (siehe Abschnitt BEARBEITEN unten).

Dies ist ein hervorragendes Tutorial, das Sie durch alle Schritte führt:

http://www.raywenderlich.com/3443/Apple-Push-notification-services-tutorial-part-12

Es würde Stunden und Stunden dauern, bis ich oder irgendjemand anders eine ausführliche Antwort wie dieses Tutorial geschrieben hätte, also werde ich es nicht versuchen und keinen Anspruch auf das Kopfgeld erheben, wenn dieses Tutorial bereits existiert.

P.S. Ich glaube, du brauchst keine Ansprüche mehr, das ist ein Vermächtnis.

BEARBEITEN: Sie sollten auch überprüfen, ob Sie die erforderlichen Profile auf dem Gerät haben - gehen Sie zu den Einstellungen, dann zu Allgemein, Profile, überprüfen Sie, ob Ihre Profile aufgelistet sind, insbesondere natürlich das Push-Profil. Sie können dies auch im Abschnitt "Organizer" von XCode überprüfen. In Organizer gibt es zwei Abschnitte, in denen Bereitstellungsprofile angezeigt werden - einen oben links in der Bibliothek (dies sind die Profile in XCode, die Sie zum Signieren usw. verwenden). Außerdem wird ein Abschnitt mit dem Namen Bereitstellungsprofile für das verbundene Gerät angezeigt ist das auf dem Mobilteil installierte Profil. Wenn Sie sie nicht auf dem Mobilteil installiert haben, können Sie sie von der Website des Bereitstellungsportals herunterladen. Klicken Sie dann unten im Organizer-Fenster auf die Schaltfläche Hinzufügen.

Im Bereitstellungsportal sollten Sie außerdem überprüfen, ob das Apple Push-Profil die Zertifikate enthält: - Klicken Sie im linken Menü auf Provisioning (Bereitstellung). - Sie sehen eine Liste Ihres Profils. Wählen Sie EDIT (Bearbeiten) Das Apple Push-Profil - Sie sehen einen Zertifikate-Bereich mit einer Liste der Entwickler oder Tester usw., die Sie in Ihrem Projekt haben. Stellen Sie sicher, dass das Kontrollkästchen für diese aktiviert ist. - Sie ' Wenn Sie auch einen Abschnitt mit Geräten sehen, stellen Sie sicher, dass das Gerät, auf dem Sie testen, hinzugefügt wurde.

Wenn Sie alte Profile in XCode oder auf dem Gerät haben, löschen Sie diese und laden/aktualisieren/installieren Sie alle neuen Profile vom Bereitstellungsportal

3
Gruntcakes

Bin selbst auf dasselbe Problem gestoßen. Für mich bestand das Problem darin, dass mein Produktname ($ TARGET_NAME) nicht in der gleichen Weise wie im von Apple bereitgestellten Zertifikat in Großbuchstaben angegeben wurde. Zum Beispiel hatte ich com.companyid.APNDemo, während das Apple cert com.companyid.apndemo verwendete.

Ich habe mein Ziel in Kleinbuchstaben geändert und es hat funktioniert. Hinweis: Der Anhaltspunkt für mich war, dass die Codesignierungseinstellung in den Build-Einstellungen auf mein Standard-Entwicklerzertifikat festgelegt wurde. nicht das APNTest-Bereitstellungsprofil.

2
David Carrico

Sie müssen sicherstellen, dass Sie in Ihren Bereitstellungsprofilen ( https://developer.Apple.com/account/ios/profile/ ) ein iOS-Verteilungsprofil haben.

Stellen Sie beim Hochladen von xCode in den App Store sicher, dass die Berechtigungen die aps-Umgebung enthalten. Wenn nicht, laden Sie sie über "Konten anzeigen" -> "Details anzeigen" -> "Alle herunterladen" herunter.

1
Nadav B

Viele der obigen Antworten sind richtig. Es scheint jedoch mehr als einen möglichen Fehler zu geben, wenn man damit umgeht.

Das, was ich hatte, war ein Großschreibungsproblem mit meiner App-ID. Meine App-ID wurde aus irgendeinem Grund nicht großgeschrieben, meine App jedoch. Nachdem ich die App-ID mit der korrekten Groß- und Kleinschreibung neu erstellt hatte, funktionierte alles reibungslos. Hoffe das hilft. Verdammt frustrierend.

P.S. Wenn es immer noch nicht funktioniert, versuchen Sie, das Code Signing Identity Field manuell mit "edit" zu bearbeiten. Ändern Sie die zweite Zeile mit dem Namen des korrekten Bereitstellungsprofilnamens.

1
matrinox

die Neuerstellung vorläufiger Dateien behebt alle Probleme.

1
Faris Muhammed

Dieser Fehler kann auftreten, wenn Ihr Zertifikat abgelaufen ist.

Die Lösung besteht darin, das Zertifikat zu erneuern und die Anwendung damit zu signieren.

1
vahotm

Ich habe Stunden gebraucht, um es zu lösen. Da jemand benutzerdefinierte Skripte zum Signieren und Packen verwendet, während andere Xcode selbst verwenden, gibt es nur eine Möglichkeit, zu überprüfen, was in Ihrer App geendet hat. Verwerfen Sie Ihre Berechtigungen mit

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

und prüfe aps-environment und application-identifier.

1
dwery

Ich hatte ein ähnliches Problem. Ich habe aus verschiedenen Gründen zwischen XCode 7 und 8 gewechselt. Sobald Sie 8 zum Erstellen verwenden, müssen Sie 8 verwenden. Ich habe einfach Xcode 8 verwendet und einige der oben vorgeschlagenen Änderungen angewendet, und es hat funktioniert.

1
Brent Brookler

Stellen Sie vor dem Löschen und erneuten Generieren von AppIDs/Profilen sicher, dass auf Ihrer Bibliothek und Ihrem Gerät die gleichen (und richtigen) Profile installiert sind.

Nach der Migration auf einen neuen Computer wird dieser Fehler angezeigt. Push hat vor der Migration ordnungsgemäß funktioniert.

Das Problem war (duh), dass ich die Profile nicht in die Xcode-Bibliothek auf dem neuen Computer importiert hatte (in Organizer/Devices unter Library-> Provisioning Profiles).

Der verwirrende Teil war, dass das GERÄT bereits die richtigen Profile hatte und sie erwartungsgemäß in den Build-Einstellungen angezeigt wurden, sodass dort alles korrekt aussah, aber die XCode-BIBLIOTHEK sie nicht hatte und die App mit ... ?? ?

0
Rodin Lyasoff

Die "automatischen" Berechtigungen in Xcode 4.6 scheinen etwas Eigenartiges zu haben.

Es gibt eine Entitlement.plist-Datei für jedes SDK unter:

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

Eine Lösung, die ich gefunden habe, bestand darin, diese Datei zu bearbeiten und den hinterhältigen Aps-Umgebungsschlüssel manuell wie folgt hinzuzufügen:

<?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>

Dann generiert Xcode die richtige Xcent-Datei, die den aps-Umgebungsschlüssel enthält:

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

Mit dem Log Navigator von Xcode können Sie ermitteln, wo Ihre Xcent-Datei erstellt wurde.
suchen Sie nach "ProcessProductPackaging".

Leider ist dies der einzige Weg, wie ich herausgefunden habe, dass das Problem behebt .
(und nun endlich in der Lage, das Push-Token richtig zu erhalten)

Ich frage mich nur, ob es noch eine elegantere Lösung gibt.
Weitere Informationen hierzu finden Sie in meiner SO) - Frage:
Xcode 4.6 automatische Berechtigung funktioniert nicht - "keine gültige aps-Umgebung"

0
AmitP

Ich habe alle hier aufgeführten Antworten ausprobiert, aber niemand hat mein Problem gelöst. In meinem Fall ist dieser Fehler auf meinen blöden Fehler bei der Appid-Erstellung zurückzuführen. Ich habe Wildcard App ID verwendet, anstatt Explizite App ID hat das Problem verursacht

Wenn eine Anwendung Remotebenachrichtigungen erhalten soll (Push-Benachrichtigung), müssen Sie eine explizite App-ID verwenden, z. B. com.tutsplus.Push anstelle von com.tutsplus. *

Finden Sie bitte den ScreenShot, enter image description here

0
arunjos007

Das hat es für mich behoben. (Ich hatte bereits versucht, die Funktionen ein- oder auszuschalten, das Bereitstellungsprofil neu zu erstellen usw.).

Auf der Registerkarte Build Settings in Code Signing Entitlements my .entitlements Datei wurde nicht für alle Abschnitte verlinkt. Nachdem ich es dem Abschnitt Beliebiges SDK hinzugefügt hatte, wurde der Fehler behoben.

enter image description here

0
mogile_oli