← TipKit

Test ve Yardımcı Tipler

TipKit Dokümantasyonu

İpuçlarını test etme, hata yönetimi ve yardımcı yapılar.


Test API'leri

TipKit, geliştirme ve test sürecinde ipuçlarının görüntülenme davranışını kontrol etmek için çeşitli geçersiz kılma işlevleri sunar.

Öncelik Sıralaması

Test işlevleri birbiriyle çakıştığında aşağıdaki öncelik sırasına göre değerlendirilir:

| Öncelik | Test İşlevi | | --- | --- | | 1. (En yüksek) | showTipsForTesting(_:) | | 2. | hideTipsForTesting(_:) | | 3. | showAllTipsForTesting() | | 4. (En düşük) | hideAllTipsForTesting() |

showAllTipsForTesting()

Tip Yöntemi | TipKit

Tüm ipuçlarını, görüntülenme kuralı uygunluğuna veya gösterim sıklığı durumuna bakılmaksızın gösterir.

static func showAllTipsForTesting()

Bu işlev ayrıca başlatma argümanıyla da çağrılabilir: -com.apple.TipKit.ShowAllTips 1

İpucu durumları, bu geçersiz kılma ile görüntülenirken geçersiz kılındıktan sonra otomatik olarak available durumuna geri döner — bu, sunum ve kapatma işlemlerinin tekrar tekrar test edilmesini sağlar.

@main
struct LandmarkTips: App {
    init() {
        do {
            #if DEBUG
            Tips.showAllTipsForTesting()
            #endif
            try Tips.configure()
        }
        catch {
            print("TipKit başlatılırken hata: \(error.localizedDescription)")
        }
    }
}

showTipsForTesting(_:)

Tip Yöntemi | TipKit

Belirtilen ipuçlarını, görüntülenme kuralı uygunluğuna veya gösterim sıklığı durumuna bakılmaksızın gösterir.

static func showTipsForTesting(_ tips: [any Tip.Type])

Başlatma argümanı: -com.apple.TipKit.ShowTips FindTrailheadTip,SlopeProfileTip

#if DEBUG
Tips.showTipsForTesting([FindTrailheadTip.self, SlopeProfileTip.self])
#endif

hideAllTipsForTesting()

Tip Yöntemi | TipKit

Tüm ipuçlarını, görüntülenme kuralı uygunluğuna bakılmaksızın gizler.

static func hideAllTipsForTesting()

Başlatma argümanı: -com.apple.TipKit.HideAllTips 1

#if DEBUG
Tips.hideAllTipsForTesting()
#endif

hideTipsForTesting(_:)

Tip Yöntemi | TipKit

Belirtilen ipuçlarını, görüntülenme kuralı uygunluğuna bakılmaksızın gizler.

static func hideTipsForTesting(_ tips: [any Tip.Type])

Başlatma argümanı: -com.apple.TipKit.HideTips FindTrailheadTip,SlopeProfileTip

#if DEBUG
Tips.hideTipsForTesting([FindTrailheadTip.self, SlopeProfileTip.self])
#endif

resetDatastore()

Tip Yöntemi | TipKit

İpuçları veri deposunu sıfırlar — tüm ipucu durumlarını, olay bağışlarını ve parametre değerlerini temizler.

static func resetDatastore() throws
#if DEBUG
try Tips.resetDatastore()
#endif

AnyTip

Yapı | TipKit

*iOS 17.0+, iPadOS 17.0+, Mac Catalyst 17.0+, macOS 14.0+, tvOS 17.0+, visionOS 1.0+, watchOS 10.0+*

Tip-silinmiş (type-erased) ipucu değeri.

struct AnyTip

AnyTip, belirli Tip tipini gizleyerek farklı ipucu tiplerini tek bir koleksiyonda tutmanıza veya genel amaçlı ipucu işleme API'leri oluşturmanıza olanak tanır.

Uyum: Identifiable, Sendable, Tip


TipKitError

Yapı | TipKit

*iOS 17.0+, iPadOS 17.0+, Mac Catalyst 17.0+, macOS 14.0+, tvOS 17.0+, visionOS 1.0+, watchOS 10.0+*

Yerelleştirilmiş TipKit hatası.

