Provisioning Profile Nedir?
iOS uygulaması geliştiren herkesin hayatında en az bir kez karşılaştığı terimlerden biridir. Apple tarafından belirlenen tanıma bir bakalım:
Provisioning profile, yazılımcıları ve cihazları yetkilendirilmiş bir iPhone Development Team’e bağlayan ve ilgili cihazların test için kullanımını etkinleştiren, dijital varlıklardan oluşan bir koleksiyonudur.
Buradan da anlaşılacağı gibi profile, yazılımcıların hangi cihazlar üzerinde, hangi uygulamayı debug edeceğinin belirlenmesini sağlamaktadır.
Peki neden Provisioning Profile’a ihtiyacımız var?
Android’de olduğu gibi apk atarak uygulama yükleme durumu iOS uygulamalarının geliştiriminde mümkün değildir. Çünkü Apple’ın güvenlik politikaları gereği, ilgili uygulama Apple tarafından imzalanmış olmalıdır. Fakat, uygulama geliştirimi yapılırken, Apple’a sunmadan önce cihazlarda da test/debug edilmesi gereklidir. Bu nedenle cihaz ve geliştirim hesabını birbirine bağlayacak bir sistem/dosya gereklidir. Bu dosyaya Provisioning Profile dosyası denir. Geliştirim süresince, uygulamayı hangi cihazların çalıştırabileceğine ve bu uygulamanın, hangi uygulama servislerine (Push NotificationNFC vs.) erişebileceği profile dosyası tarafından belirlenebilir. Apple hesabından indirilen provisioning profile dosyası app bundle içerisine entegre edildiğinde, uygulama artık imzalanmış (code-signed) hale gelir. Provisioning profile dosyasında, test edilmesi istenen her bir cihaz dahil edilmelidir. Eğer provisioning profile içerisindeki bilgiler belirlenen kriterler ile eşleşmezse, cihaz ilgili uygulamayı çalıştıramaz.
Provisioning Profile içerisinde hangi bilgiler bulunur?
- Geliştirim sertifikaları (Development Certificates): Yazılımcı tarafından, uygulamanın fiziksel cihaz üzerinde çalıştırılarak test edilmesi içindir
- Benzersiz cihaz kimlikleri (Unique Device Ids): Uygulamanın çalıştırılacağı cihaz id’leridir.
- Uygulama kimliği (App ID): Bir development team tarafından geliştirilen bir veya daha fazla uygulamayı belirlemek için kullanılan string ifadedir. Örneğin WhatsApp uygulaması için,
com.facebook.whatsapp
veya birden fazla uygulama içincom.facebook.*
şeklinde olabilir)
Provisioning profile içerisinde belirtilen cihazlar, yalnızca içerisinde kendi iPhone geliştirim sertifikaları bulunan yazılımcılar tarafından test edilmek için kullanılabilir. Bir cihaz, birden fazla provisioning profile içerebilir.
Bir uygulama, iPhone cihazı üzerinde debug edilmek için yüklenirken hangi aşamalardan geçer?
- Provisioning profile dosyası, Mac’teki keychain’de yer alan developer sertifikasını işaret eder.
- XCode bu sertifikayı kullanarak kodu imzalar.
- Cihazın UUID’sinin, provisioning profile’da yer alan cihaz id’leri arasında var olup olmadığı kontrol edilir.
- Provisioning profile içerisindeki AppID değeri, uygulamanın bundle identifier’ı içerip içermediği kontrol edilir.
- App ID ile ilişkilendirilen entitlement’lar (NFC, Push notification vb.) kontrol edilir.
- Uygulamayı imzalamak için kullanılan private key’in sertifika içerisindeki public key ile ilişkisi kontrol edilir.
Buradaki görsele bakarak AppID’nin kontrol edildiğini, sertifikanın doğrulandığını, Team’in eşleştiğini, capabilities ve entitlements’ın da uyumlu olduğunu görebilirsiniz.
Tüm bu kontrol işlemlerinden başarılı bir şekilde geçildiğinde imzalanmış binary dosya cihaza iletilir ve aynı provisioning profile’a sahip olduğu kontrol edilir ve uygulama çalıştırılır. Eğer bu adımlarda herhangi biri dahi geçilemezse, uygulama yüklenemez ve gri renkte bir uygulama ikonu ile karşılaşırsınız:
Development ve Distribution provisioning profile’ları arasındaki fark nedir?
Distribution provisioning profile’da herhangi bir device ID’si yer almamaktadır. Eğer register edilmiş bir cihaz kümesine özel olarak uygulama dağıtılmak istenirse, Ad-Hoc profile kullanılarak bu işlem gerçekleştirilebilir.
Distribution Profile, uygulamanın App Store üzerinden dağıtımı yapılırken kullanılır. Apple’a iletilen review aşamasından geçen uygulama, Apple tarafından imzalanır ve herhangi bir cihaz üzerinde çalıştırılabilir hale gelir.
Code signing nedir?
Code signing (kod imzalama) sayesinde iOS, imzalanmış olan uygulamayı tanır ve imzalama aşamasından yükleme aşamasına kadar geçen sürede uygulama paketinde bir değişiklik olmadığını garanti edilmiş olur. Signing Identity ise Apple tarafından sizin için oluşturulan public ve private key’leri içerir. Bu key ikilisi kullanılarak uygulamanın imzalanması sağlanır.
Certificate Signing Request (CSR) nedir?
Certificate Signing Request (Sertifika imzalama isteği), bir sertifika edinmek için Certificate Authority’e başvuru yapılırken verilen bir metin dosyasıdır.
iOS uygulama geliştiriminde ise CSR oluşturarak Apple’dan bir sertifika talebinde bulunabilir. CSR oluşturulurken public ve private key’ler de oluşturulur. CSR dosyası oluşturulan public key’i içerir ve Certificate Authority, CSR’ı kullanarak bir sertifika üretir. Üretilen sertifika yalnızca CSR üretilirken oluşturulan private key ile çalışabilir. Eğer private key kaybolursa, sertifika da geçersiz olur.
Apple’dan sertifika alınırken süreç nasıl işler?
- Keychain Access uygulaması kullanılarak bir CSR isteği yapılır.
- Keychain uygulaması bir private key bir de certSigningRequest dosyası oluşturur. Private key, keychain içerisinde saklanır. certSigningRequest ise Apple’a upload edilir.
- Apple, ilgili isteği doğrular ve bir sertifika oluşturur. Sertifika içerisinde sisteminize indirebileceğiniz bir public key yer alır. Dosya indirildikten sonra çift tıklanarak Keychain Access uygulaması içerisinde açılır. Sertifika Keychain’e eklenir ve public key, Keychain’deki private key ile eşleşerek Code Signing Identity’i oluşturur.
- Son olarak, uygulama yükleme esnasında, uygulamanın imzalanırken kullanıldığı private key, public key ile eşleştirilir. Eğer bir hata oluşursa uygulama yüklenemez.
CSR ile sertifika oluşturma aşamaları nasıl gerçekleşir?
Sonuç olarak
Provisioning profile, belirlenen bundleId’ye sahip uygulama paketinin, hangi cihazlar üzerinde, hangi geliştiriciler tarafından çalıştırılacağının belirlenmesini sağlar.
Bu yazım hakkında soru ve görüşlerinizi aşağıdaki yorumlar kısmından yazabilirsiniz. Bana destek vermek için alkış simgesine tıklayabilirsiniz. Sonraki yazımda görüşmek üzere…