Ответ
Технически возможно, но с юридическими и платформенными ограничениями.
Реализация (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()
Критические ограничения:
-
Правовые требования:
- США: Федеральный закон требует одностороннего согласия (18 U.S.C. § 2511)
- ЕС/РФ: Требуется двустороннее согласие всех участников
- App Store Guidelines 5.1.1: Приложение должно явно запрашивать согласие и информировать о записи
-
Технические ограничения iOS:
- Нельзя записывать системный аудиопоток вызова через CallKit
- Запись возможна только через микрофон устройства во время разговора
- Качество записи зависит от режима аудиосессии
Рекомендации:
- Используйте
AVAudioSession.Mode.voiceChatдля лучшего качества - Всегда сохраняйте записи в
Documents/с шифрованием - Добавьте звуковой сигнал о записи в соответствии с местным законодательством
- Включите описание практики записи в Privacy Policy приложения
Ответ 18+ 🔞
Да ты посмотри, что за дичь! Технически-то записать звонок на 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()
Вроде всё просто, да? Записывай себе на здоровье. Ан нет, ёпта! Дальше вылезают такие подводные ебучие камни, что мама не горюй.
Во-первых, законы, блядь. Это ж пиздец полный. В Штатах, допустим, можно записывать, если ты сам в разговоре участвуешь — это типа одностороннее согласие. А попробуй в Европе или у нас в России так сделать! Там нужно, чтобы ВСЕ участники, блядь, знали и согласились. Иначе — здравствуй, статья. Ты представляешь? Звонишь ты бабе, говоришь: «Привет, я тебя записываю», а она тебе: «Иди нахуй, пидорас шерстяной». И всё, приехали.
А во-вторых, сама Apple, эта мартышлюшка, в своих App Store Guidelines прямо прописала: если твоё приложение записывает — ты должен, сука, написать об этом размером с полэкрана, спросить разрешения у юзера, и ещё в политике конфиденциальности расписать, куда эти записи летят. Без этого — нахуй из магазина выкинут, даже не попрощаются.
И технически, охуеть, не всё так гладко. Нельзя взять и тихо-мирно записать сам системный поток звонка через CallKit. Не-а, не дадут. Записывать будешь только через микрофон своего же телефона, пока говоришь. Качество, конечно, будет так себе, особенно если динамик хреновый.
Так что если вдруг задумал такое, то:
- Ставь режим
voiceChat— звук чутка лучше будет. - Прячь записи в папку
Documents/и шифруй их, а то мало ли. - И самое главное — делай, блядь, предупреждающий сигнал! Бип-бип-бип, мол, идёт запись, а то потом придётся оправдываться перед судом, как последний мудак.