У меня та же проблема в Swift с командой print
, но только если подключен отладчик.
Я решил ее, проверив, подключен ли отладчик, а затем используя NSLog
вместо print
.
Чтобы проверить, работает ли ваше приложение в режиме отладчика, см. Здесь: Определите, запущено ли приложение Swift из Xcode
Учтите, что с Xcode 8 +В iOS 10 и выше записи журнала усечены, см. здесь: NSLog на устройствах в iOS 10 / Xcode 8 кажется усеченным?Почему?
Изменить 05.03.2019:
Я исправил это с помощью решения из https://stackoverflow.com/a/39907046/6330248
Swift 4.2:
extension String {
func components(withLength length: Int) -> [String] {
guard length > 0 else {
return [self]
}
return stride(from: 0, to: self.count, by: length).map {
let start = self.index(self.startIndex, offsetBy: $0)
let end = self.index(start, offsetBy: length, limitedBy: self.endIndex) ?? self.endIndex
return String(self[start..<end])
}
}
}
func amIBeingDebugged() -> Bool {
var info = kinfo_proc()
var mib : [Int32] = [CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()]
var size = MemoryLayout<kinfo_proc>.stride
let junk = sysctl(&mib, UInt32(mib.count), &info, &size, nil, 0)
assert(junk == 0, "sysctl failed")
return (info.kp_proc.p_flag & P_TRACED) != 0
}
func FixedNSLog(_ format: String, _ args: CVarArg...) {
let maxStringLength = 800
let string = String(format: format, arguments: args)
let substrings = string.components(withLength: maxStringLength)
let substringsCount = substrings.count
if substringsCount > 1 {
NSLog("!!! WARNING !!! The following message is printed by \(substringsCount) parts, because of Xcode 10 console issues")
}
substrings.forEach { (substring) in
NSLog(substring)
}
}
func log(_ message: String) {
if amIBeingDebugged() {
FixedNSLog(message)
}
else {
print(message)
}
}