Как официально создать и протестировать пакет iOS Swift?

#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.