Как часто вы используете Swift.assert()
в вашем коде? Я, честно, использую довольно часто (Если это плохая практика, то, пожалуйста, напишите в комментариях — почему это плохо?). В моем коде часто можно встретить, например, такой вызов:
Swift.assert(Thread.isMainThread)
Swift.precondition()
, Swift.fatalError()
и т.п, хотя их я стараюсь избегать. Более подробно про Unrecoverable Errors in Swift я читал в этой публикации и она оказалось очень даже познавательной.Thread.isMainThread
уже должен игнорироваться т.к. я использую RxTest фреймворк для определенных видов тестрирования (здесь я тоже готов выслушать советы и критику). Главным пунктом осталось то, что локально все исключения должны срабатывать как и раньше, т.е. Loggin.assert()
должен срабатывать тогда же, когда бы срабатывал Swift.assert()
Crashlytics.sharedInstance().recordCustomExceptionName("", reason: ""...
Pod::Spec.new do |s|
s.name = 'Logging'
...
s.subspec 'Base' do |ss|
ss.source_files = 'Source/Logging+Base.swift'
ss.dependency 'Crashlytics'
end
s.subspec 'Test' do |ss|
ss.source_files = 'Source/Logging+Test.swift'
end
end
import Crashlytics
public enum Logging {
public static func send(_ reason: String? = nil, __file: String = #file, __line: Int = #line) {
let file = __file.components(separatedBy: "/").last ?? __file
let line = "\(__line)"
let name = [line, file].joined(separator: "_")
Crashlytics.sharedInstance().recordCustomExceptionName(name, reason: reason ?? "no reason", frameArray: [])
}
public static func assert(_ assertion: @escaping @autoclosure () -> Bool, reason: String? = nil, __file: String = #file, __line: Int = #line) {
if assertion() == false {
self.assertionFailure(reason, __file: __file, __line: __line)
}
}
public static func assert(_ assertion: @escaping () -> Bool, reason: String? = nil, __file: String = #file, __line: Int = #line) {
if assertion() == false {
self.assertionFailure(reason, __file: __file, __line: __line)
}
}
public static func assertionFailure(_ reason: String? = nil, __file: String = #file, __line: Int = #line) {
Swift.assertionFailure(reason ?? "")
self.send(reason, __file: __file, __line: __line)
}
}
import Foundation
public enum Logging {
public static func send(_ reason: String? = nil, __file: String = #file, __line: Int = #line) {
//
}
public static func assert(_ assertion: @escaping @autoclosure () -> Bool, reason: String? = nil, __file: String = #file, __line: Int = #line) {
//
}
public static func assert(_ assertion: @escaping () -> Bool, reason: String? = nil, __file: String = #file, __line: Int = #line) {
//
}
public static func assertionFailure(_ reason: String? = nil, __file: String = #file, __line: Int = #line) {
//
}
}
Decodable
иногда получал данные с несоответствующим типом. Иногда срабатывали логи для Thread.isMainThread
, которые очень оперативно исправлялись в следующих релизах. Самыми интересными ошибками стали чудом выловленные NSException.Due to improper usage, non-fatal reporting has been disabled for multiple builds. Learn how to re-enable reporting in our documentation.Поэтому, стоит заранее продумать частоту отправки логов. Иначе все логи сборки могут оказаться под угрозой игнорирования сервисом Crashlytics
К сожалению, не доступен сервер mySQL