Düşük seviyeli süreçler arası iletişim (IPC) mekanizmasına erişin.
Genel Bakış
XPC, temel süreçler arası iletişim için hafif bir mekanizma sağlar. Uygulamanız adına iş yapan hafif yardımcı araçlar (*XPC servisleri*) oluşturmanıza olanak tanır. launchd sistem arka plan süreci (daemon) bu servisleri yönetir — talep üzerine başlatır, boşta kalınca kapatır ve çökerlerse yeniden başlatır. XPC servislerinin avantajları şunlardır:
- Birden fazla süreçten gelen işleri tek merkezde toplamak veya paylaşılan bir kaynağa erişimi kontrol etmek.
- İşi devredip istemcinin yaşam döngüsünün ötesinde devam ettirmek.
- Farklı işlevler için erişim kapsamını daraltarak ayrıcalık izolasyonu sağlamak.
Bu servislerden yararlanan istemciler, süreç sınırları boyunca iletişim kurmak için eşler arası (peer-to-peer) XPC bağlantılarına güvenir. Her bağlantının iki tarafı vardır: Gelen bağlantı isteklerini yanıtlayıp görevleri gerçekleştiren *dinleyici* (listener/sunucu) ve bir dinleyiciye *oturum* (session) oluşturarak bağlantı başlatan *istemci*. İstemci dinleyiciyle bağlantı kurduktan sonra mesaj gönderir ve servisten yanıt alır.
Oluşturduğunuz XPC servisinin türü, gerçekleştireceği işin gereksinimlerine bağlıdır:
| Servis Tipi | Süreç Ortamı | | --- | --- | | Launch Agent | Oturum açan kullanıcı başına bir süreç; ilgili kullanıcı olarak çalışır. Hızlı kullanıcı geçişi ile birden fazla kullanıcı oturum açarsa her birinin kendi süreci vardır. | | Launch Daemon | Sistem genelinde tek bir süreç; root kullanıcısı olarak yüksek ayrıcalık düzeyiyle çalışır. Kullanıcı süreçlerine bağlantı başlatamaz ancak onlardan gelen isteklere yanıt verebilir. | | XPC Service | Servisin her istemcisi başına bir süreç; istemcinin ömrüne bağlıdır. Bir istemci servise bağlandığında launchd servisi başlatır. İstemci çıkınca servis de sona erer. Bu tip servisler uygulama veya çerçeve paketinin (bundle) içine yerleştirilir. |
Not: LaunchAgent ve LaunchDaemon tipleri özel kurulum ve yapılandırma gerektirir. macOS 13 ve sonrası sürümlerde Service Management çerçevesi bu servis tiplerinin paketlenmesi ve kurulması için yeni bir yapı sunar.
XPC servisleri C, Swift veya Objective-C ile oluşturulabilir. Foundation çerçevesini kullanan projeler için NSXPCConnection süreçler arası şeffaf uzak yöntem çağrısına olanak tanıyan yüksek seviyeli, nesne yönelimli bir API sağlar. Foundation'a bağlanamayan projeler için XPC çerçevesindeki daha düşük seviyeli libSystem API'leri kullanılır.
*iOS 17.4+, iPadOS 17.4+, Mac Catalyst 13.0+, macOS 10.10+ sürümlerinde kullanılabilir.*
Konular
Süreçler Arası İletişim
Dinleyici yapılandırma, istemci oturumu oluşturma ve süreçler arasında mesaj alışverişi.
- XPC Servisleri Oluşturma: Bir dinleyici yapılandırın, istemci oturumu kurun ve süreçler arasında mesaj alışverişi yapın.
- XPCListener: Süreç sınırları boyunca istemciler için görevler gerçekleştiren tip.
- XPCSession: Bir sunucu sürecine mesaj gönderen tip.
- XPCReceivedMessage: Oturum ile dinleyici arasında gönderilen mesajı temsil eden tip.
C API Referansı
C ve Objective-C projeleri için düşük seviyeli dinleyici ve oturum API'leri.
- xpc_listener_t: Süreç sınırları boyunca görevler gerçekleştiren C tipi.
- xpc_session_t: Sunucu sürecine mesaj gönderen C tipi.
- XPCEndpoint: Serileştirilmiş bağlantı nesnesi.
- XPCPeerRequirement: Eş doğrulama gereksinimleri.
- XPC Bağlantıları: Bağlantı tabanlı API'lerle servis bağlantıları oluşturma ve yönetme.
Görevler ve Olaylar
Arka plan etkinlikleri zamanlama ve IOKit olaylarına yanıt verme.
- XPC Etkinlikleri: Sistemin yürüteceği arka plan etkinliklerini zamanlayın.
- XPC Olayları: IOKit olaylarına ve bildirimlerine talep üzerine yanıt verin.
XPC Nesneleri
İlkel tipler, koleksiyonlar ve daha fazlasını temsil eden nesnelere veri kapsülleme.
- Nesne Tipleri:
xpc_object_t,xpc_type_tve tip sorgulamaları. - Koleksiyonlar: Sözlükler (
xpc_dictionary) ve diziler (xpc_array). - İlkel Tipler: Boolean, tam sayı, kayan nokta, string, veri, tarih, UUID, dosya tanıtıcı, paylaşılan bellek ve daha fazlası.
Yardımcı Araçlar
Hata ayıklama araçları ve sabitler.
- xpc_debugger_api_misuse_info(): XPC'nin çağıran süreci neden sonlandırdığını açıklayan bilgi.
- XPC_API_VERSION: XPC API sürümü.