Требуется обработчик завершения, но его не нужно указывать при создании объекта задачи данных. В этом случае вы должны определить URLSessionDataDelegate, который будет обрабатывать ответ.
"У объекта URLSession не должно быть делегата. Если делегат не назначен, при создании задач в этом сеансе необходимо предоставить блок обработчика завершения для получения данных.
Обработчик завершения блоки в основном предназначены в качестве альтернативы использованию пользовательского делегата. Если вы создаете задачу, используя метод, который принимает блок обработчика завершения, методы делегата для ответа и доставки данных не вызываются ». (https://developer.apple.com/documentation/foundation/urlsessiondatadelegate).
Что касается cra sh, похоже, это связано с развертыванием силы (символом!), Используемым при объявлении задачи. Вы можете использовать условие охраны для безопасного прерывания, если происходит эта ошибка.
guard let url = URL(string: endPoint) else { return }
URLSession.shared.dataTask(with: url) {_, _, _ in
}.resume()