在 Swift 脚本中使用 CleanroomLogger 无法解析 DefaultLogConfiguration
Posted
技术标签:
【中文标题】在 Swift 脚本中使用 CleanroomLogger 无法解析 DefaultLogConfiguration【英文标题】:Using CleanroomLogger in a Swift script fails to resolve DefaultLogConfiguration 【发布时间】:2015-11-21 06:41:48 【问题描述】:我刚开始使用 Swift 2.0 编写脚本,但遇到了符号正在解决的问题。
使用 Carthage 我从包含的 Cartfile 引导
github "emaloney/CleanroomLogger"
我可以通过以下方式让 CleanroomLogger 在 Playground 内工作:
-
在 XCode 7.1.1 中创建一个工作区
从
./Carthage/Checkouts/CleanroomLogger
添加 CleanroomLogger.xcodeproj 文件
在项目中新建 Playground
在操场内输入密码
import CleanroomLogger
var logConfig = DefaultLogConfiguration.init(minimumSeverity: LogSeverity.Debug, synchronousMode: true)
Log.enable(logConfig)
Log.debug?.message("Sample message sent to debug")
Log.debug?.value("Sample value sent to debug")
这播放没有错误。我只看到()
作为预期的每个Log.debug?
调用旁边的操场上的输出。如果我打开控制台应用程序,我会看到两个条目:
11/20/15 10:33:51.455 PM Cleanroom Logger[70056]: DEBUG | <EXPR>:5 — Sample message sent to debug
11/20/15 10:33:51.455 PM Cleanroom Logger[70056]: DEBUG | <EXPR>:6 — <String: "Sample value sent to debug">
很明显,此时我已经检查出 CleanroomLogger 并正确构建。
我继续尝试使用与我的 Cartfile 位于同一目录中的脚本 logger-demo.swift
中的 Cleanroom Logger。此脚本与 Playground 代码相同,只是在开头添加了 shebang
#!/usr/bin/env swift -F Carthage/Build/Mac
import CleanroomLogger
var logConfig = DefaultLogConfiguration.init(minimumSeverity: LogSeverity.Debug, synchronousMode: true)
Log.enable(logConfig)
Log.debug?.message("Hello from inside my Mac")
Log.debug?.value("This is a test of value")
运行脚本会产生以下输出:
$ ./logger-demo.swift
LLVM ERROR: Program used external function '__TMdV15CleanroomLogger23DefaultLogConfiguration' which could not be resolved!
为什么这会在操场上解决,而不是在 swift 脚本中解决?
【问题讨论】:
【参考方案1】:哇,听起来好复杂……
也许改用 Swift 2 的 SwiftyBeaver 记录器。它很简单(!),支持颜色,速度快且功能更完整。
P.S.:我是创造者:)
【讨论】:
添加到我的 Cartfile 我只在 Carthage/Builds/ios 中看到 SwiftyBeaver 的条目。该脚本旨在在 OS X 上运行。是否有任何东西使 SwiftyBeaver iOS 成为特定的并且会阻止它在 Mac 上运行? 我不知道,它也应该在 Mac 下运行,因为它不使用任何特殊的 iOS 库。 Just Foundation,适用于所有平台。 一个全新的 Cartfile,仅包含 SwiftyBeaver 构建,仅适用于 iOS。我不确定这是否与它在 Carthage 中的配置方式有关,或者是否需要更新 XCode 配置。我对这两者都是新手,所以我会玩,但如果你想要更广泛的采用,你可能希望通过 Carthage 开箱即用地为多个平台构建它。以上是关于在 Swift 脚本中使用 CleanroomLogger 无法解析 DefaultLogConfiguration的主要内容,如果未能解决你的问题,请参考以下文章