Генератор QR-кодов на Swift: библиотека EFQRCode для iOS и macOS

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Генератор QR-кодов на Swift (iOS/macOS): библиотека EFQRCode

QR-коды стали неотъемлемой частью современных приложений — от авторизации до передачи ссылок и контактов. Если вы разрабатываете под iOS или macOS на Swift, вам не нужно писать сложные алгоритмы кодирования с нуля. Готовая библиотека EFQRCode предоставляет удобный API для создания, чтения и кастомизации QR-кодов. В этой статье разберём её возможности, установку и примеры использования.

Что такое EFQRCode?

EFQRCode — это библиотека с открытым исходным кодом, написанная на Swift. Она поддерживает iOS (начиная с версии 9.0) и macOS (10.11+). Основные возможности:

  • Генерация QR-кодов из строк, URL-адресов, контактов vCard и текста.
  • Настройка цвета, фона, размера и уровня коррекции ошибок.
  • Добавление водяных знаков (логотипов, картинок) в центр QR-кода.
  • Создание анимированных QR-кодов (GIF).
  • Декодирование QR-кодов из изображений.

Библиотека использует встроенный CIFilter из Core Image, но добавляет множество удобных обёрток и кастомизаций.

Установка через Swift Package Manager

Добавьте пакет EFQRCode в ваш проект Xcode:

// В Xcode: File → Add Packages...
// Вставьте URL репозитория:
https://github.com/EFPrefix/EFQRCode.git
// Выберите версию (рекомендуется "Up to Next Major")

Либо вручную добавьте зависимость в Package.swift:

dependencies: [
    .package(url: "https://github.com/EFPrefix/EFQRCode.git", from: "6.0.0")
]

Базовый пример генерации QR-кода

Самый простой способ создать QR-код из строки:

import EFQRCode

// Создание QR-кода из текста
if let image = EFQRCode.generate(
    content: "https://pythonlib.ru",
    size: EFIntSize(width: 300, height: 300)
) {
    // Используйте image (CGImage) для отображения
    // Например, в UIImageView на iOS:
    let uiImage = UIImage(cgImage: image)
    imageView.image = uiImage
}

Результат — стандартный чёрно-белый QR-код размером 300x300 пикселей.

Кастомизация цвета и фона

Вы можете задать произвольный цвет переднего плана и фона:

import EFQRCode

let qrImage = EFQRCode.generate(
    content: "Hello, Swift!",
    size: EFIntSize(width: 400, height: 400),
    backgroundColor: UIColor.yellow.cgColor,
    foregroundColor: UIColor.blue.cgColor,
    inputCorrectionLevel: .h  // максимальная коррекция ошибок
)

Параметр inputCorrectionLevel принимает значения .l (7%), .m (15%), .q (25%), .h (30%). Чем выше уровень, тем больше данных можно восстановить при повреждении.

Добавление логотипа (водяного знака)

Чтобы поместить логотип в центр QR-кода, используйте метод generateWithWatermark:

import EFQRCode

let watermarkImage = UIImage(named: "logo")?.cgImage
let qrWithLogo = EFQRCode.generateWithWatermark(
    content: "https://pythonlib.ru",
    size: EFIntSize(width: 500, height: 500),
    watermark: watermarkImage,
    watermarkMode: .center
)

Важно: логотип не должен занимать больше 30% площади, иначе код может не читаться.

Создание анимированного QR-кода (GIF)

EFQRCode поддерживает генерацию анимированных QR-кодов. Например, можно создать GIF с изменяющимися цветами:

import EFQRCode

let qrCodeGIF = EFQRCode.generateGIF(
    content: "Animated QR",
    size: EFIntSize(width: 200, height: 200),
    data: [someData] // массив кадров
)

Для простой анимации можно использовать готовые цвета. Подробнее — в документации библиотеки.

Декодирование QR-кода из изображения

Чтобы прочитать QR-код с фотографии или скриншота:

import EFQRCode

let image = UIImage(named: "qrcode")?.cgImage
if let result = EFQRCode.recognize(image: image) {
    print("Распознано: \(result)")
} else {
    print("QR-код не найден")
}

Метод возвращает массив строк

Рекомендаций