iOS uygulamaları yalnızca Apple'ın kendi sertifika altyapısıyla imzalanır. Dışarıdan bir CA'dan alınan OV/EV kod imzalama sertifikası iOS paketlerinde kullanılamaz; imza sertifikası Apple Developer Program üyeliği üzerinden oluşturulur.
Temel bileşenler
- Sertifika: Apple Development (test) ve Apple Distribution (yayın) türleri.
- App ID / Bundle ID: uygulamanın benzersiz tanımlayıcısı.
- Provisioning profile: sertifika, App ID, yetkiler ve (geliştirme için) cihaz listesini birbirine bağlar.
Adımlar
- Mac'te anahtar zinciri erişiminden veya Xcode'dan sertifika isteği (CSR) oluşturun.
- Developer portalında sertifikayı oluşturup indirin ve anahtar zincirine ekleyin.
- Uygun provisioning profile'ı oluşturun veya Xcode'un otomatik imzalamasını kullanın.
- Xcode'da Archive alıp App Store Connect'e yükleyin.
Komut satırından kontrol
security find-identity -v -p codesigning
codesign -dv --verbose=4 Uygulama.app
security cms -D -i embedded.mobileprovision
İlk komut kullanılabilir imza kimliklerini listeler. Son komut profilin içeriğini gösterir.
Sık hatalar
- "No signing certificate found": özel anahtar yüklü Mac'te değil; sertifikayı .p12 olarak dışa aktarıp diğer makineye alın.
- Profilin süresi dolmuş veya sertifikayla eşleşmiyor.
- Bundle ID ile profildeki App ID uyuşmuyor.
CI ortamında imzalama
Otomatik derleme makinesinde sertifikayı geçici bir anahtar zincirine aktarıp iş bitince silmek yaygın yaklaşımdır. .p12 dosyası ve parolası gizli değişken olarak saklanmalı, günlüklere yazılmamalıdır. Sertifikalar ve profillerin son kullanma tarihini takvime ekleyin; süresi dolan bir profil, yayın günü derlemenin başarısız olmasına neden olabilir.
CI ortamında .p12 dosyasını ve parolasını gizli değişkenlerde tutun. Masaüstü yazılımınız için Windows imzası gerekiyorsa kod imzalama sertifikalarına bakın; konuyla ilgili diğer yazılar bilgi bankasında.
Özet: iOS imzalama tamamen Apple'ın sertifika ve profil sistemi üzerinden yürür. Sertifika, profil ve Bundle ID üçlüsünün uyumu sağlandığında imzalama hatalarının büyük kısmı ortadan kalkar.