ios - 如何正式构建和测试 iOS Swift 包?

标签 ios swift swift-package-manager

我有一个 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/

相关文章:

swift - 如何在 Swift 包管理器库中包含 Assets /资源?

android - HTML5 Web SQL 动态大小

iOS-使用 Nuance Speechkit,错误 : Ambiguous use of recognize(withType:detection:language:delegate:)

ios - 0auth2 与 Microsoft 的重定向问题

ios - 仅在通过解析保存数据后执行/触发 segue

ios - 当用户在 google maps swift 中触摸屏幕时放下别针

swift - 包加载 : "Ignoring duplicate product" (SwiftPM)

swift - CoreML 是否与 swift 包管理器一起工作?

php - PhoneGap FileTransfer 和服务器端脚本

ios - 无法将分发配置文件添加到 Xcode 5