---
title: "iOS SDK'sını yükle ve yapılandır"
description: "Abonelik tabanlı iOS uygulamalarına Adapty SDK'sını adım adım kurma rehberi."
---

Adapty SDK, uygulamanıza sorunsuz entegrasyon için iki temel modül içerir:

- **Core Adapty**: Adapty'nin uygulamanızda düzgün çalışması için zorunlu olan bu SDK'dır.
- **AdaptyUI**: Kolayca çapraz platform paywall'lar oluşturmak için kullanılan, kod gerektirmeyen [Adapty Paywall Builder](adapty-paywall-builder)'ı kullanıyorsanız ihtiyaç duyacağınız isteğe bağlı modüldür.

:::tip
Adapty SDK'sının mobil bir uygulamaya nasıl entegre edildiğinin gerçek dünya örneğini görmek ister misiniz? Paywall gösterme, satın alma yapma ve diğer temel işlevler dahil olmak üzere tam kurulumu gösteren [örnek uygulamalarımıza](https://github.com/adaptyteam/AdaptySDK-iOS/tree/master/Examples) göz atın.
:::

Eksiksiz bir uygulama için şu videoları da izleyebilirsiniz:

<Tabs groupId="current-os" queryString>
<TabItem value="swiftui" label="iOS (SwiftUI)" default> 

<div style={{ textAlign: 'center' }}>
<iframe width="560" height="315" src="https://www.youtube.com/embed/cSChHc8k2zA?si=KhNFhqXccIzYwTcm" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div>
</TabItem>
<TabItem value="uikit" label="iOS (UIKit)" default> 

<div style={{ textAlign: 'center' }}>
<iframe width="560" height="315" src="https://www.youtube.com/embed/WEUnlaAjSI0?si=sjXKVVb56tEHDKzJ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div>
</TabItem>
</Tabs>

## Gereksinimler \{#requirements\}

SDK teknik olarak core modül için iOS 13.0+'ı desteklese de pratikte iOS 15.0+ gereklidir; çünkü:
- Tüm StoreKit 2 özellikleri iOS 15.0+ gerektirir
- AdaptyUI modülü yalnızca iOS 15.0+ için çalışır

---
no_index: true
---
import Callout from '../../../components/Callout.astro';

<Callout type="info">
SDK'yı yüklemek, Adapty kurulumunun 5. adımıdır. Uygulamanızda satın almalar çalışmadan önce uygulamanızı mağazalara bağlamanız, ardından Adapty Kontrol Paneli'nde ürünler, bir paywall ve bir placement oluşturmanız gerekir. [Hızlı başlangıç kılavuzu](quickstart) tüm gerekli adımları anlatmaktadır.
</Callout>

## Adapty SDK'sını Yükle \{#install-adapty-sdk\}

