在 Carthage 中导入和使用 Swift SnapshotTesting 框架

Importing and Using a Swift SnapshotTesting Framework with Carthage

我在导入 SnapshotTesting 框架后遇到问题 运行 xcTests -> https://github.com/pointfreeco/swift-snapshot-testing#installation

构建成功但测试失败

我总是收到一个 "Symbol not found: " 说它希望在 ....Frameworks/libswiftCore.dylib

中找到它

例如

2018-12-11 17:39:48.799290+1100 Life[38438:3178136] Failed to load test bundle from file:///Users/garrypugh/Library/Developer/Xcode/DerivedData/Life-cowbtmytjcqvmqgvgonauprqpbpa/Build/Products/Debug-iphonesimulator/Life.app/PlugIns/LifeTests.xctest/: Error Domain=NSCocoaErrorDomain Code=3588 "dlopen(/Users/garrypugh/Library/Developer/Xcode/DerivedData/Life-cowbtmytjcqvmqgvgonauprqpbpa/Build/Products/Debug-iphonesimulator/Life.app/PlugIns/LifeTests.xctest/LifeTests, 265): Symbol not found: _$SSS8UTF8ViewVs8SequencesWP Referenced from: /Users/garrypugh/Library/Developer/Xcode/DerivedData/Life-cowbtmytjcqvmqgvgonauprqpbpa/Build/Products/Debug-iphonesimulator/Life.app/PlugIns/LifeTests.xctest/Frameworks/SnapshotTesting.framework/SnapshotTesting Expected in: /Users/garrypugh/Library/Developer/CoreSimulator/Devices/BA4AAED2-B310-4590-BCEB-AF28312A0B35/data/Containers/Bundle/Application/A7A23001-D0C6-47C9-ADED-F31A1136A0BB/Life.app/Frameworks/libswiftCore.dylib

我在这里遵循了 Carthage 说明 ->

https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos

这里 ->

https://github.com/Carthage/Carthage#adding-frameworks-to-unit-tests-or-a-framework

并已成功(看似)下载并构建框架

  1. 设置 Cartfile

  2. 运行 carthage 更新 - 构建了 3 个框架(Mac、iOS、tvOS) 即 SnapshotTesting.framework 及其相关的 SnapshotTesting.framework .dSYM 文件

然后,当我尝试将其包含在我的 iOS 应用程序的测试目标中时,我遵循了以下步骤

  1. 将 iOS SnapshotTesting.framework 文件拖到 Build Phases - Link Binary with Libraries Section

  2. 添加了 /usr/local/bin/carthage 复制框架

    输入文件 $(SRCROOT)/Carthage/Build/iOS/SnapshotTesting.framework

    输出文件 $(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SnapshotTesting.framework

  3. 我已确保我的 运行path 搜索路径(在构建设置选项卡中)具有 -> @loader_path/Frameworks

我是运行Xcode10.1

我不确定这是否是

的问题
  1. 迦太基设置

  2. SnapshotTesting 框架

  3. 我在 Xcode

  4. 中的构建设置
  5. 或者动态与静态框架的限制?

我尝试了输入/输出文件位置的一些变化,运行 运行 脚本在 Link 二进制部分

之前和之后

有没有人认识到这个问题,是否有一些其他构建设置需要更改才能使它起作用。

问题已解决

  1. 首先,不要将 carthage 生成的框架拖放到测试目标/构建阶段(选项卡)Link 带库的二进制文件(部分)。而是使用 + 按钮和 "Add Other" 导航到 .../Carthage/Build/iOS 并选择有问题的框架文件。 如果之前拖过 .framework 文件,请将其删除(并将其复制到目录中)

  2. 其次,在构建阶段选项卡(最后一步)中添加一个新的复制文件部分,其中包含一个框架目标。再次使用 + 按钮 select SnapshotTesting.framework 内的 Carthage/Build/iOS 删除 运行 Script Phase - With - "/usr/local/bin/carthage copy-frameworks" 如果你以前添加过它。

感谢 www.pointfree.co

的小伙伴们

Build Phases

  1. 最后一个陷阱 - 执行此操作后,我在尝试导入 SnapshotTesting 的 xcTest 测试用例中收到构建错误 "Module compiled with Swift 4.2 cannot be imported by the Swift 4.2.1 compiler:"。 这个问题是因为我是 运行 Xcode 10.1 - 但是在 Xcode 首选项/位置选项卡中,命令行工具下拉菜单有 Xcode 10.0 select ed - 我怀疑这意味着当 Carthage 生成框架模块时它使用的是旧版本导致 Swift 版本不匹配?

Command Line Tools