我有一个 iOS Swift 包(没有 Objective-C,只有 Swift),没有 .xcodeproj 或 .xcworkspace,并且想对此运行单元测试。由于第三方依赖项中的错误,运行简单的 swift 测试
不起作用。运行different variations of xcodebuild
不起作用,因为我的单元测试需要 @testable 导入,并且错误提示“模块‘MyFramework’未编译用于测试”。因此,我尝试使用 swift package generated-xcodeproj ,认为我也许能够自动创建 xcodeproj 并做一些聪明的事情,但给了我警告“不再需要‘generate-xcodeproj’,并且很快就会被弃用。 ”。显然我不想开始使用即将被弃用的东西。
This official documentation没有任何示例。
是否有官方方法来运行和测试纯 iOS Swift 包?
更新:
我创建了一个示例 SP 来复制此问题 here .
当我尝试swift build
时,出现错误:
✗ 快速测试错误:工件“FloatingPanel”不支持目标平台和架构('Triple(tripleString: "x86_64-apple-macosx", arch: TSCUtility.Triple.Arch.x86_64, 供应商: TSCUtility .Triple.Vendor.apple,操作系统:TSCUtility.Triple.OS.macOS,abi:TSCUtility.Triple.ABI.unknown)')
当我尝试时:
xcodebuild \
-scheme MyLibrary \
-configuration Test \
-derivedDataPath derivedData \
-destination "platform=iOS Simulator,name=iPhone 12 Pro,OS=14.5" \
-sdk iphonesimulator \
ONLY_ACTIVE_ARCH=YES \
-enableCodeCoverage YES \
-resultBundleVersion 3 \
VALID_ARCHS=x86_64 \
-scmProvider system \
-disableAutomaticPackageResolution \
test | xcpretty -c
我收到错误:
MyLibraryTests.swift:2:22:模块“MyLibrary”未编译用于测试
我使用的是 Xcode 12.5。
最佳答案
通过在我创建的 Config.xcconfig 中传入 -xcconfig 和文件 ENABLE_TESTABILITY = true
,我能够成功运行单元测试。这解决了模块“MyLibrary”未编译用于测试
的问题。
xcodebuild \
-scheme MyLibrary \
-configuration Test \
-derivedDataPath derivedData \
-destination "platform=iOS Simulator,name=iPhone 12 Pro,OS=14.5" \
-sdk iphonesimulator \
ONLY_ACTIVE_ARCH=YES \
-enableCodeCoverage YES \
-resultBundleVersion 3 \
VALID_ARCHS=x86_64 \
-scmProvider system \
-disableAutomaticPackageResolution \
-xcconfig Config.xcconfig \
test | xcpretty -c
在 Config.xcconfig 中:
ENABLE_TESTABILITY = true
唯一的其他问题是有时无法找到 MyLibrary
作为方案。
关于ios - 如何正式构建和测试 iOS Swift 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69288425/