[![Release](https://img.shields.io/github/v/release/adaptyteam/AdaptySDK-iOS.svg?style=flat&logo=apple)](https://github.com/adaptyteam/AdaptySDK-iOS/releases)

<Tabs>
<TabItem value="spm" label="Swift Package Manager (önerilen)" default>
Xcode'da **File** -> **Add Package Dependency...** yolunu izleyin. Paket bağımlılığı ekleme adımları Xcode sürümüne göre farklılık gösterebileceğinden, gerekirse Xcode belgelerine başvurun.

1. Depo URL'sini girin:
   ```
   https://github.com/adaptyteam/AdaptySDK-iOS.git
   ```
2. Sürümü seçin (en güncel kararlı sürüm önerilir) ve **Add Package**'a tıklayın.
3. **Choose Package Products** penceresinde ihtiyacınız olan modülleri seçin:
   - **Adapty** (core modül)
   - **AdaptyUI** (isteğe bağlı - yalnızca Paywall Builder kullanmayı planlıyorsanız)
   :::note
   Not:
     - [Kids mode](kids-mode)'u etkinleştirmek için **Adapty** yerine **Adapty_KidsMode**'u seçin.
     - Listeden başka paket seçmeyin; ihtiyacınız olmayacak.
   :::
4. Kurulumu tamamlamak için **Add Package**'a tıklayın.
5. **Kurulumu doğrulayın:** Proje gezgininizde **Package Dependencies** altında "Adapty" (ve seçtiyseniz "AdaptyUI") görünmelidir.

</TabItem>
   
<TabItem value="cocoapods" label="CocoaPods (eski)" default>

:::info

CocoaPods artık bakım modundadır ve geliştirmesi resmi olarak durdurulmuştur. [Swift Package Manager](sdk-installation-ios#install-adapty-sdk)'a geçmenizi öneririz.

:::

1. `Podfile`'ınıza Adapty'yi ekleyin. İhtiyacınız olan modülleri seçin:

    1. **Adapty** zorunlu modüldür.
    2. **AdaptyUI**, [Adapty Paywall Builder](adapty-paywall-builder)'ı kullanmayı planlıyorsanız ihtiyaç duyacağınız isteğe bağlı modüldür.

   ```shell showLineNumbers title="Podfile"
   pod 'Adapty'
   pod 'AdaptyUI'  # optional module needed only for Paywall Builder
   ```

2. Çalıştırın:

   ```sh showLineNumbers title="Shell"
   pod install
   ```

Bu komut uygulamanız için bir `.xcworkspace` dosyası oluşturur. Bundan sonraki tüm geliştirme işlemleri için bu dosyayı kullanın.
</TabItem>
</Tabs>

## Adapty SDK'sının Adapty modülünü etkinleştir \{#activate-adapty-module-of-adapty-sdk\}

Adapty SDK'sını uygulama kodunuzda etkinleştirin.

:::note
Adapty SDK'sının uygulamanızda yalnızca bir kez etkinleştirilmesi gerekir.
:::

**Public SDK Key**'inizi almak için:

1. Adapty Kontrol Paneli'ne gidin ve [**App settings → General**](https://app.adapty.io/settings/general) sayfasına geçin.
2. **Api keys** bölümünden **Public SDK Key**'i kopyalayın (Secret Key'i değil).
3. Koddaki `"YOUR_PUBLIC_SDK_KEY"` ifadesini bununla değiştirin.

:::important

- Adapty'yi başlatırken **Public SDK key** kullandığınızdan emin olun; **Secret key** yalnızca [sunucu tarafı API](getting-started-with-server-side-api) için kullanılmalıdır.
- **SDK key**'leri her uygulama için benzersizdir; birden fazla uygulamanız varsa doğru olanı seçtiğinizden emin olun.
:::

<Tabs groupId="current-os" queryString>
<TabItem value="swiftui" label="SwiftUI">

```swift showLineNumbers

@main
struct YourApp: App {
  init() {
    // Configure Adapty SDK
    let configurationBuilder = AdaptyConfiguration
      .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY") // Get from Adapty dashboard
  
   Adapty.logLevel = .verbose // recommended for development and the first production release
    
    let config = configurationBuilder.build()
    
    // Activate Adapty SDK asynchronously
    Task {
      do {
        try await Adapty.activate(with: config)
      } catch {
        // Handle error appropriately for your app
        print("Adapty activation failed: ", error)
      }
    }
    
    var body: some Scene {
      WindowGroup {
        // Your content view
      }
    }
  }
}
```

</TabItem>
<TabItem value="swift" label="UIKit" default>

```swift showLineNumbers
// In your AppDelegate class:
// If you only use an AppDelegate, place the following code in the
// application(_:didFinishLaunchingWithOptions:) method.

// If you use a SceneDelegate, place the following code in the
// scene(_:willConnectTo:options:) method.

Task {
  do {
    let configurationBuilder = AdaptyConfiguration
      .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY") // Get from Adapty dashboard
      .with(logLevel: .verbose) // recommended for development and the first production release
    
    let config = configurationBuilder.build()
    try await Adapty.activate(with: config)
  } catch {
    // Handle error appropriately for your app
    print("Adapty activation failed: ", error)
  }
}
```

</TabItem>
</Tabs>

Şimdi uygulamanızda paywall'ları ayarlayın:

- [Adapty Paywall Builder](adapty-paywall-builder) kullanıyorsanız önce aşağıdaki [AdaptyUI modülünü etkinleştir](#activate-adaptyui-module-of-adapty-sdk) adımını tamamlayın, ardından [Paywall Builder hızlı başlangıç kılavuzunu](ios-quickstart-paywalls) takip edin.
- Kendi paywall arayüzünüzü oluşturuyorsanız [özel paywall'lar için hızlı başlangıç kılavuzuna](ios-quickstart-manual) bakın.

## Adapty SDK'sının AdaptyUI modülünü etkinleştir \{#activate-adaptyui-module-of-adapty-sdk\}

[Paywall Builder](adapty-paywall-builder) kullanmayı planlıyorsanız ve [AdaptyUI modülünü yüklediyseniz](sdk-installation-ios#install-adapty-sdk), AdaptyUI'yı da etkinleştirmeniz gerekir.

:::important
Kodunuzda AdaptyUI'yı etkinleştirmeden önce core Adapty modülünü etkinleştirmeniz zorunludur.
:::

<Tabs groupId="current-os" queryString>
<TabItem value="swiftui" label="SwiftUI">

```swift showLineNumbers title="Swift"

@main
struct YourApp: App {
  init() {
    // ...ConfigurationBuilder steps
    
    // Activate Adapty SDK asynchronously
    Task {
      do {
        try await Adapty.activate(with: config)
        try await AdaptyUI.activate()
      } catch {
        // Handle error appropriately for your app
        print("Adapty activation failed: ", error)
      }
    }
    
    // main body...
  }
}
```
</TabItem>
<TabItem value="uikit" label="UIKit" default>

```swift showLineNumbers title="UIKit"
// If you only use an AppDelegate, place the following code in the
// application(_:didFinishLaunchingWithOptions:) method.

// If you use a SceneDelegate, place the following code in the
// scene(_:willConnectTo:options:) method.

Task {
   do {
      let configurationBuilder = AdaptyConfiguration
         .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY") // Get from Adapty dashboard
         .with(logLevel: .verbose) // recommended for development

   let config = configurationBuilder.build()
   try await Adapty.activate(with: config)
   try await AdaptyUI.activate()
      } catch {
      // Handle error appropriately for your app
      print("Adapty activation failed: ", error)
   }
}
```
</TabItem>
</Tabs>

:::tip
İsteğe bağlı olarak, AdaptyUI'yı etkinleştirirken [paywall'lar için varsayılan önbellekleme ayarlarını geçersiz kılabilirsiniz](#set-up-media-cache-configuration-for-adaptyui).
:::

## İsteğe bağlı kurulum \{#optional-setup\}

### Loglama \{#logging\}

#### Loglama sistemini yapılandırın \{#set-up-the-logging-system\}

Adapty, neler olduğunu anlamanıza yardımcı olmak için hataları ve diğer önemli bilgileri loglar. Aşağıdaki log seviyeleri mevcuttur:

| Seviye     | Açıklama                                                     |
| ---------- | ------------------------------------------------------------ |
| `error`    | Yalnızca hatalar loglanır                                    |
| `warn`     | Hatalar ve kritik hata oluşturmamakla birlikte dikkat edilmesi gereken SDK mesajları loglanır |
| `info`     | Hatalar, uyarılar ve çeşitli bilgi mesajları loglanır        |
| `verbose`  | Fonksiyon çağrıları, API sorguları gibi hata ayıklamada faydalı olabilecek tüm ek bilgiler loglanır |

```swift showLineNumbers
 let configurationBuilder = AdaptyConfiguration
         .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY") 
         .with(logLevel: .verbose) // recommended for development
```

#### Log mesajlarını yönlendirin \{#redirect-the-logging-system-messages\}

Adapty'nin log mesajlarını kendi sisteminize göndermek veya bir dosyaya kaydetmek istiyorsanız `setLogHandler` metodunu kullanın ve içinde özel loglama mantığınızı uygulayın. Bu handler, mesaj içeriği ve önem seviyesi içeren log kayıtları alır.

```swift showLineNumbers title="Swift"
Adapty.setLogHandler { record in
    writeToLocalFile("Adapty \(record.level): \(record.message)")
}
```

### Veri politikaları \{#data-policies\}

Adapty, siz açıkça göndermediğiniz sürece kullanıcılarınızın kişisel verilerini depolamaz; ancak mağaza veya ülke yönergelerine uymak için ek veri güvenliği politikaları uygulayabilirsiniz.

#### IDFA toplama ve paylaşmayı devre dışı bırakın \{#disable-idfa-collection-and-sharing\}

Adapty modülünü etkinleştirirken IDFA toplama ve paylaşmayı devre dışı bırakmak için `idfaCollectionDisabled` değerini `true` olarak ayarlayın.

Bu parametreyi App Store İnceleme Yönergelerine uymak veya IDFA uygulamanız için gerekmediğinde App Tracking Transparency isteminin tetiklenmesini önlemek amacıyla kullanın. Varsayılan değer `false`'dur. IDFA toplamayla ilgili daha fazla bilgi için [Analytics entegrasyonu](analytics-integration#disable-collection-of-advertising-identifiers) bölümüne bakın.

```swift showLineNumbers
let configurationBuilder =
    AdaptyConfiguration
        .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
        .with(idfaCollectionDisabled: true)
```

#### IP toplama ve paylaşmayı devre dışı bırakın \{#disable-ip-collection-and-sharing\}

Adapty modülünü etkinleştirirken kullanıcı IP adresi toplama ve paylaşmayı devre dışı bırakmak için `ipAddressCollectionDisabled` değerini `true` olarak ayarlayın. Varsayılan değer `false`'dur.

Bu parametreyi kullanıcı gizliliğini artırmak, bölgesel veri koruma yönetmeliklerine (GDPR veya CCPA gibi) uymak ya da IP tabanlı özellikler uygulamanız için gerekmediğinde gereksiz veri toplanmasını azaltmak amacıyla kullanın.

```swift showLineNumbers
let configurationBuilder =
    AdaptyConfiguration
        .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
        .with(ipAddressCollectionDisabled: true)
```

#### AdaptyUI'da paywall'lar için medya önbelleği yapılandırması \{#set-up-media-cache-configuration-for-adaptyui\}

AdaptyUI yapılandırmasının isteğe bağlı olduğunu unutmayın. AdaptyUI modülünü yapılandırma olmadan da etkinleştirebilirsiniz. Ancak yapılandırmayı kullanıyorsanız tüm parametreler zorunludur.

```swift showLineNumbers title="Swift"

// Configure AdaptyUI
        let adaptyUIConfiguration = AdaptyUI.Configuration(
            mediaCacheConfiguration: .init(
                memoryStorageTotalCostLimit: 100 * 1024 * 1024,
                memoryStorageCountLimit: .max,
                diskStorageSizeLimit: 100 * 1024 * 1024
            )
        )

        // Activate AdaptyUI
        AdaptyUI.activate(configuration: adaptyUIConfiguration)
```
Parametreler:

| Parametre                   | Zorunluluk | Açıklama                                                     |
| :-------------------------- | :--------- | :----------------------------------------------------------- |
| memoryStorageTotalCostLimit | zorunlu    | Depolamanın bayt cinsinden toplam maliyet limiti.            |
| memoryStorageCountLimit     | zorunlu    | Bellek depolamasının öğe sayısı limiti.                      |
| diskStorageSizeLimit        | zorunlu    | Depolamanın disk üzerindeki bayt cinsinden dosya boyutu limiti. 0 sınır olmadığı anlamına gelir. |

### İşlem tamamlama davranışı \{#transaction-finishing-behavior\}

:::info
Bu özellik SDK 3.12.0 sürümünden itibaren kullanılabilir.
:::

Adapty varsayılan olarak başarılı doğrulamanın ardından işlemleri otomatik olarak tamamlar. Ancak gelişmiş işlem doğrulaması (sunucu tarafı makbuz doğrulama, sahtekarlık tespiti veya özel iş mantığı gibi) gerektiriyorsanız SDK'yı manuel işlem tamamlama kullanacak şekilde yapılandırabilirsiniz.

```swift showLineNumbers title="Swift"
let configurationBuilder = AdaptyConfiguration
    .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
    .with(transactionsFinishBehavior: .manual) // .auto is the default
```

İşlemlerin nasıl tamamlanacağına dair daha fazla ayrıntı için [kılavuza](ios-transaction-management) bakın.

### Yedekten geri yüklemede verileri temizle \{#clear-data-on-backup-restore\}

`clearDataOnBackup` değeri `true` olarak ayarlandığında SDK, uygulamanın iCloud yedekten geri yüklendiğini algılar ve önbelleğe alınmış profil bilgileri, ürün ayrıntıları ve paywall'lar dahil yerel olarak depolanan tüm SDK verilerini siler. SDK ardından temiz bir durumla başlatılır. Varsayılan değer `false`'dur.

:::note
Yalnızca yerel SDK önbelleği silinir. Apple ile yapılan işlem geçmişi ve Adapty sunucularındaki kullanıcı verileri değişmeden kalır.
:::

```swift showLineNumbers
let configurationBuilder = AdaptyConfiguration
    .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
    .with(clearDataOnBackup: true) // default – false
```

## Sorun Giderme \{#troubleshooting\}

#### Tuist ile Swift 6 eşzamanlılık hatası \{#swift-6-concurrency-error-with-tuist\}

[Tuist](https://tuist.dev/) ile derleme yaparken Swift 6 katı eşzamanlılık derleme hataları görebilirsiniz. Tipik belirtiler arasında `AdaptyUIBuilderLogic` içindeki `@Sendable` özellik uyuşmazlıkları veya benzer modüller arası Sendability hataları yer alır.
Bu durum, Tuist'in SPM paketlerinden Xcode projeleri oluştururken `swift-tools-version: 6.0` ayarını korumamasından kaynaklanır. Bunun sonucunda bazı Adapty hedefleri (`Adapty`, `AdaptyUI`, `AdaptyUIBuilder`) Swift 5 kurallarıyla, diğerleri ise Swift 6 ile derlenir ve bu da modüller arası `@Sendable` uyumsuzluklarına yol açar.

**Çözüm**: Adapty SDK **3.15.5** veya sonraki bir sürüme yükseltin; bu sürüm, karışık Swift dil versiyonlarından bağımsız olarak sorunu giderir.

**Geçici çözüm**: Yükseltme yapamıyorsanız, Tuist yapılandırmanızda üç Adapty hedefinin tamamı için Swift 6'yı açıkça ayarlayın:
```swift showLineNumbers
targetSettings: [
  "Adapty": .init().swiftVersion("6"),
  "AdaptyUI": .init().swiftVersion("6"),
  "AdaptyUIBuilder": .init().swiftVersion("6"),
]
```

#### CocoaPods SWIFT_VERSION geçersiz kılmasından kaynaklanan Swift 6 derleme hataları \{#swift-6-build-errors-caused-by-podfile-swift_version-override\}

[CocoaPods](sdk-installation-ios#install-adapty-sdk) ile iOS için derleme yaparken Adapty pod hedeflerinde Swift 6 derleme hataları görebilirsiniz. Tipik belirtiler arasında `AdaptyUIBuilderLogic` içinde `@Sendable` uyuşmazlıkları, Adapty türlerinde eksik `Sendable` uyumu veya aktör izolasyon hataları yer alır.
Adapty pod'ları `s.swift_version = '6.0'` tanımlar ve derlenmek için Swift 6 gerektirir. Kendi uygulama kodunuz Swift 5'te kalabilir — yalnızca Adapty pod hedefleri (`Adapty`, `AdaptyUI`, `AdaptyUIBuilder`, `AdaptyLogger`) Swift 6 ile derlenmelidir.

En yaygın neden, `Podfile`'ınızdaki her pod hedefi için `SWIFT_VERSION`'ı yeniden yazan bir `post_install` hook'udur:

```ruby showLineNumbers title="Podfile"
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '5.9'
    end
  end
end
```
**Düzeltme**: Adapty pod hedeflerini geçersiz kılmanın dışında tutun:

```ruby showLineNumbers title="Podfile"
post_install do |installer|
  installer.pods_project.targets.each do |target|
    next if %w[Adapty AdaptyUI AdaptyUIBuilder AdaptyLogger].include?(target.name)
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '5.9'
    end
  end
end
```

Ardından `pod install` komutunu çalıştırın ve yeniden derleyin.

Doğrulamak için `Pods.xcodeproj` dosyasını açın, `Adapty` pod hedefini seçin → **Build Settings** → **Swift Language Version**. Değerin **Swift 6** olması gerekir.