← XPC

Görevler ve Olaylar

XPC Dokümantasyonu

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_register fonksiyonuna 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. NULL olabilir; bu durumda bağlantının hedef kuyruğu DISPATCH_TARGET_QUEUE_DEFAULT olur.
  • handler: Olay handler bloğu. Aldığı ilk parametre her zaman XPC_EVENT_KEY_NAME anahtarı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.