在 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的主要内容,如果未能解决你的问题,请参考以下文章

学习Swift--下标脚本

Swift2.0语言教程之下标脚本

如何在 IOS 上使用 Swift 解析 JSON,从 PHP 服务脚本发送?

从脚本中获取 Swift 脚本的路径

Swift作为脚本使用

swift脚本编程:一键生成AppIcon