迦太基导入和使用Swift SnapshotTesting框架

时间:2018-12-11 07:10:11

标签: ios swift xcode carthage pointfree

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

构建成功,但测试失败

我总是得到一个“找不到符号:”,说它希望在.... Frameworks / libswiftCore.dylib中找到它。

例如

  

2018-12-11 17:39:48.799290 + 1100生命[38438:3178136]无法加载   测试包来自   文件:///Users/garrypugh/Library/Developer/Xcode/DerivedData/Life-cowbtmytjcqvmqgvgonauprqpbpa/Build/Products/Debug-iphonesimulator/Life.app/PlugIns/LifeTests.xctest/:   错误域= NSCocoaErrorDomain代码= 3588   “ dlopen(/Users/garrypugh/Library/Developer/Xcode/DerivedData/Life-cowbtmytjcqvmqgvgonauprqpbpa/Build/Products/Debug-iphonesimulator/Life.app/PlugIns/LifeTests.xctest/LifeTests,   265):找不到符号:_ $ SSS8UTF8ViewVs8SequencesWP引用   从:   /Users/garrypugh/Library/Developer/Xcode/DerivedData/Life-cowbtmytjcqvmqgvgonauprqpbpa/Build/Products/Debug-iphonesimulator/Life.app/PlugIns/LifeTests.xctest/Frameworks/SnapshotTesting.framework/SnapshotTesting   预期在:   /Users/garrypugh/Library/Developer/CoreSimulator/Devices/BA4AAED2-B310-4590-BCEB-AF28312A0B35/data/Containers/Bundle/Application/A7A23001-D0C6-47C9-ADED-F31A1136A0BB/Life.app/Frameworks/libswiftCoredy。

我在这里遵循了迦太基说明->

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. 运行迦太基更新-构建了3个框架(Mac,iOS,tvOS) 即SnapshotTesting.framework及其相关的SnapshotTesting.framework .dSYM文件

然后,当尝试将其包含在我的iOS应用的“测试目标”中时,我按照以下步骤操作

  1. 将iOS SnapshotTesting.framework文件拖到“构建阶段-使用库链接二进制文件”部分

  2. 使用

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

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

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

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

我正在运行Xcode 10.1

我不确定这是否是

的问题
  1. 迦太基设置

  2. SnapshotTesting框架

  3. 我在Xcode中的构建设置

  4. 还是动态框架静态框架的限制?

我尝试了一些关于输入/输出文件位置的变体,在链接二进制节之前和之后运行Runscript

有人知道这个问题吗?是否有其他需要更改的构建设置才能使它起作用。

1 个答案:

答案 0 :(得分:0)

问题已解决

  1. 首先,不要将迦太基生成的框架拖放到“测试目标/构建阶段”(选项卡)“链接二进制文件与库”(部分)中。而是使用+按钮,然后导航到... / Carthage / Build / iOS的“添加其他”,然后选择有问题的框架文件。 删除.framework文件(如果您之前已将其拖动(并将其复制到目录中)

  2. 其次,在“构建阶段”选项卡(最后一步)中,添加带有框架目标的“新副本文件”部分。再次使用+按钮在Carthage / Build / iOS中选择SnapshotTesting.framework 删除运行脚本阶段-如果之前已添加,则使用“ / usr / local / bin / carthage copy-frameworks”。

在www.pointfree.co上感谢大家

Build Phases

  1. 最后一个陷阱-完成此操作后,我收到了xcTest测试用例中尝试导入SnapshotTesting的构建错误“使用Swift 4.2编译的模块无法由Swift 4.2.1编译器导入:”。 此问题是由于我正在运行Xcode 10.1引起的-但是在Xcode Preferences / Locations选项卡中的Command Line Tools下拉菜单中选择了Xcode 10.0-我怀疑这意味着当Carthage生成框架模块时,它使用的是较旧版本Swift版本不匹配?

Command Line Tools