Sijil pembangun iOS: provisioning profile dan Expo
Oleh Mehdi Azizi
Diterbitkan pada , 9 min
Sijil membuktikan siapa yang menandatangani app anda, profil menentukan app dan iPhone mana. Dengan Expo, EAS mencipta dan memperbaharui kedua-duanya.
Sijil pembangun iOS membuktikan siapa yang menandatangani app anda. Provisioning profile, atau profil peruntukan, menghubungkan sijil itu dengan satu app tertentu dan menentukan di mana app itu dibenarkan berjalan. Dengan Expo, anda hampir tidak perlu menghasilkannya secara manual: EAS mencipta, menyimpan dan memperbaharuinya apabila anda melancarkan build.
Memahami fungsi setiap fail tetap berguna. Pada hari sebuah build enggan dipasang atau penghantaran tersekat, pengetahuan inilah yang menjimatkan sehari kerja anda. Panduan ini mengupas empat elemen tersebut, tempoh hayatnya, had Apple dan ralat biasa, berserta penyelesaian bagi setiap satu.
Saya menerbitkan app iOS saya dengan Expo dan EAS, termasuk Solys dan TradaZen. Laluan penuh ada dalam menerbitkan app iOS tanpa Mac. Di sini, kita buka enjin tandatangan.
Mengapa Apple mewajibkan tandatangan
App iOS mesti ditandatangani untuk dipasang pada iPhone atau dihantar ke App Store Connect. Tandatangan menjamin bahawa app itu datang daripada pembangun yang dikenali Apple dan tiada sesiapa mengubahnya sejak itu.
Untuk App Store, ada satu perkara yang melegakan. Menurut nota teknikal TN3161 Apple, App Store memeriksa bahawa sijil pengedaran anda sah semasa penghantaran, kemudian menandatangani semula app itu, yang tidak lagi bergantung pada tarikh luput sijil anda. Jadi sijil anda mesti sah semasa penghantaran, bukan sepanjang hayat app.
Empat elemen yang perlu anda tahu
Dokumentasi Expo tentang kelayakan menyenaraikan tiga untuk iOS: sijil pengedaran, profil dan kunci pemberitahuan push. Saya tambah App ID, kerana tanpanya tiada profil boleh wujud.
Sijil pengedaran
Inilah tandatangan pembangun anda. Bantuan Apple tentang sijil membezakan dua jenis:
- Apple Development digunakan untuk menjalankan app anda pada peranti anda semasa pembangunan. Ia milik seorang individu.
- Apple Distribution digunakan untuk mengedar ke peranti ujian tertentu atau menghantar ke App Store Connect. Ia milik pasukan, dan hanya pemegang akaun atau admin boleh menciptanya.
Sijil pengedaran tidak terikat pada mana-mana app: sijil yang sama menandatangani semua app anda. Ia disertai kunci peribadi, dan kunci itulah yang membolehkan tandatangan. Menurut TN3161, sijil Apple biasanya sah selama setahun dari tarikh ia dicipta.
App ID
App ID mengenal pasti app anda dalam profil. Ia menggunakan bundle identifier anda, contohnya com.example.myapp (contoh rekaan). Menurut bantuan Apple, ia juga membawa senarai keupayaan yang dibenarkan: pemberitahuan push, App Groups, Sign in with Apple…
Dengan Expo, ini ialah medan ios.bundleIdentifier dalam konfigurasi anda. Pilih sekali untuk selamanya: ia mesti sama di mana-mana, dalam konfigurasi anda dan dalam App Store Connect. App ID tidak luput. Dan menurut dokumentasi Expo tentang keupayaan iOS, EAS menyelaraskan keupayaannya dengan konfigurasi anda pada setiap build.
Profil peruntukan
Profil ialah penghubungnya. Ia mengandungi App ID, sijil dan, bergantung pada jenisnya, senarai peranti yang dibenarkan. Tiga jenis berkaitan dengan anda:
- Development: app ujian anda pada peranti yang anda daftarkan.
- Ad hoc: build yang boleh dipasang pada senarai peranti tertentu, setiap satu dikenal pasti melalui UDID. Inilah "pengedaran dalaman" EAS.
- App Store: untuk App Store Connect dan TestFlight. Ia tidak mengandungi senarai peranti, jelas nota TN3125.
Setiap profil ada tarikh luput: biasanya tidak lebih daripada setahun menurut Apple, 12 bulan menurut Expo.
Kunci pemberitahuan push (APNs)
Kunci APNs membenarkan pelayan anda, atau pelayan Expo, menghantar pemberitahuan ke app anda. Ia fail .p8 yang hanya boleh dimuat turun sekali: Apple tidak menyimpannya dalam akaun anda. Satu kunci boleh digunakan untuk semua app anda, dan ia tidak pernah luput.
Jadual ringkasan
| Elemen | Kegunaan | Tempoh | Siapa yang mengurus dengan Expo |
|---|---|---|---|
| Sijil pengedaran | Menandatangani build | Biasanya setahun | EAS, selepas log masuk |
| App ID | Mengenal pasti app anda | Tidak luput | Anda, kemudian EAS |
| Profil App Store | Menghantar ke Apple | Sehingga 12 bulan | EAS |
| Profil ad hoc | Memasang pada iPhone anda | Sehingga 12 bulan | EAS dan peranti anda |
| Kunci push APNs | Menghantar pemberitahuan | Tidak luput | EAS atau anda |
| Profil akaun percuma | Menguji melalui Xcode | 7 hari | Xcode, bukan EAS |
"Anda, kemudian EAS": anda memilih bundle identifier, EAS menguruskan keupayaan. "EAS dan peranti anda": anda mendaftarkan setiap iPhone ujian, EAS menghasilkan profil. Baris terakhir berkaitan akaun Apple percuma: menurut bantuan Apple tentang akaun, profilnya luput 7 hari selepas dicipta.
Had Apple yang perlu anda tahu
- Sijil pengedaran: sangat sedikit bagi setiap akaun. Bantuan Apple menyebut satu sahaja bagi setiap jenis pengedaran dan setiap pasukan, jadual Expo menyebut had 2. Ingat peraturannya: jangan cipta sijil baharu pada setiap build atau pada setiap komputer.
- Kunci APNs: maksimum 2 bagi setiap akaun, menurut Expo.
- Profil: tiada had, menurut Expo.
- Peranti: sehingga 100 bagi setiap keluarga produk dan setiap tahun keahlian, menurut bantuan Apple tentang peranti. Menyahaktifkan peranti tidak membebaskan slot. Kiraan kembali kepada 100 pada permulaan tahun keahlian berikutnya, jika anda membuang peranti tersebut.
Apa yang EAS lakukan untuk anda
Menurut halaman Expo tentang kelayakan terurus, build iOS pertama anda menawarkan untuk menjana apa yang belum ada. Anda log masuk ke akaun Apple Developer anda, EAS mencipta sijil pengedaran, profil dan kunci push, kemudian menyimpannya di pelayannya. Build seterusnya menggunakannya semula.
Tiga perkara berguna:
- Kata laluan Apple anda kekal di mesin anda. Halaman keselamatan Expo menyatakan ia tidak dihantar ke pelayannya, dan kelayakan yang disimpan disulitkan.
eas credentialsmenunjukkan semuanya: sijil, profil, kunci push. Arahan ini juga membolehkan anda menggantikan atau membuangnya.- Memadam dalam EAS tidak memadam di Apple. Untuk membebaskan slot, anda perlu membatalkan (revoke) di portal Apple.
Anda juga boleh kekal mengawal dengan kelayakan tempatan: fail credentials.json menunjuk ke sijil anda (.p12) dan profil anda (.mobileprovision). Expo meminta fail ini ditambah ke .gitignore. Ini peraturan yang sama seperti untuk kunci API app Expo: rahsia tidak pernah masuk ke repositori.
Ralat biasa dan cara menyelesaikannya
Profil luput
Build ad hoc membawa profilnya sendiri: apabila profil luput, app tidak lagi boleh dibuka pada iPhone ujian anda. Di App Store pula, Expo mengesahkan bahawa tarikh luput tidak memberi kesan kepada app dalam produksi. Penyelesaian: lancarkan build semula. EAS menjana profil baharu, atau anda melakukannya sendiri dengan eas credentials. Kemudian pasang semula build baharu pada peranti anda.
Jangan keliru dengan TestFlight: build TestFlight luput selepas 90 hari, tidak kira sijil anda. Butirannya ada dalam TestFlight untuk menguji app iPhone anda.
Sijil luput atau dibatalkan
Apple jelas: jika keahlian anda sah, app anda yang sudah ada di App Store tidak terjejas. Namun, anda tidak lagi boleh menghantar build yang ditandatangani dengan sijil itu. Build yang telah dihantar tetapi belum diserahkan untuk semakan boleh ditandakan Invalid Binary jika sijilnya dibatalkan. Dan profil yang mengandungi sijil yang dibatalkan menjadi tidak sah.
Penyelesaian: cipta sijil baharu melalui eas credentials atau pada build seterusnya, kemudian biarkan EAS menghasilkan semula profil. Dan jangan sesekali membatalkan sijil yang berfungsi secara refleks.
Peranti tiada dalam profil ad hoc
Pautan pemasangan berfungsi pada peranti anda, tetapi tidak pada iPhone penguji. Puncanya: dokumentasi Expo tentang pengedaran dalaman menerangkan bahawa hanya peranti yang ada dalam profil semasa build boleh memasang app.
Penyelesaian:
- Daftarkan peranti dengan
eas device:create. - Lancarkan build semula dalam mod interaktif, log masuk ke akaun Apple anda, supaya EAS mengemas kini profil. Atau tandatangan semula build sedia ada dengan
eas build:resign, tanpa menyusun semula semuanya. - Dalam integrasi berterusan, mod bukan interaktif menggunakan semula profil tanpa mengemas kini senarainya. Tambah pilihan
--refresh-ad-hoc-provisioning-profile.
Pada akaun baharu atau yang baru diperbaharui, Apple boleh mengambil masa 24 hingga 72 jam untuk memproses peranti baharu. Jadi build pertama yang memasukkannya mungkin gagal: tunggu, kemudian lancarkan semula.
Had sijil dicapai
Apple enggan mencipta sijil pengedaran baharu. Selalunya, sijil lama masih tertinggal: dicipta melalui Xcode pada Mac lain atau oleh perkhidmatan build lain. Gunakan semula sijil sedia ada jika anda ada fail .p12nya. Jika tidak, batalkan sijil yang tidak lagi digunakan di portal Apple. Pembatalan tidak menjejaskan app anda yang sudah diterbitkan, tetapi ia menjadikan profil yang mengandunginya tidak sah.
"Provisioning profile doesn't include signing certificate"
Mesej Xcode ini bermaksud profil tidak mengandungi sijil yang kunci peribadinya ada di mesin anda. Punca biasa: mencampurkan tandatangan automatik Xcode dengan kelayakan EAS. Pilih satu sumber kebenaran sahaja: build EAS dengan kelayakan terurus, atau kelayakan tempatan, tetapi bukan kedua-duanya.
Pemberitahuan terputus selepas kunci dibatalkan
Jika anda membatalkan kunci APNs anda, Expo memberi amaran bahawa semua app yang menggunakannya tidak lagi menerima pemberitahuan. Cipta kunci baharu dan muat naik dengan eas credentials. Token Expo Push pengguna anda tidak berubah.
Keupayaan ditambah, profil tidak sah
Mengaktifkan perkhidmatan seperti pemberitahuan push atau App Groups menjadikan profil tidak sah: anda perlu menjananya semula. Dengan EAS, penyelarasan keupayaan dibuat pada setiap build. Jika profil masih ditolak, eas credentials membolehkan anda menjana yang baharu.
Langkah seterusnya selepas tandatangan
Build yang ditandatangani hanyalah satu langkah. Halaman app, tangkapan skrin, privasi dan penghantaran untuk semakan dihimpunkan dalam menerbitkan aplikasi di App Store. Jika anda belum ada keahlian, mulakan dengan akaun pembangun Apple. Dan untuk faham mengapa saya mengesyorkan Expo kepada pemula, baca React Native dan Expo untuk app mudah alih.
Jika anda sedang bersedia untuk penerbitan pertama
Sebelum penghantaran pertama anda, buat diagnostik percuma: ia memberitahu apa yang benar-benar menyekat projek anda dan menghantar senarai semak anti-penolakan Apple saya.
Untuk membina app, menyambungkan langganan dan menerbitkannya tanpa bergelut dengan tandatangan, iOS & Android Kit mengikuti laluan empat langkah dengan kod permulaan app saya, mengikut rentak anda.
Soalan lazim
Apakah itu provisioning profile?
Ia fail yang membenarkan app anda berjalan atau dihantar ke Apple. Ia menghubungkan App ID, sijil dan, bergantung pada jenisnya, senarai peranti. Profil App Store tidak mengandungi peranti, profil ad hoc menyenaraikan beberapa peranti.
Adakah sijil pembangun iOS percuma?
Ia tiada harga berasingan: sijil pengedaran termasuk dalam Apple Developer Program, pada harga 99 $ setahun. Dengan akaun Apple percuma, Xcode membenarkan anda menguji pada maksimum 3 peranti, tetapi profil luput selepas 7 hari dan penerbitan tidak mungkin.
Berapa lama sijil pengedaran Apple bertahan?
Biasanya setahun dari tarikh ia dicipta, menurut Apple. Profil peruntukan juga bertahan maksimum 12 bulan. Kunci pemberitahuan push pula tidak pernah luput.
Apa yang berlaku jika sijil pengedaran saya luput?
Tiada apa-apa kepada app anda yang sudah ada di App Store, selagi keahlian anda sah. Anda cuma tidak boleh lagi menghantar build baharu yang ditandatangani dengan sijil itu. Dengan EAS, sijil baharu dicipta pada build seterusnya atau dengan eas credentials.
Adakah saya perlukan Mac untuk mencipta sijil iOS?
Tidak, jika anda menggunakan EAS. Anda log masuk ke akaun Apple anda dari baris arahan, dan EAS menjana sijil dan profil, sama ada di Windows atau Linux. Tanpa EAS, kaedah klasik menggunakan Xcode atau Keychain Access pada Mac.
Berapa banyak peranti boleh dimuatkan dalam profil ad hoc?
Akaun anda boleh mendaftarkan sehingga 100 iPhone bagi setiap tahun keahlian, dan jumlah yang sama untuk setiap keluarga peranti lain. Peranti yang dinyahaktifkan masih dikira. Untuk menguji dengan lebih ramai orang, gunakan TestFlight.