struct TipKitError

| Hata | Açıklama | | --- | --- | | invalidPredicateValueType | Geçersiz yüklem değer tipi | | missingGroupContainerEntitlements | Grup konteyneri yetkilendirmeleri eksik | | tipsDatastoreAlreadyConfigured | İpuçları veri deposu zaten yapılandırılmış |

Özellikler:

var description: String { get }

Uyum: Equatable, Error, Hashable, LocalizedError, Sendable


TipOption

Protokol | TipKit

*iOS 17.0+, iPadOS 17.0+, Mac Catalyst 17.0+, macOS 14.0+, tvOS 17.0+, visionOS 1.0+, watchOS 10.0+*

İpucu davranışlarını özelleştirmek için kullanılan protokol.

protocol TipOption

TipOption protokolüne uyumlu yerleşik yapılar:

| Yapı | Açıklama | | --- | --- | | MaxDisplayCount | Maksimum gösterim sayısı | | MaxDisplayDuration | Maksimum gösterim süresi | | IgnoresDisplayFrequency | Gösterim sıklığını yok sayma |

İpuçlarında options özelliği aracılığıyla kullanılır:

struct MyTip: Tip {
    var options: [any TipOption] {
        MaxDisplayCount(5)
        MaxDisplayDuration(120.0)
    }
}

Tips Numaralandırması

Numaralandırma | TipKit

*iOS 17.0+, iPadOS 17.0+, Mac Catalyst 17.0+, macOS 14.0+, tvOS 17.0+, visionOS 1.0+, watchOS 10.0+*

TipKit işlevselliği için ad alanı.

enum Tips

Tips numaralandırması, tüm TipKit yapılandırma, test ve yardımcı tipleri için üst düzey ad alanı görevi görür.

Alt Tipler

| Tip | Açıklama | | --- | --- | | Tips.Action | İpucu eylemi; ipucu görünümünde düğme olarak görünür | | Tips.Rule | Görüntülenme koşulu | | Tips.Event | Tekrarlanabilir kullanıcı tanımlı eylem | | Tips.Parameter | Uygulama durumu izleme | | Tips.Status | İpucu durumu numaralandırması | | Tips.InvalidationReason | Geçersiz kılma nedeni numaralandırması | | Tips.ConfigurationOption | Yapılandırma seçeneği | | Tips.DonationTimeRange | Bağış zaman aralığı | | Tips.DonationLimit | Bağış sınırı (iOS 26+) | | Tips.EmptyDonation | Boş olay bağışı | | Tips.ParameterOption | Parametre özelleştirmesi |

Status Numaralandırması

İpucunun mevcut görüntülenme uygunluk durumunu tanımlar:

| Durum | Açıklama | | --- | --- | | .available | İpucu görüntülenmeye uygun | | .pending | İpucu görüntülenmeye uygun değil | | .invalidated(reason) | İpucu artık geçerli değil |

InvalidationReason Numaralandırması

İpucunun neden kalıcı olarak geçersiz kılındığını açıklar:

| Neden | Açıklama | | --- | --- | | .actionPerformed | Kullanıcı ipucunun açıkladığı eylemi gerçekleştirdi | | .tipClosed | Kullanıcı ipucu görünümünü açıkça kapattı | | .displayCountExceeded | Maksimum gösterim sayısı aşıldı | | .displayDurationExceeded | Maksimum gösterim süresi aşıldı (iOS 18+) |

Action Yapısı

İpucu görünümünde düğme olarak görünen eylem.

struct Action : Identifiable, Sendable

Özellikler:

| Özellik | Tip | Açıklama | | --- | --- | --- | | id | String | Eylem tanımlayıcısı; belirtilmezse index değeri atanır | | index | Int? | Eylemin sıra numarası | | label | () -> Text | Eylem etiketini döndüren closure | | handler | () -> Void | Eylem tetiklendiğinde çağrılan closure |

Başlatıcılar:

// String etiketli
init(id: String? = nil, title: some StringProtocol,
     perform handler: @escaping () -> Void = {})

// Text closure etiketli
init(id: String? = nil, perform handler: @escaping () -> Void = {},
     _ label: @escaping () -> Text)