2015-11-04 2 views
3

Я хочу использовать XCGLogger 3.0, чтобы сделать регистрацию в приложении iOS9 написанном в Swift 2. В AppDelegate я определяюXCGLogger 3,0 не написать файл_журнала в файловой системе (IOS) 9

let log = XCGLogger.defaultInstance() 

и применение: didFinishLaunchingWithOptions я установку с:

log.setup(.Debug, showThreadName: true, showLogLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: "/tmp/app.log", fileLogLevel: .Debug) 

Когда я запустить приложение в симуляторе я вижу выход XCGLogger в консоли XCode 7. выход есть:

2015-11-04 18: 28: 40.798 [info]> myapp Версия: 1.0 Build: 1 PID: 49243

2015-11-04 18: 28: 40.798 [Информация]> XCGLogger Версия: 3.0 - LogLevel Отладка

2015-11-04 18: 28: 40,801 [Info]> XCGLogger запись в журнал, чтобы: файл: ///tmp/app.log

Но когда я смотрю на песочнице файловую систему правильного экземпляра симулятора (используя SimPholders2), нет файла loglog app.log.

Это еще хуже, когда я запустить приложение на моем IPhone 6. Выход в консоли XCode является:

2015-11-04 18: 36: 14,692 [Error]> Попытка открыть файл журнала для записи не удалось: операция не может быть завершена. (Cocoa ошибка 2.)

Я также пробовал различные тракты, как "/tmp/app.log", "Библиотека/кэши/de.myidentifier.myapp/app.log", «/ Библиотека/кэши/де .myidentifier.myapp/app.log "и т. д., но без успеха ...

Что я делаю неправильно?

ответ

11

На iOS вы не можете просто написать папку /tmp. Вы должны убедиться, что путь находится в изолированной программной среде приложения.

Для этого вам необходимо запросить систему для своего каталога кеша. Пример приложения в XCGLogger содержит код для этого, но я также включу его здесь.

Попробуйте это:

let cacheDirectory: NSURL = { 
    let urls = NSFileManager.defaultManager().URLsForDirectory(.CachesDirectory, inDomains: .UserDomainMask) 
    return urls[urls.endIndex - 1] 
}() 
let logPath: NSURL = cacheDirectory.URLByAppendingPathComponent("app.log") 
log.setup(.Debug, showThreadName: true, showLogLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: logPath, fileLogLevel: .Debug) 
+0

Вы сделали свой день, спасибо большое! Он работает сейчас! :-) Привет от новичка Swift/iOS, я все еще многому учусь :-) – ikemuc

+1

Нет проблем, надеюсь, что вы найдете XCGLogger полезным! –

+1

Да, это помогло мне найти раздражающую ошибку :-) – ikemuc

0

Если кому-то нужно здесь Swift 4 версии примера Дэйва Вуда. И спасибо за XCGLogger, это отличный инструмент.

let cacheDirectory: URL = { 
    let urls = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask) 
    return urls[urls.endIndex - 1] 
}() 

let logPath = cacheDirectory.appendingPathComponent("app.log") 

let fileDestination = FileDestination(writeToFile: logPath, identifier: "testLogger.fileDestination", shouldAppend: true) 
Смежные вопросы