创建框架和对成员' log'的模糊引用

时间:2017-01-24 14:10:16

标签: swift xcode logging cocoapods

我有很多时间试图将我的代码转换为Cocoapod / Framework。

所以我有一些代码,我想要打包到框架(F),然后在App(A)中使用它。然而,当我尝试构建A(链接F)时,它几乎正常工作,其中A中的源引用了F中的日志,我收到错误

Ambiguous reference to member 'log'

这是因为log在我的F源代码中定义为名为Logging.swift的文件,如下所示:

import Foundation
import XCGLogger

// MARK: - Logging

let log: XCGLogger = {
    let log = XCGLogger(identifier: "mainLogger", includeDefaultDestinations: false)

   // Create a destination for the system console log (via NSLog)
   let systemDestination = ConsoleDestination(identifier: log.identifier+".console")

   // configure it here, omitted for brevity

   // Add the destination to the logger
  log.add(destination: systemDestination)

  // Add basic app info, version info etc, to the start of the logs
  log.logAppDetails()

  return log
}()

我的问题是:

i)我如何摆脱这个错误?我猜它与指定哪个模块正在记录它有关,因为还有其他模块也有日志。 (达尔文,CoreGraphics等)

ii)如何设置我的日志记录,以便在框架F代码中记录的任何内容也可以包含在App A的同一记录器中?这是可能的还是必要的?

1 个答案:

答案 0 :(得分:2)

我相信我现在可以回答我自己的问题了:

我将Framework的Logging.swift文件更改为:

public struct Log {

  public static var main: XCGLogger = {
      let log = XCGLogger(identifier: "mainLogger", includeDefaultDestinations: false)

      // Create a destination for the system console log (via NSLog)
      let systemDestination = ConsoleDestination(identifier: log.identifier+".console")

      // Optionally set some configuration options (omitted for brevity)

      // Add the destination to the logger
      log.add(destination: systemDestination)

      // Add basic app info, version info etc, to the start of the logs
      log.logAppDetails()

      return log
  }()
}

然后它有一个默认记录器。我使用Log.main

引用对日志的调用

在我的应用程序A中,我可以定义自己的记录器,只需指定它:

Log.main = myOtherLog