#ios #swift #swift-package-manager
Вопрос:
У меня есть пакет iOS Swift (без Objective-C, просто Swift), в котором нет .xcodeproj или .xcworkspace, и я хотел бы запустить модульный тест на этом. Запуск простого swift test
не работает из-за ошибки в сторонних зависимостях. Запуск различных вариантов xcodebuild
не сработал из-за моего модульного теста, требующего импорта @testable, и ошибок, в которых говорится: «модуль»MyFramework» не был скомпилирован для тестирования». Поэтому я попытался использовать swift package generate-xcodeproj
мысль о том, что я мог бы автоматически создать xcodeproj и сделать что-то умное, но предупредил меня: «»генерировать-xcodeproj» больше не нужен и скоро устареет.». Очевидно, я не хочу начинать использовать что-то, что скоро устареет. В этой официальной документации нет никакого примера.
Существует ли официальный способ запуска и тестирования чистого пакета iOS Swift?
Обновить:
Я создал образец SP, чтобы воспроизвести эту проблему здесь.
Когда я пытаюсь swift build
, я получаю ошибку:
✗ swift test error: artifact 'FloatingPanel' does not support the target platform and architecture ('Triple(tripleString: "x86_64-apple-macosx", arch: TSCUtility.Triple.Arch.x86_64, vendor: TSCUtility.Triple.Vendor.apple, os: 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: module 'MyLibrary' was not compiled for testing
Я использую Xcode 12.5.
Комментарии:
1. Есть ли шанс, что вы могли бы опубликовать достаточно подробностей — даже минимальных — чтобы дублировать свою проблему? Я понимаю, что не сработало, но даже минимальный проект может помочь.
2. Привет, спасибо за комментарий, я обновил вопрос. @dfd
Ответ №1:
Я смог успешно запустить модульный тест, передав в-xcconfig файл ENABLE_TESTABILITY = true
в Config.xcconfig, который я создал. Это устранило проблему module 'MyLibrary' was not compiled for testing
.
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
as a.