Arka plan etkinlikleri zamanlama ve IOKit olaylarına yanıt verme.
XPC Etkinlikleri
API Koleksiyonu | XPC
Sistemin yürüteceği arka plan etkinliklerini zamanlayın.
XPC etkinlikleri, uygulamanızın bakım görevleri gibi arka plan işlerini uygun zamanlarda gerçekleştirmek üzere sisteme kaydetmesine olanak tanır. Sistem güç, ağ ve yük koşullarını değerlendirerek etkinliği en uygun zamanda çalıştırır.
Kayıt
// Bir etkinliği sisteme kaydet
func xpc_activity_register(
_ identifier: UnsafePointer<CChar>,
_ criteria: xpc_object_t,
_ handler: xpc_activity_handler_t)
// Belirli tanımlayıcıya sahip etkinliğin kaydını sil
func xpc_activity_unregister(_ identifier: UnsafePointer<CChar>)
XPC_ACTIVITY_CHECK_IN— Aynı tanımlayıcıyla daha önce kaydedilmiş bir etkinlik için sisteme giriş yapma sabiti.xpc_activity_registerfonksiyonuna kriter sözlüğü olarak iletilebilir (ör.launchdözellik listesinden bir etkinlik).
Tip tanımları:
xpc_activity_t— Bir XPC etkinlik nesnesi.xpc_activity_handler_t— Bir XPC etkinliği çalışmaya uygun hale geldiğinde çağrılan blok.
Durum Yönetimi
Bir etkinlik aşağıdaki durumlardan birinde olabilir:
| Durum Sabiti | Açıklama | | --- | --- | | XPC_ACTIVITY_STATE_CHECK_IN | Etkinlik sisteme giriş yapmıştır | | XPC_ACTIVITY_STATE_WAIT | Etkinlik çalışma fırsatı beklemektedir | | XPC_ACTIVITY_STATE_RUN | Etkinlik kriterlerine göre çalışmaya uygundur | | XPC_ACTIVITY_STATE_DEFER | Etkinliğin kriterlerini yeniden karşılayana kadar beklemesi gerekir | | XPC_ACTIVITY_STATE_CONTINUE | Etkinlik, handler bloğunun dönüşünün ötesinde işlemine devam eder | | XPC_ACTIVITY_STATE_DONE | Etkinlik tamamlanmıştır |
Durum fonksiyonları:
// Mevcut durumu oku
func xpc_activity_get_state(_ activity: xpc_activity_t) -> xpc_activity_state_t
// Durumu güncelle (DEFER, CONTINUE veya DONE olarak ayarlanabilir)
func xpc_activity_set_state(_ activity: xpc_activity_t, _ state: xpc_activity_state_t) -> Bool
// Etkinliğin ertelenip ertelenmeyeceğini test et
func xpc_activity_should_defer(_ activity: xpc_activity_t) -> Bool
Uygulama, handler bloğu içinde xpc_activity_get_state ile mevcut durumu kontrol edebilir. xpc_activity_set_state ile yalnızca DEFER, CONTINUE veya DONE durumlarına geçiş yapılabilir.
Yürütme Kriterleri
// Kriterleri al
func xpc_activity_copy_criteria(_ activity: xpc_activity_t) -> xpc_object_t?
// Kriterleri değiştir
func xpc_activity_set_criteria(_ activity: xpc_activity_t, _ criteria: xpc_object_t)
Zamanlama Sabitleri
| Sabit | Açıklama | | --- | --- | | XPC_ACTIVITY_REPEATING | Tekrarlayan bir etkinlik olup olmadığını gösteren Boolean değer | | XPC_ACTIVITY_DELAY | Başlamadan önce beklenecek saniye cinsinden gecikme | | XPC_ACTIVITY_GRACE_PERIOD | Zamanlamanın daha agresif hale gelmeden önceki ek süre (saniye) |
Zaman Aralıkları
XPC_ACTIVITY_INTERVAL özelliği ile etkinliğin istenen çalışma aralığı saniye cinsinden belirtilir. Kolaylık için önceden tanımlanmış sabitler mevcuttur:
| Sabit | Aralık | | --- | --- | | XPC_ACTIVITY_INTERVAL_1_MIN | 1 dakika | | XPC_ACTIVITY_INTERVAL_5_MIN | 5 dakika | | XPC_ACTIVITY_INTERVAL_15_MIN | 15 dakika | | XPC_ACTIVITY_INTERVAL_30_MIN | 30 dakika | | XPC_ACTIVITY_INTERVAL_1_HOUR | 1 saat | | XPC_ACTIVITY_INTERVAL_4_HOURS | 4 saat | | XPC_ACTIVITY_INTERVAL_8_HOURS | 8 saat | | XPC_ACTIVITY_INTERVAL_1_DAY | 1 gün | | XPC_ACTIVITY_INTERVAL_7_DAYS | 7 gün |
Öncelik
Etkinlik önceliği XPC_ACTIVITY_PRIORITY String özelliği ile belirlenir:
| Sabit | Açıklama | | --- | --- | | XPC_ACTIVITY_PRIORITY_MAINTENANCE | Bakım önceliği — en düşük öncelik, ideal uygunluk koşulları bekler | | XPC_ACTIVITY_PRIORITY_UTILITY | Yardımcı program önceliği — bakımdan daha yüksek öncelik |
Güç Tüketimi
| Sabit | Varsayılan | Açıklama | | --- | --- | --- | | XPC_ACTIVITY_ALLOW_BATTERY | Bakım: false, Yardımcı: true | Pil gücündeyken çalıştırmaya izin verir | | XPC_ACTIVITY_REQUIRE_SCREEN_SLEEP | — | Yalnızca ekran uyku modundayken çalıştırır | | XPC_ACTIVITY_PREVENT_DEVICE_SLEEP | — | Pil gücündeyken sistemin uyumasını engeller |
Kullanımdan Kaldırılanlar
XPC_ACTIVITY_REQUIRE_BATTERY_LEVEL— Etkinliğin çalışması için gereken minimum pil yüzdesi.XPC_ACTIVITY_REQUIRE_HDD_SPINNING— Yalnızca sabit disk dönerken çalıştırma (eski Mac'ler için).
XPC Olayları
API Koleksiyonu | XPC
IOKit olaylarına ve bildirimlerine talep üzerine yanıt verin.
Olay İşleme
// Akış olayları aldığında çağrılacak olay handler'ını ayarla
func xpc_set_event_stream_handler(
_ stream: UnsafePointer<CChar>,
_ targetq: dispatch_queue_t?,
_ handler: @escaping @Sendable (xpc_object_t) -> Void)
Aynı olay akışı için bu fonksiyonun birden fazla kez çağrılması tanımsız davranışa (undefined behavior) yol açar.
Parametreler:
- stream: Bu handler'ın çağrılacağı olay akışının adı.
- targetq: Olay handler bloğunun gönderileceği GCD kuyruğu.
NULLolabilir; bu durumda bağlantının hedef kuyruğuDISPATCH_TARGET_QUEUE_DEFAULTolur. - handler: Olay handler bloğu. Aldığı ilk parametre her zaman
XPC_EVENT_KEY_NAMEanahtarını içeren bir sözlüktür.
Sabitler
// Olay sözlüğünden olay adını almak için kullanılan anahtar
nonisolated(unsafe) let XPC_EVENT_KEY_NAME: UnsafePointer<CChar>
XPC_EVENT_KEY_NAME, bir XPC olay sözlüğünü sorgulamak için kullanılır ve olayı tanımlayan dize (string) değerini döndürür. Bu değer, launchd.plist dosyasında XPC olayına atanan isme karşılık gelir.