我使用 XCGLogger 已经有一段时间了,但是在将我的应用程序转换为 swift 3.0 之后,我在测试目标中遇到了问题。
我的 AppDelegate 类文件中有以下内容。这将创建一个全局变量log
,例如,我可以通过调用在我的应用程序中的任何位置使用它log?.info("foo")
。
在迁移到 swift 3 之前,这也适用于测试目标,但现在如果我尝试log?.info("foo")
在测试目标中使用,则会出现链接错误。
AppDelegate 代码
import XCGLogger
// USE_XCGLOGGER is set for debug but not for release
#if USE_XCGLOGGER
let log: XCGLogger? = {
// Setup XCGLogger
let log = XCGLogger.default
return log
}()
#else
let log: XCGLogger? = nil
#endif
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
...
}
测试目标中的类
import XCTest
@testable import OurLatitude
class ApiAccessTests: XCTestCase {
override func tearDown() {
super.tearDown()
log?.info("foo")
}
}
链接错误
undefined symbols for architecture x86_64:
"XCGLogger.XCGLogger.(info (@autoclosure () -> Any?, functionName : Swift.StaticString, fileName : Swift.StaticString, lineNumber : Swift.Int, userInfo : [Swift.String : Any]) -> ()).(default argument 4)", referenced from:
OurLatitudeTests.ApiAccessTests.tearDown () -> () in ApiAccessTests.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)