Ich habe mich sehr bemüht, eine einfache iOS-App zu erstellen, die Push-Benachrichtigungen empfangen kann. Mein einziger Grund dafür ist, ein Verfahren festzulegen, das einige andere Teammitglieder verwenden können, und es war mir nicht möglich, eine aktuelle, funktionierende Version solcher Anweisungen an anderer Stelle im Web zu finden. 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 Problemposts von Apple und anderswo gestolpert und habe das Gefühl, fast da zu sein ...
Hier muss ich (beachten Sie, dass ich Xcode 4.3 verwende und zunächst versuche, nur für iOS 5.1 bereitzustellen, und ich stelle fest, dass sich einige Dinge in letzter Zeit 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 verwickelt zu finden):
1) Ich habe ein Bereitstellungsprofil auf meinem iPhone, für das Push aktiviert ist
2) In meinem Test-Xcode-Projekt wurde dieses Bereitstellungsprofil als Signaturidentität ausgewählt (unter Build-Einstellungen> Codesignatur).
3) Ich habe meine Bundle-ID unter Zusammenfassung und Info> Benutzerdefinierte iOS-Zieleigenschaften richtig eingestellt * (glaube ich ??)
4) Ich habe registerForRemoteNotificationTypes in didFinishLaunchingWithOptions meines Delegaten aufgerufen
5) Ich habe didRegisterForRemoteNotificationsWithDeviceToken und didFailToRegisterForRemoteNotificationsWithError in meinem Delegaten eingerichtet, um das Gerätetoken bzw. den Fehler zu protokollieren
6) Ich habe die Option Berechtigungen aktivieren unter Zusammenfassung aktiviert.
7) Direkt darunter ist die ausgewählte Berechtigungsdatei Tinker6 (der Name meines Testprojekts), die automatisch generiert wurde, als ich Berechtigungen aktivieren aktiviert habe
8) In der Tinker6.entitlements-Datei habe ich Folgendes (was ich gesammelt habe, ist korrekt, basierend auf mehreren verschiedenen Posts im gesamten Web, aber ich kann nichts Bestimmtes von Apple selbst finden):
Aktualisiert
9) Außerdem habe ich das Ganze ohne Berechtigungsdatei ausprobiert und erhalte im Wesentlichen das gleiche Ergebnis.
10) Der Inhalt meiner MobileProvision-Datei enthält Berechtigungen (ich habe die Nummer und die Domain verschlüsselt, aber strukturell gleich):
<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 Produktion, alle vier möglichen Kombinationen, dasselbe.
Wie komme ich daran vorbei? Wo ist die endgültige Dokumentation dazu?
- weiterer Hintergrund folgt -
* In Bezug auf die Bundle-ID ist mir immer noch nicht klar, wie dies in Bezug auf App-IDs und Profil-IDs im Bereitstellungsprofil festgelegt werden soll. Im Bereitstellungsportal unter App-IDs habe ich Folgendes (erneut die Nummer und die Domain verschlüsselt):
Und die zwei Stellen Bundle ID ist gesetzt Ich habe dies:
Ich bin mir überhaupt nicht sicher, ob diese korrekt sind oder ob einer oder beide auf 12355456A7.com.whatever.tinker gesetzt werden sollten, obwohl ich diese früher im Prozess ohne Erfolg ausprobiert habe ...
Hinweis Ich stelle fest, dass es viele Posts mit ähnlichen Titeln gibt, die jedoch aufgrund der angegebenen Dateinamen usw. veraltet zu sein scheinen und keine der Lösungen nützlich zu sein scheint. Ich hoffe, dass die von mir angegebene Detailgenauigkeit eine qualitativ hochwertige Antwort rechtfertigt. Ich werde wahrscheinlich so schnell wie möglich ein Kopfgeld vergeben. 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. Vor allem, wenn Sie einen wirklich guten Artikel in Ihrem Blog veröffentlichen, "hier sind genau die 500 Schritte, die Sie benötigen, um eine einfache Push-Benachrichtigungs-App zum Laufen zu bringen, einschließlich Bereitstellung und was auch immer".
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 über fehlende Berechtigungen angezeigt wird, kann ich nur davon ausgehen, dass die Codesignaturoptionen in den Build-Einstellungen nicht korrekt sind.
Sie müssen sicherstellen, dass das richtige Profil für die "Debug" -Konfiguration ausgewählt ist, und um sicherzugehen, dass Sie das richtige Profil sowohl für den "Debug" - als auch für den untergeordneten Knoten mit der Bezeichnung "Any iOS SDK" ausgewählt haben:
Obwohl dieser Screenshot das ausgewählte Profil "Automatischer Entwickler" zeigt, wählen Sie zu Testzwecken das genaue Bereitstellungsprofil aus der Dropdown-Liste aus. Möglicherweise wählt Xcode automatisch ein anderes Profil als das 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.
quelle
-
vor dem Pfad:codesign -d --entitlements - /path/to/my.app
. An dieser Stelle lohnt es sich auch zu überprüfen, ob Sie sich im Debug-iphoneos-Verzeichnis befinden, da "Show In Finder" Sie manchmal an den falschen Ort bringen kann.Ich habe dieses Problem in Xcode 8 festgestellt. Sie müssen Ziel -> Funktionen -> Push-Benachrichtigung aktivieren. Überprüfen Sie den Screenshot.
quelle
Am einfachsten ist es, dies von Ihren Konten mit Xcode aus zu tun:
Gehen Sie zu Xcode -> Einstellungen -> Wählen Sie die Registerkarte "Konten" -> Details anzeigen -> Klicken Sie unten links auf die Schaltfläche "Aktualisieren" -> "Fertig".
Bauen Sie erneut und es sollte funktionieren.
quelle
Ok, ich hatte das Problem schon einmal. Da für die Push-Benachrichtigung eine serverseitige Implementierung erforderlich ist, war die Neuerstellung des Profils für mich keine Option. Deshalb habe ich 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.
Gehen Sie zuerst zum Veranstalter. Wählen Sie auf der Registerkarte Geräte unter Bereitstellungsprofil aus der Liste Bibliothek das gewünschte Profil aus, das wir verwenden möchten. Klicken Sie mit der rechten Maustaste darauf und dann auf "Profil im Finder anzeigen".
Das richtige Profil wird im geöffneten Finder-Fenster ausgewählt. Notieren Sie den Namen.
Gehen Sie nun zu Xcode> Log Navigator. Wählen Sie den Filter für "Alle" und "Alle Nachrichten". 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.
Löschen Sie nun im Fenster "Geöffneter Finder" das von Xcode verwendete Rogue-Bereitstellungsprofil. Jetzt wieder bauen. Der Fehler sollte behoben sein. Wenn nicht, wiederholen Sie den Vorgang, um ein anderes Schurkenprofil zu finden, um es zu entfernen.
Hoffe das hilft.
quelle
Die Antwort lautete: Beginnen Sie von vorne, machen Sie alles gleich, erstellen Sie jedoch ein neues Bereitstellungsprofil und installieren Sie es. Das hat funktioniert. Das Überprüfen aller Details (Berechtigungen bei der mobilen Bereitstellung) sieht genau aus das gleiche wie alles in meiner Frage hier. Aber jetzt funktioniert es. Apple: WAT?
Natürlich wäre es naheliegend gewesen, dies zu tun, wenn es möglich gewesen wäre, Bereitstellungsprofile zu löschen. Aber da dies nicht möglich ist, wollte ich unser Team nicht mit einer Reihe von Testprofilen überladen. Trotzdem verlor ich endlich die Geduld und versuchte es trotzdem, und es funktionierte schließlich. Was auch immer.
quelle
Löschen Sie das alte Bereitstellungsprofil aus XCode in Organizer.
Generieren Sie anschließend ein neues Bereitstellungsprofil für dieselbe Bundle-ID im iOS-Bereitstellungsportal (nachdem Sie Push aktiviert haben).
Importieren Sie das neue Bereitstellungsprofil in XCode und legen Sie es in Ihren App-Build-Einstellungen fest.
Erstellen, ausführen, es funktioniert.
Ich habe es einfach gemacht.
Ich habe 10 Minuten vom Fehler bis zum Erfolg gebraucht.
quelle
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 2. Entwicklerkonto unter XCode> Einstellungen> Konten> + hinzufügen
Stellen Sie sicher, dass die Push-Benachrichtigungsfunktion aktiviert ist
Als nächstes musste ich den In-App-Kauf in der App explizit aktivieren (dies war zuvor nicht erforderlich). XCode> (das App-Fenster)> Ziele> Funktionen> In-App-Kauf EIN (und zu diesem Zeitpunkt hatte ich die Möglichkeit, das richtige Zertifikat auszuwählen).
Beachten Sie, dass ich das Push-fähige Zertifikat bereits durch Doppelklicken im Finder hinzugefügt habe.
quelle
(Xcode 5) Nun, nachdem ich eine Stunde verbracht hatte, löste ich mein Problem. Selbst wenn Sie die Bereitstellungsdatei in Xcode 5 neu 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
Aktualisieren Sie dann Ihre Bereitstellungsdateien.
quelle
Mein Problem war einfach, dass ich mit dem von Xcode verwalteten Wildcard-Bereitstellungsprofil signierte.
Nachdem ich ein app-spezifisches Profil erstellt (und heruntergeladen, doppelklickt und sichergestellt hatte, dass meine Build-Einstellungen darauf verweisen), habe ich erfolgreich ein APNS-Geräte-Token erhalten.
quelle
Ich hatte das gleiche Problem wie alle anderen und habe alle oben genannten Tricks ausprobiert, nichts hat funktioniert. Ich habe sogar gelöscht und mit einem anderen Entwicklerkonto neu angefangen.
Was am Ende für mich funktioniert hat, war
Ich weiß nicht, ob Sie das für eine Wildcard-App aktivieren können, aber nachdem ich mindestens 12 verschiedene Vorschläge ausprobiert und ein paar Tage verloren habe, hoffe ich, dass dies jemandem hilft
quelle
Sie erwähnen ein Bereitstellungsprofil, aber ich sehe keine Erwähnung eines Apple Push-Profils.
Um Push verwenden zu können, müssen Sie über ein Push-Profil verfügen (es gibt zwei, 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 ausgezeichnetes Tutorial, das Sie durch alle Schritte führt:
http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12
Ich oder sonst jemand würde Stunden und Stunden brauchen, um eine ausführliche Antwort wie dieses Tutorial zu schreiben, also werde ich es nicht versuchen oder Anspruch auf die Prämie erheben, wenn dieses Tutorial bereits existiert.
PS Ich glaube, Sie brauchen keine Ansprüche mehr, das ist eine Legacy-Sache.
BEARBEITEN: Sie sollten auch überprüfen, ob Sie die erforderlichen Profile auf dem Gerät haben - gehen Sie zu den Einstellungen, dann Allgemein, Profile, überprüfen Sie, ob Ihre Profile aufgelistet sind, insbesondere natürlich das Push-Profil. Sie können dies auch im Organizer-Bereich von XCode überprüfen. In Organizer gibt es zwei Abschnitte, in denen Bereitstellungsprofile angegeben sind - einen oben links in der Bibliothek (dies sind die Profile in XCode, die Sie zum Signieren verwenden usw.). Außerdem wird ein Abschnitt mit dem Aufruf Bereitstellungsprofile für das angeschlossene Gerät angezeigt ist das Profil, das auf dem Mobilteil installiert ist. Wenn Sie sie nicht auf dem Mobilteil installiert haben, können Sie sie von der Website des Bereitstellungsportals herunterladen und dann unten im Organizer-Fenster auf die Schaltfläche Hinzufügen klicken.
Während Sie sich im Bereitstellungsportal befinden, sollten Sie auch überprüfen, ob das Apple Push-Profil die Zertifikate enthält: - Klicken Sie im linken Menü auf Bereitstellung - Sie sehen eine Liste Ihres Profils, wählen Sie, um das Apple Push-Profil zu bearbeiten - Sie werden sehen Stellen Sie in einem Abschnitt mit Zertifikaten mit einer Liste der Entwickler oder Tester usw., die Sie in Ihrem Projekt haben, sicher, dass das Kontrollkästchen für diese aktiviert ist. - Außerdem wird ein Geräteabschnitt angezeigt. 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
quelle
Ich bin selbst auf dasselbe Problem gestoßen. Für mich bestand das Problem darin, dass mein Produktname ($ TARGET_NAME) nicht auf die gleiche Weise großgeschrieben wurde, wie dies im von Apple bereitgestellten Zertifikat angegeben ist. Zum Beispiel hatte ich com.companyid.APNDemo, während das Apple-Zertifikat com.companyid.apndemo verwendete.
Ich habe mein Ziel in Kleinbuchstaben geändert und es hat funktioniert. Hinweis: Der Hinweis für mich war, dass die Codesignierungseinstellung in den Build-Einstellungen auf mein Standardentwicklerzertifikat festgelegt wurde. nicht das APNTest-Bereitstellungsprofil.
quelle
Viele der obigen Antworten sind richtig. Es scheint jedoch mehr als einen möglichen Fehler zu geben, wenn man sich damit befasst.
Das Problem war die Großschreibung meiner App-ID. Meine App-ID wurde aus irgendeinem Grund nicht großgeschrieben, meine App jedoch. Nachdem ich die App-ID mit korrekter Großschreibung neu erstellt hatte, funktionierte alles reibungslos. Hoffe das hilft. Aber verdammt frustrierend.
PS 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 richtigen Bereitstellungsprofilnamens.
quelle
Ich habe Stunden gebraucht, um es zu lösen. Angesichts der Tatsache, dass jemand benutzerdefinierte Skripte zum Signieren und Packen verwendet, während andere xcode selbst verwenden, gibt es nur einen Weg, um zu überprüfen, was in Ihrer App endete. Dump Sie Ansprüche mit
codesign --display --entitlements :- path/to/MyApp.app
und überprüfen
aps-environment
undapplication-identifier
.quelle
Dieser Fehler kann auftreten, wenn Ihr Zertifikat abgelaufen ist.
Die Lösung besteht darin, das Zertifikat zu erneuern und die Anwendung damit zu signieren.
quelle
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.
quelle
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.
quelle
Das Neuerstellen vorläufiger Dateien hat meine Probleme behoben.
quelle
Die "automatischen" Berechtigungen in Xcode 4.6 scheinen etwas Eigenartiges zu sein.
Für jedes SDK gibt es eine Entitlement.plist-Datei unter:
Eine Problemumgehungslösung, die ich mir ausgedacht habe, bestand darin, diese Datei zu bearbeiten und den hinterhältigen APS-Umgebungsschlüssel manuell wie folgt hinzuzufügen:
Anschließend generiert Xcode die richtige Xcent-Datei, die den APS-Umgebungsschlüssel enthält:
Mit dem Log Navigator von Xcode können Sie feststellen, wo Ihre Xcent-Datei erstellt wurde.
Suchen Sie nach "ProcessProductPackaging".
Leider ist dies der einzige Weg, den ich gefunden habe, um das Problem zu beheben .
(und endlich in der Lage, Push-Token jetzt richtig zu bekommen)
Ich frage mich nur, ob eine andere elegantere Lösung verfügbar ist.
Weitere Informationen hierzu finden Sie in meiner SO-Frage:
Xcode 4.6 automatische Berechtigung funktioniert nicht - "Keine gültige APS-Umgebung"
quelle
Stellen Sie vor dem Löschen und Wiederherstellen von AppIDs / Profilen sicher, dass in Ihrer Bibliothek und Ihrem Gerät dieselben (und korrekten) Profile installiert sind.
Nach der Migration auf einen neuen Computer wurde dieser Fehler angezeigt. Push hatte 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 / Geräte unter Bibliothek-> Bereitstellungsprofile).
Der verwirrende Teil war, dass das GERÄT bereits die richtigen Profile hatte und sie wie erwartet in den Build-Einstellungen angezeigt wurden, sodass dort alles korrekt aussah, aber die XCode-BIBLIOTHEK hatte sie nicht, also signierte sie die App mit ... ?? ?
quelle
Das hat es für mich behoben. (Ich hatte bereits versucht, die Funktionen ein- und auszuschalten, das Bereitstellungsprofil neu zu erstellen usw.).
Auf der Registerkarte " Build-Einstellungen" in " Code Signing Entitlements" war meine .entitlements- Datei nicht für alle Abschnitte verknüpft. Nachdem ich es dem Abschnitt " Beliebiges SDK" hinzugefügt hatte , wurde der Fehler behoben.
quelle
Ich habe alle hier aufgeführten Antworten ausprobiert, aber niemand hat mein Problem gelöst. In meinem Fall ist dieser Fehler auf meinen dummen Fehler bei der Appid-Erstellung zurückzuführen. Ich habe die Wildcard-App-ID anstelle der expliziten App-ID verwendet, die das Problem verursacht hat
Wenn Sie eine Anwendung möchten Remote - Benachrichtigungen (Push - Benachrichtigung) zu empfangen, dann müssen Sie ein verwenden Explicit App - ID , wie com.tutsplus.push , statt com.tutsplus. *
Hier finden Sie den Screenshot,
quelle