Как реализовать запись телефонного разговора в iOS-приложении?

«Как реализовать запись телефонного разговора в iOS-приложении?» — вопрос из категории Софт-скиллы, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

Технически возможно, но с юридическими и платформенными ограничениями.

Реализация (AVFoundation):

import AVFoundation

// 1. Настройка аудиосессии
let audioSession = AVAudioSession.sharedInstance()
try audioSession.setCategory(.playAndRecord, mode: .voiceChat)
try audioSession.setActive(true)

// 2. Создание записи
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let recordingURL = documentsURL.appendingPathComponent("call_recording.m4a")

let recorder = try AVAudioRecorder(url: recordingURL, settings: [
    AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
    AVSampleRateKey: 44100,
    AVNumberOfChannelsKey: 2,
    AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
])

// 3. Запуск записи
recorder.record()

Критические ограничения:

  1. Правовые требования:

    • США: Федеральный закон требует одностороннего согласия (18 U.S.C. § 2511)
    • ЕС/РФ: Требуется двустороннее согласие всех участников
    • App Store Guidelines 5.1.1: Приложение должно явно запрашивать согласие и информировать о записи
  2. Технические ограничения iOS:

    • Нельзя записывать системный аудиопоток вызова через CallKit
    • Запись возможна только через микрофон устройства во время разговора
    • Качество записи зависит от режима аудиосессии

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

  • Используйте AVAudioSession.Mode.voiceChat для лучшего качества
  • Всегда сохраняйте записи в Documents/ с шифрованием
  • Добавьте звуковой сигнал о записи в соответствии с местным законодательством
  • Включите описание практики записи в Privacy Policy приложения