Saya sudah berusaha sangat keras untuk membuat aplikasi iOS sederhana sederhana yang dapat menerima pemberitahuan push. Satu-satunya alasan saya melakukan ini adalah untuk menetapkan prosedur bagi beberapa anggota tim lain untuk digunakan, dan belum dapat menemukan versi terbaru dari instruksi tersebut di tempat lain di web. Toko kami cukup baru di iOS dev, saya pribadi sama sekali tidak berpengalaman dengan dev dan Xcode iOS. Saya telah menemukan puluhan tutorial, artikel, dan posting masalah dari Apple dan di tempat lain dan saya merasa seperti saya mungkin hampir sampai ...
Di sinilah saya harus (perhatikan saya menggunakan Xcode 4.3 dan awalnya mencoba untuk menyebarkan hanya ke iOS 5.1, dan saya mengumpulkan bahwa beberapa hal mungkin telah berubah baru-baru ini vs versi Xcode sebelumnya, tetapi sekali lagi saya baru untuk semua ini - dan menemukannya benar-benar membingungkan dan berbelit-belit):
1) Saya punya profil penyediaan di iPhone saya yang memiliki Push diaktifkan
2) Dalam proyek Xcode pengujian saya, saya telah mendapatkan profil penyediaan yang dipilih sebagai identitas penandatanganan (dalam Pengaturan Bangun> Penandatanganan Kode)
3) Saya memiliki pengidentifikasi bundel saya di bawah Ringkasan dan Info> Properti Target iOS Kustom diatur dengan benar * (Saya pikir ??)
4) Saya punya registerForRemoteNotificationTypes yang dipanggil dalam delegasi saya didFinishLaunchingWithOptions
5) Saya mendapatkan didRegisterForRemoteNotificationsWithDeviceToken dan didFailToRegisterForRemoteNotificationsWithError di delegasi saya, mengatur untuk mencatat token perangkat atau kesalahan masing-masing
6) Saya telah mengaktifkan Aktifkan Hak yang diperiksa di bawah Ringkasan.
7) Tepat di bawah ini, File Entitlements yang dipilih adalah Tinker6 (nama proyek pengujian saya), yang dihasilkan secara otomatis ketika saya memeriksa Enable Entitlements.
8) Dalam file Tinker6.entitlements saya mendapatkan yang berikut (yang saya kumpulkan benar berdasarkan beberapa posting berbeda di seluruh web, tetapi yang saya tidak dapat menemukan sesuatu yang pasti dari Apple itu sendiri):
Diperbarui
9) Juga, saya telah mencoba semuanya tanpa file hak, dan pada dasarnya mendapatkan hasil yang sama.
10) Konten file mobileprovision saya mencakup hak dengan benar (Saya telah mengacak nomor dan domain tetapi secara struktural sama):
<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>
/ akhiri pembaruan
Ketika saya mencoba menjalankan ini di perangkat saya, saya mendapatkan kesalahan berikut dalam 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}
Saya sudah mencoba mengatur get-task-allow to NO, aps-environment to production, keempat kemungkinan kombinasi, hal yang sama.
Bagaimana saya bisa melewati ini? Di mana dokumentasi definitif tentang ini?
- Latar belakang lebih lanjut mengikuti -
* Sejauh bundel id, saya masih tidak jelas tentang bagaimana ini harus ditetapkan dalam kaitannya dengan Id Aplikasi dan Id Profil dalam profil Penyediaan. Di portal Provisioning di bawah App Id, saya punya ini (lagi-lagi, angka dan domain teracak):
Dan bundel id dua tempat diatur saya punya ini:
Saya sama sekali tidak yakin ini benar atau apakah satu atau keduanya harus disetel ke 12355456A7.com.wh whatever.tinker, meskipun saya sudah mencoba yang sebelumnya dalam proses tanpa hasil ...
Catatan saya menyadari ada banyak posting dengan judul yang serupa, namun semuanya tampaknya ketinggalan zaman berdasarkan nama file dan sebagainya yang diberikan, dan kenyataannya tidak ada solusi yang tampaknya berguna. Saya berharap tingkat detail yang lebih besar yang saya berikan akan menjamin respons kualitas. Saya mungkin akan memberikan hadiah sesegera mungkin dan jika Anda memberikan jawaban berkualitas tinggi yang mengarah ke solusi, saya akan memberi Anda hadiah itu serta mempromosikan jawaban Anda melalui twitter dan blog saya. Terutama jika Anda memasang posting yang benar-benar bagus "di sini adalah 500 langkah tepat yang Anda butuhkan untuk mendapatkan aplikasi push notification sederhana yang berfungsi termasuk penyediaan dan apa pun yang lain" artikel di blog Anda atau apa pun.
Pertama-tama, Anda tidak memerlukan file kepemilikan kecuali Anda menambahkan pasangan kunci / nilai khusus yang tidak ada dalam profil penyediaan. Saat aplikasi Anda dibuat, hak apa pun dari profil penyediaan akan disalin ke aplikasi.
Mengingat Anda masih melihat pesan kesalahan tentang hak yang hilang, saya hanya bisa berasumsi bahwa opsi penandatanganan kode tidak benar dalam pengaturan build.
Anda perlu memastikan profil yang benar dipilih untuk konfigurasi "Debug", dan agar aman, Anda telah memilih profil yang benar untuk "Debug" dan simpul-anak yang berlabel "Any iOS SDK":
Meskipun tangkapan layar ini menunjukkan profil "Pengembang Otomatis" yang dipilih, pilih profil penyediaan tepat yang Anda inginkan dari drop down, hanya untuk tujuan pengujian. Bisa jadi Xcode secara otomatis memilih profil yang berbeda dari yang Anda inginkan.
Pastikan juga untuk melakukan build bersih, hapus aplikasi sepenuhnya dari perangkat Anda, dll. Ini hanya untuk memastikan Anda tidak memiliki fluff lama yang berkeliaran.
sumber
-
sebelum jalan:codesign -d --entitlements - /path/to/my.app
. Saat ini juga layak untuk memeriksa ulang apakah Anda berada di direktori Debug-iphoneos, karena "Show In Finder" kadang-kadang dapat membawa Anda ke tempat yang salah.Saya telah menghadapi masalah ini dalam Xcode 8. Anda harus mengaktifkan Target—> kemampuan—> push notification. Periksa tangkapan layar.
sumber
Cara termudah adalah melakukan ini dari akun Anda dengan Xcode:
Kepala Xcode -> Preferensi -> Pilih Tab Akun -> Lihat Detail -> Tekan tombol segarkan di kiri bawah -> Selesai.
Bangun lagi dan itu akan berhasil.
sumber
Ok, saya menghadapi masalah sebelumnya. Karena push notification memerlukan implementasi di sisi server, bagi saya membuat ulang profil bukanlah pilihan. Jadi saya menemukan solusi ini TANPA membuat profil penyediaan baru.
Xcode tidak memilih profil penyediaan yang benar dengan benar meskipun kami memilihnya dengan benar.
Pertama pergi ke organizer. Pada tab Perangkat, Menyediakan profil dari daftar Perpustakaan, pilih profil yang dimaksudkan yang ingin kami gunakan. Klik kanan padanya dan kemudian "Reveal Profile in Finder".
Profil yang benar akan dipilih di jendela Finder yang terbuka. Catat namanya.
Sekarang pergi ke Xcode> Log Navigator. Pilih filter untuk "Semua" dan "Semua Pesan". Sekarang di fase terakhir (Bangun Target) lihat langkah yang disebut "ProcessProductPackaging" perluas itu. Perhatikan nama profil penyediaan. Mereka seharusnya TIDAK cocok jika Anda memiliki kesalahan.
Sekarang di jendela Opened Finder hapus profil penyedia nakal yang Xcode gunakan. Sekarang bangun lagi. Kesalahan harus diatasi. Jika tidak, ulangi proses untuk menemukan profil jahat lainnya untuk menghapusnya.
Semoga ini membantu.
sumber
Jawabannya adalah: mulai dari awal, lakukan semuanya sama tetapi buat profil penyediaan baru, dan instal. Itu berhasil. Memeriksa semua detail (hak dalam ketentuan seluler) terlihat persis sama dengan semua yang ada di pertanyaan saya di sini. Tapi sekarang berhasil. Apple: WAT?
Tentu saja, sudah jelas untuk melakukan ini jika memungkinkan untuk menghapus profil penyediaan. Tapi karena itu tidak mungkin, saya tidak ingin mengacaukan tim kami dengan banyak profil pengujian. Tetap saja, akhirnya kehilangan kesabaran dan tetap mencobanya, dan akhirnya berhasil. Apa saja.
sumber
Hapus profil penyediaan sebelumnya dari XCode di Penyelenggara.
Kemudian, buat profil penyediaan baru untuk bundel id yang sama di portal penyediaan iOS (setelah Anda mengaktifkan dorongan)
Impor profil penyediaan baru di XCode, atur di pengaturan pembuatan aplikasi Anda.
Bangun, jalankan, itu bekerja.
Saya baru melakukannya.
Butuh saya 10 menit dari kesalahan untuk sukses.
sumber
XCode 6.1.1, dan beberapa akun pengembang apel
Jawaban lain untuk campuran yang sudah cukup komprehensif ini: Saya menemukan masalah ini lagi hari ini, dan kali ini karena saya mempunyai banyak akun apel. Saya perlu menambahkan akun pengembang kedua di XCode> Preferensi> Akun> +
Pastikan Kemampuan Push Notification dalam keadaan ON
Selanjutnya saya harus benar-benar secara eksplisit mengaktifkan Pembelian Dalam Aplikasi dalam aplikasi (saya tidak perlu melakukan ini sebelumnya). XCode> (jendela aplikasi)> Target> Kemampuan> Pembelian Dalam Aplikasi AKTIF (dan pada tahap ini saya diberi opsi untuk memilih sertifikat yang benar)
Perhatikan bahwa saya telah menambahkan sertifikat Push enabled dengan mengklik dua kali di Finder.
sumber
(Xcode 5) Nah, setelah menghabiskan satu jam saya menyelesaikan masalah saya. Bahkan jika Anda membuat kembali file penyediaan di Xcode 5, Anda harus memperbarui akun secara manual. Saya hanya mengubah file provisi di tab Organizer yang tidak berfungsi, Xcode terus membangun dengan file provisi yang lama.
Jadi pergilah ke
Kemudian segarkan file penyediaan Anda.
sumber
Masalah saya hanyalah saya menandatangani dengan profil penyediaan wildcard yang dikelola Xcode.
Setelah saya membuat profil khusus aplikasi (dan mengunduhnya, klik dua kali, dan memastikan Pengaturan Bangun saya menyebutnya), saya berhasil menerima token perangkat APNS.
sumber
Saya memiliki masalah yang sama dengan orang lain dan mencoba semua trik di atas, tidak ada yang berhasil. Saya bahkan menghapus dan mulai segar dengan akun pengembang yang berbeda.
Apa yang berhasil bagi saya pada akhirnya adalah
Saya tidak tahu apakah Anda dapat mengaktifkannya untuk aplikasi wildcard, tetapi setelah mencoba setidaknya 12 saran berbeda dan kehilangan beberapa hari saya harap ini membantu seseorang
sumber
Anda menyebutkan profil penyediaan tetapi saya tidak melihat penyebutan Profil Push Apple.
Untuk menggunakan Push, Anda harus memiliki profil push (ada dua, satu untuk pengembangan dan satu untuk rilis). Setelah Anda membuatnya, Anda harus memastikannya berisi sertifikat yang relevan (lihat bagian EDIT di bawah).
Ini adalah tutorial yang sangat baik yang akan memandu Anda melalui semua langkah:
http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12
Saya, atau siapa pun, akan butuh waktu berjam-jam untuk menulis jawaban terperinci yang menyeluruh seperti tutorial ini, jadi saya tidak akan berusaha, atau mengklaim karunia ketika tutorial ini sudah ada.
PS Saya yakin Anda tidak perlu hak lagi, ini adalah warisan.
EDIT: Anda juga harus memeriksa Anda memiliki profil yang diperlukan pada perangkat - pergi ke pengaturan, kemudian umum, profil, periksa profil Anda terdaftar, terutama profil push tentu saja. Anda juga dapat memeriksa ini dari bagian Organizer XCode. Dalam Penyelenggara ada dua bagian yang mengatakan Profil Penyedia - satu di bagian kiri atas di Perpustakaan (ini adalah profil dalam XCode yang Anda gunakan untuk menandatangani dll.) Anda juga akan melihat panggilan bagian Profil Penyedia untuk perangkat yang terhubung, ini adalah profil yang diinstal pada handset. Jika Anda tidak menginstalnya di handset, Anda dapat mengunduhnya dari situs web portal penyedia, lalu klik tombol Tambah di bagian bawah jendela Organizer.
Sementara di portal penyediaan Anda juga harus memeriksa bahwa Apple Push Profile menyertakan sertifikat: - klik Provisioning di menu sebelah kiri - Anda akan melihat daftar profil Anda, pilih untuk MENGEDIT profil push Apple - Anda akan melihat bagian sertifikat, dengan daftar pengembang atau penguji dll. Anda miliki di proyek Anda, pastikan kotak centang dicentang untuk mereka. - Anda juga akan melihat bagian perangkat, pastikan perangkat yang Anda uji telah ditambahkan.
Jika Anda memiliki profil lama di XCode atau pada perangkat hapus mereka dan unduh / menyegarkan / instal semua profil baru dari portal penyediaan
sumber
Lari ke masalah yang sama ini sendiri. Bagi saya, masalahnya adalah bahwa nama produk saya ($ TARGET_NAME) tidak dikapitalisasi dengan cara yang sama seperti yang disajikan dalam sertifikat yang diberikan oleh apel. Sebagai contoh, saya punya com.companyid.APNDemo sedangkan sertifikat Apple menggunakan com.companyid.apndemo.
Saya mengubah target saya menjadi huruf kecil dan berhasil. Catatan: Petunjuk bagi saya adalah pengaturan pemberian kode di Pengaturan Bangun ditetapkan ke sertifikat pengembang default saya; bukan profil penyediaan APNTest.
sumber
Banyak jawaban di atas benar. Namun, tampaknya ada lebih dari satu kemungkinan kesalahan saat berhadapan dengan ini.
Yang saya miliki adalah masalah kapitalisasi dengan ID Aplikasi saya. ID Aplikasi saya untuk beberapa alasan tidak dikapitalisasi tetapi aplikasi saya. Setelah saya membuat ulang ID Aplikasi dengan huruf besar yang benar, semuanya bekerja dengan lancar. Semoga ini membantu. Frustasi sekali.
PS jika masih tidak berhasil, cobalah mengedit Kode Identitas Penandatanganan secara manual dengan "edit". Ubah baris kedua dengan nama nama profil penyediaan yang benar.
sumber
Butuh waktu berjam-jam untuk menyelesaikannya. Mengingat bahwa seseorang menggunakan skrip khusus untuk menandatangani dan mengemas sementara yang lain menggunakan xcode sendiri, hanya ada satu cara untuk memeriksa apa yang berakhir di aplikasi Anda. Dump hak Anda dengan
codesign --display --entitlements :- path/to/MyApp.app
dan periksa
aps-environment
danapplication-identifier
.sumber
Kesalahan ini dapat terjadi ketika sertifikat Anda telah kedaluwarsa.
Solusinya adalah dengan memperbarui sertifikat dan menandatangani aplikasi dengan itu.
sumber
Anda perlu memastikan bahwa Anda memiliki dalam profil penyediaan Anda ( https://developer.apple.com/account/ios/profile/ ) profil Distribusi iOS.
Saat Anda mengunggah dari xCode ke App Store, pastikan Anda memiliki aps-environment di kepemilikan. Jika tidak, unduh dari Lihat Akun -> Lihat Detail -> Unduh Semua.
sumber
Saya punya masalah serupa. Saya telah terpental antara XCode 7 dan 8 karena berbagai alasan. Setelah Anda menggunakan 8 untuk membangun, Anda harus menggunakan 8. Saya cukup menggunakan Xcode 8 dan menerapkan beberapa perubahan yang disarankan di atas dan itu berhasil.
sumber
membuat ulang file sementara memperbaiki semua masalah saya.
sumber
Tampaknya ada sesuatu yang aneh dengan hak 'otomatis' di Xcode 4.6.
Ada file Entitlement.plist untuk setiap SDK di:
Solusi yang saya temukan adalah mengedit file ini dan menambahkan kunci aps-environment secara manual seperti:
Kemudian, Xcode menghasilkan file Xcent yang benar, yang berisi kunci aps-environment di:
Anda dapat menemukan di mana file Xcent Anda dibuat menggunakan Xcode's Log Navigator,
cari "ProcessProductPackaging".
Sayangnya, ini adalah satu-satunya cara yang saya temukan yang memperbaiki masalah ini .
(dan akhirnya bisa mendapatkan token push dengan benar sekarang)
Hanya ingin tahu apakah solusi lain yang lebih elegan tersedia.
Silakan lihat pertanyaan SO saya untuk detail lebih lanjut tentang itu:
Hak Xcode 4.6 otomatis tidak berfungsi - "no aps-environment valid"
sumber
Sebelum menghapus dan membuat ulang AppID / Profil, pastikan Perpustakaan dan Perangkat Anda memiliki profil yang sama (dan benar) diinstal.
Saya mulai melihat kesalahan ini setelah bermigrasi ke komputer baru. Push telah berfungsi dengan benar sebelum migrasi.
Masalahnya adalah (duh) bahwa saya belum mengimpor profil ke pustaka Xcode pada mesin baru (di Organiser / Perangkat di Library-> Provisioning Profiles).
Bagian yang membingungkan adalah bahwa PERANGKAT sudah memiliki profil yang tepat dan mereka muncul seperti yang diharapkan dalam pengaturan build, jadi semuanya tampak benar di sana, tetapi PERPUSTAKAAN XCode tidak memilikinya, jadi itu menandatangani aplikasi dengan ... ?? ?
sumber
Inilah yang diperbaiki untuk saya. (Saya sudah mencoba mengaktifkan / menonaktifkan kemampuan, membuat ulang profil penyediaan, dll).
Di tab Bangun Pengaturan , di Kepemilikan Penandatanganan Kode , file .entitlements saya tidak ditautkan untuk semua bagian. Setelah saya menambahkannya ke bagian Any SDK , kesalahan telah diatasi.
sumber
Saya mencoba semua jawaban yang tercantum di sini tetapi tidak ada yang memecahkan masalah saya. Dalam kasus saya kesalahan ini adalah karena kesalahan konyol saya dalam pembuatan Appid. Saya menggunakan Wildcard App ID daripada menggunakan Explicit App ID yang menyebabkan masalah
Jika Anda ingin aplikasi menerima pemberitahuan jarak jauh (pemberitahuan push), maka Anda perlu menggunakan ID Aplikasi Eksplisit , seperti com.tutsplus.push , alih-alih com.tutsplus. *
Silakan temukan ScreenShot,
sumber