3

XCGLogger 3.0 を使用して、Swift 2 で記述された iOS9 アプリでログを記録したいと考えています。AppDelegate で、次のように定義します。

let log = XCGLogger.defaultInstance() 

そして application:didFinishLaunchingWithOptions では、次のようにセットアップを行います。

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

シミュレーターでアプリを起動すると、XCode 7 のコンソールに XCGLogger の出力が表示されます。出力は次のとおりです。

2015-11-04 18:28:40.798 [情報] > myapp バージョン: 1.0 ビルド: 1 PID: 49243

2015-11-04 18:28:40.798 [情報] > XCGLogger バージョン: 3.0 - LogLevel: デバッグ

2015-11-04 18:28:40.801 [情報] > XCGLogger のログへの書き込み: file:///tmp/app.log

しかし、(SimPholders2 を使用して) 正しいシミュレーター インスタンスのサンドボックス ファイルシステムを見ると、ログファイル app.log がありません。

IPhone 6 でアプリを起動すると、さらに悪化します。XCode コンソールの出力は次のとおりです。

2015-11-04 18:36:14.692 [エラー] > 書き込みのためにログ ファイルを開こうとして失敗しました: 操作を完了できませんでした。(ココア エラー 2)

「/tmp/app.log」、「Library/Caches/de.myidentifier.myapp/app.log」、「/Library/Caches/de.myidentifier.myapp/app.log」などのさまざまなパスも試しましたが、成功せずに...

私は何を間違っていますか?

4

2 に答える 2

12

/tmpiOS では、フォルダーに書き込むことはできません。パスがアプリケーションのサンドボックスにあることを確認する必要があります。

そのためには、システムにキャッシュ ディレクトリを要求する必要があります。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)
于 2015-11-05T04:34:23.713 に答える