Gatekeeper, macOS'ta internetten indirilen uygulamaların imzalı ve Apple tarafından notarize edilmiş olup olmadığını kontrol eder. Önemli nokta şudur: macOS dağıtımı için genel CA'lardan alınan OV/EV kod imzalama sertifikaları değil, Apple Developer Program üyeliğiyle verilen Developer ID Application sertifikası kullanılır.
Ön koşullar
- Apple Developer Program üyeliği
- Anahtar zincirinde kurulu Developer ID Application sertifikası
- Xcode komut satırı araçları
İmzalama ve notarization
codesign --force --options runtime --timestamp \
--sign "Developer ID Application: Firma Adi (TEAMID)" MyApp.app
ditto -c -k --keepParent MyApp.app MyApp.zip
xcrun notarytool submit MyApp.zip --keychain-profile "profil" --wait
xcrun stapler staple MyApp.app
--options runtime Hardened Runtime'ı açar; notarization için gereklidir. stapler bildirim biletini uygulamaya ekler, böylece çevrimdışı kullanıcıda da doğrulama çalışır.
Doğrulama
codesign --verify --deep --strict --verbose=2 MyApp.app
spctl --assess --type execute -vv MyApp.app
spctl çıktısında kaynağın Notarized Developer ID olarak görünmesi beklenir.
Sık hatalar
- İçteki yardımcı ikili dosyaların imzalanmaması; önce içtekileri, sonra ana paketi imzalayın.
- Zaman damgası eksikliği nedeniyle notarization reddi.
- Hardened Runtime'ın kapalı olması.
- Geçersizleşen sertifika sonrası uygulamanın açılmaması; yeniden imzalayın.
Windows ve macOS farkı
Windows dünyasında yayıncı kimliği, bağımsız bir CA'nın doğruladığı kuruluş bilgisine dayanır; macOS'ta ise güven zinciri Apple'ın kendi kök altyapısına bağlıdır. Çok platformlu bir ürün yayınlıyorsanız her platformun imza gereksinimini ayrı bir kalem olarak sürüm planınıza ekleyin. Notarization işlemi genellikle dakikalar içinde tamamlanır ancak süre değişebilir; bu yüzden sürüm hattınızda bekleme adımı için zaman aşımı değeri belirleyin.
Windows tarafında yayın yapıyorsanız aynı ürünü kod imzalama sertifikası ile ayrıca imzalamanız gerekir; macOS ve Windows imza altyapıları birbirinden bağımsızdır.
Özet: macOS'ta güven zinciri Apple'ın notarization sürecinden geçer. İmzalama, Hardened Runtime ve stapler adımları birlikte uygulandığında Gatekeeper uyarısı olmadan sorunsuz açılan bir uygulama elde edersiniz.