在 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
并已成功(看似)下载并构建框架
设置 Cartfile
运行 carthage 更新 - 构建了 3 个框架(Mac、iOS、tvOS)
即 SnapshotTesting.framework 及其相关的 SnapshotTesting.framework .dSYM 文件
然后,当我尝试将其包含在我的 iOS 应用程序的测试目标中时,我遵循了以下步骤
将 iOS SnapshotTesting.framework 文件拖到 Build Phases - Link Binary with Libraries Section
添加了 /usr/local/bin/carthage 复制框架
输入文件 $(SRCROOT)/Carthage/Build/iOS/SnapshotTesting.framework
输出文件 $(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SnapshotTesting.framework
我已确保我的 运行path 搜索路径(在构建设置选项卡中)具有 -> @loader_path/Frameworks
我是运行Xcode10.1
我不确定这是否是
的问题
迦太基设置
SnapshotTesting 框架
我在 Xcode
中的构建设置
或者动态与静态框架的限制?
我尝试了输入/输出文件位置的一些变化,运行 运行 脚本在 Link 二进制部分
之前和之后
有没有人认识到这个问题,是否有一些其他构建设置需要更改才能使它起作用。
问题已解决
首先,不要将 carthage 生成的框架拖放到测试目标/构建阶段(选项卡)Link 带库的二进制文件(部分)。而是使用 + 按钮和 "Add Other" 导航到 .../Carthage/Build/iOS 并选择有问题的框架文件。
如果之前拖过 .framework 文件,请将其删除(并将其复制到目录中)
其次,在构建阶段选项卡(最后一步)中添加一个新的复制文件部分,其中包含一个框架目标。再次使用 + 按钮 select SnapshotTesting.framework 内的 Carthage/Build/iOS
删除 运行 Script Phase - With - "/usr/local/bin/carthage copy-frameworks" 如果你以前添加过它。
感谢 www.pointfree.co
的小伙伴们
Build Phases
- 最后一个陷阱 - 执行此操作后,我在尝试导入 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
我在导入 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
并已成功(看似)下载并构建框架
设置 Cartfile
运行 carthage 更新 - 构建了 3 个框架(Mac、iOS、tvOS) 即 SnapshotTesting.framework 及其相关的 SnapshotTesting.framework .dSYM 文件
然后,当我尝试将其包含在我的 iOS 应用程序的测试目标中时,我遵循了以下步骤
将 iOS SnapshotTesting.framework 文件拖到 Build Phases - Link Binary with Libraries Section
添加了 /usr/local/bin/carthage 复制框架
输入文件 $(SRCROOT)/Carthage/Build/iOS/SnapshotTesting.framework
输出文件 $(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SnapshotTesting.framework
我已确保我的 运行path 搜索路径(在构建设置选项卡中)具有 -> @loader_path/Frameworks
我是运行Xcode10.1
我不确定这是否是
的问题迦太基设置
SnapshotTesting 框架
我在 Xcode
中的构建设置
或者动态与静态框架的限制?
我尝试了输入/输出文件位置的一些变化,运行 运行 脚本在 Link 二进制部分
之前和之后有没有人认识到这个问题,是否有一些其他构建设置需要更改才能使它起作用。
问题已解决
首先,不要将 carthage 生成的框架拖放到测试目标/构建阶段(选项卡)Link 带库的二进制文件(部分)。而是使用 + 按钮和 "Add Other" 导航到 .../Carthage/Build/iOS 并选择有问题的框架文件。 如果之前拖过 .framework 文件,请将其删除(并将其复制到目录中)
其次,在构建阶段选项卡(最后一步)中添加一个新的复制文件部分,其中包含一个框架目标。再次使用 + 按钮 select SnapshotTesting.framework 内的 Carthage/Build/iOS 删除 运行 Script Phase - With - "/usr/local/bin/carthage copy-frameworks" 如果你以前添加过它。
感谢 www.pointfree.co
的小伙伴们Build Phases
- 最后一个陷阱 - 执行此操作后,我在尝试导入 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