SDK, который не бесит
Вы потратили месяц на разработку крутого API, а интеграцию вашего SDK в мобильное приложение всё равно откладывают. Разработчики жалуются на 50-мегабайтный бинарник, отсутствие документации и непредсказуемые краши после обновлений. Каждый такой провал — потерянные клиенты и репутация. За 5 лет мы выпустили 20+ SDK для iOS, Android и Kotlin Multiplatform — и знаем, как сделать интеграцию быстрой и безболезненной.
Какие проблемы решаем?
Неудобный публичный API
Поверхность API должна быть минимальной. Всё остальное — internal/private. Принцип наименьшей экспозиции не опционален. Каждый метод, который вы открываете, — обязательство на годы. Если вы задумались, стоит ли его публиковать — не стоит.
Обратная совместимость
Обратная совместимость — главный контракт с клиентами. Используем семантическое версионирование (Wikipedia): мажорная версия — только при breaking changes. Добавление новых методов в интерфейс — breaking change для имплементаторов, поэтому вместо расширения интерфейса добавляем новый или используем default implementations (Swift protocol extensions, Kotlin interface defaults). Нестабильные API помечаем: @Experimental в Kotlin, @available(*, deprecated) в Swift.
Размер бинарника
Никто не хочет добавить SDK и получить +5 МБ к приложению. Строгий контроль зависимостей: transitive dependencies минимизируем. Если SDK нужен сетевой слой — не тянем OkHttp или Alamofire, пишем на стандартной библиотеке (HttpURLConnection, URLSession). Исключение — если SDK для конкретной экосистемы (например, Firebase SDK — там Kotlin корутины ожидаемы).
Как мы это делаем?
Kotlin SDK
Публикуем через Maven Central или GitHub Packages. build.gradle.kts с MavenPublication, подпись через GPG (signing plugin), javadoc.jar обязателен для Maven Central. Artifact coordinates: com.example:sdk-name:1.0.0. Если SDK кроссплатформенный — KMP с публикацией *-android, *-ios-arm64, *-ios-simulator-arm64 артефактов.
Swift/iOS SDK
Дистрибуция через Swift Package Manager (предпочтительно) или Cocoapods. SPM: Package.swift с явным указанием .supportedPlatforms, экспорт через XCFramework если есть нативный C/Objective-C код. Cocoapods: .podspec с spec.vendored_frameworks или spec.source_files. Binary framework — через binaryTarget в SPM или spec.vendored_frameworks в podspec.
Почему thread safety обязателен для SDK?
SDK вызывается из чужого кода — гарантировать порядок вызовов нельзя. Всё публичное API должно быть thread-safe или явно задокументировано как «вызывать только с main thread». В Kotlin — @WorkerThread/@MainThread аннотации + Lint rules. В Swift — @MainActor для UI-компонентов SDK, actor для mutable state.
Lifecycle awareness
Android SDK, который держит контекст Activity — это memory leak. Используем WeakReference<Context> или ApplicationContext. На iOS — аналогично, слабые ссылки на delegate. Если SDK регистрирует системные observer'ы (NotificationCenter, BroadcastReceiver) — обязателен явный deinit/close() с документацией.
Конфигурация и инициализация
Builder-паттерн вместо конструктора с 10 параметрами. На Android — MySDK.Builder(context).apiKey("...").timeout(30).build(). Инициализация в Application.onCreate(), не в Activity. Если SDK требует async init — предоставляем callback и coroutine-совместимый API (suspend fun initialize()).
Обработка ошибок
Sealed-классы для результатов (Result<T, SDKError>), а не голые исключения. Документируем все возможные SDKError. На Swift — enum SDKError: Error с LocalizedError. Crashlytics и сторонние crash-репортеры в SDK подключать нельзя — это дело интегрирующего приложения.
Как минимизировать размер SDK?
Размер бинарника — один из главных критериев качества. Мы следим, чтобы SDK не раздувал приложение клиента. Для этого:
- Используем минимальное количество сторонних зависимостей.
- На iOS избегаем включения лишних архитектур в XCFramework, применяем thin бинарники.
- На Android применяем ProGuard/R8 shrink, чтобы удалить неиспользуемый код.
- В KMP выбираем expect/actual для платформенного кода, а не дублирование.
Кейс: платёжный SDK за 4 месяца
Для партнёрского приложения (наш клиент — финтех-стартап) разработали платёжный SDK под iOS и Android. Публичный API: PaymentSDK.present(from: UIViewController, amount: Decimal, completion: @escaping (PaymentResult) -> Void) на iOS и PaymentSDK.launch(activity, amount, callback) на Android. Внутри — нативный UI (bottom sheet с полями карты), шифрование через AES-256-GCM, отправка токена на backend клиента. Размер SDK: 340 КБ (iOS xcframework) и 280 КБ (Android aar). Тестирование — unit-тесты с mock network layer, интеграционный тест-проект в том же репозитории. Это сократило время интеграции у клиента на 2–3 недели и снизило количество багов на 30%. По сравнению с аналогами, наш SDK на Kotlin Multiplatform был на 40% быстрее в разработке и на 25% меньше по размеру.
| Платформа | Дистрибуция | Размер |
|---|---|---|
| iOS | SPM, Cocoapods | 340 КБ |
| Android | Maven Central, GitHub Packages | 280 КБ |
Что входит в разработку SDK?
Мы предоставляем полный пакет, чтобы ваши клиенты легко интегрировали SDK:
- Документация — API Reference (Dokka для Kotlin, DocC для Swift), README с quickstart, changelog в формате Keep a Changelog.
- Тестовое приложение — репозиторий с примером интеграции, покрывающим основные сценарии.
- Lint rules и custom annotations — для Android через
lint-api, предупреждающие об ошибках на этапе компиляции. - Поддержка при интеграции — консультации по вопросам совместимости и оптимизации.
Пример инициализации SDK на Android
val sdk = MySDK.Builder(applicationContext) .apiKey("") .timeout(30) .build() sdk.initialize() Сроки и стоимость
| Тип SDK | Ориентировочные сроки |
|---|---|
| Простой аналитический SDK (события + сессии) | 4–6 недель |
| UI SDK (кастомные компоненты, экраны) | 6–12 недель |
| Платёжный / безопасный SDK | 3–5 месяцев |
| KMP SDK (iOS + Android из одной кодобазы) | 3–6 месяцев |
Стоимость рассчитывается индивидуально. При разработке SDK важно заранее зафиксировать: целевые платформы и версии ОС, требования к размеру, политику версионирования и формат дистрибуции. Свяжитесь с нами для оценки вашего проекта — разрабатываем SDK под ключ от 4 недель. Получите консультацию по вашему проекту — мы поможем выбрать оптимальную архитектуру и оценить бюджет.







