Spec-Zone.ru › Swift

Совместимость исходного кода Swift

Совместимость исходного кода является важной целью будущих релизов Swift. Для достижения этой цели сообщество поддерживает набор тестов совместимости исходного кода, который используется для проверки регрессий изменений в компиляторе на основе (постепенно расширяющегося) набора Swift исходного кода. Проекты, добавленные в этот набор тестов, периодически компилируются с использованием последних версий разработки Swift в рамках системы непрерывной интеграции Swift, позволяя разработчикам Swift компилятора понимать влияние своих изменений на реальные Swift проекты.

Текущий список проектов

  • ACHNBrowserUI
  • AMScrollingNavbar
  • Alamofire
  • AsyncNinja
  • BeaconKit
  • BlueSocket
  • Bow
  • CareKit
  • Chatto
  • CleanroomLogger
  • CoreStore
  • cub
  • DNS
  • Deferred
  • Doggie
  • Dollar
  • Dwifft
  • Eureka
  • Evergreen
  • exercism-swift
  • fluent
  • GRDB.swift
  • grpc-swift
  • Guitar
  • Html
  • IBAnimatable
  • JSQCoreDataKit
  • JSQDataSourcesKit
  • KeychainAccess
  • Kickstarter-Prelude
  • Kickstarter-ReactiveExtensions
  • Kingfisher
  • Kitura
  • Kronos
  • Lark
  • line-sdk-ios-swift
  • ModelAssistant
  • Moya
  • NetService
  • NonEmpty
  • MovieSwift
  • NSAttributedStringBuilder
  • ObjectMapper
  • Overture
  • Perfect
  • PinkyPromise
  • Plank
  • ProcedureKit
  • PromiseKit
  • R.swift
  • Re-Lax
  • ReSwift
  • ReactiveCocoa
  • ReactiveKit
  • ReactiveSwift
  • Result
  • RxDataSources
  • RxReactiveObjC
  • RxSwift
  • SRP
  • Serpent
  • Sourcery
  • Starscream
  • Surge
  • swift-algorithms
  • swift-argument-parser
  • swift-atomics
  • swift-standard-library-preview
  • SwiftDate
  • SwiftFormat
  • SwiftGraph
  • SwiftLint-Legacy
  • SwiftLint
  • SwifterSwift
  • swift-futures
  • swift-nio
  • swift-log
  • async-http-client
  • swift-nio-http2
  • swift-metrics
  • swift-nio-extras
  • swift-nio-ssl
  • swift-nio-ssh
  • swift-nio-transport-services
  • swift-crypto
  • swift-numerics
  • swift-protobuf-plugin-example
  • swift-system
  • swift-distributed-tracing
  • swift-cluster-membership
  • SwiftyJSON
  • SwiftyStoreKit
  • Tagged
  • Then
  • Kommander
  • launchscreensnapshot
  • mapper
  • siesta-legacy
  • siesta
  • vapor_console
  • vapor_core
  • vapor_database-kit
  • vapor_multipart
  • vapor_routing
  • vapor_service
  • vapor_template-kit
  • vapor_url-encoded-form
  • vapor_validation
  • Base64CoderSwiftUI
  • Nimble
  • swift-collections
  • swift-collections-benchmark
  • mqtt-nio

Добавление проектов

Набор тестов совместимости исходного кода Swift создается сообществом, что означает, что владельцы открытых проектов Swift могут отправлять свои проекты, которые соответствуют критериям приемлемости для включения в набор тестов. Проекты, добавленные в набор, служат общими тестами совместимости исходного кода и обеспечивают большую защиту от непреднамеренных разрывов совместимости в будущих выпусках Swift.

Критерии приемлемости

Для включения в набор тестов совместимости исходного кода Swift проект должен:

  1. Поддерживать Linux, macOS или устройства iOS/tvOS/watchOS
  2. Быть проектом Xcode или Swift Package Manager (Carthage и CocoaPods в настоящее время не поддерживаются, но их поддержка рассматривается в будущем)
  3. Поддерживать сборку как на Linux, так и на macOS
  4. Располагаться в общедоступном репозитории Git
  5. Поддерживать ветку проекта, которая собирается с использованием текущего режима совместимости Swift GM и проходит все тесты
  6. Иметь ответственных за поддержку, которые обязуются решать проблемы в разумные сроки
  7. Быть совместимым с последними версиями GM/Beta Xcode и swiftpm
  8. Добавлять ценности, которые еще не включены в набор
  9. Использовать одну из следующих разрешительных лицензий:
    • BSD
    • MIT
    • Apache License, версия 2.0
    • Eclipse Public License
    • Mozilla Public License (MPL) 1.1
    • MPL 2.0
    • CDDL
END_OF_DOCUMENT_MARKER

Примечание: тестирование совместимости с Linux в непрерывной интеграции пока недоступно, но проекты Linux принимаются.

Добавление проекта

Чтобы добавить проект, соответствующий критериям принятия, выполните следующие шаги:

  1. Убедитесь, что проект успешно собирается по выбранному коммиту против текущей версии Swift GM.
  2. Создайте запрос на вытягивание против репозитория набора инструментов совместимости исходного кода, изменив файл projects.json, чтобы включить ссылку на проект, добавляемый в набор тестов.

Индекс проектов — это JSON-файл, содержащий список репозиториев, содержащих действия для Xcode и/или Swift Package Manager.

Для добавления нового проекта Swift Package Manager используйте следующий шаблон:

{"repository":"Git","url":"https://github.com/example/project.git","path":"project","branch":"main","maintainer":"email@example.com","compatibility":{"3.0":{"commit":"195cd8cde2bb717242b3081f9c367ccd0a2f0121"}},"platforms":["Darwin"],"actions":[{"action":"BuildSwiftPackage","configuration":"release"},{"action":"TestSwiftPackage"}]}

Поле commit указывает хеш коммита для привязки репозитория. Оно содержится внутри поля compatibility, которое указывает версию Swift, с которой известен коммит. Можно указать несколько коммитов, совместимых с разными версиями Swift.

Поле platforms указывает платформы, которые могут быть использованы для сборки проекта. В настоящее время можно указать Linux и Darwin.

Если тесты не поддерживаются, удалите запись действия теста.

Для добавления нового проекта Swift Xcode workspace используйте следующий шаблон:

{"repository":"Git","url":"https://github.com/example/project.git","path":"project","branch":"main","maintainer":"email@example.com","compatibility":{"3.0":{"commit":"195cd8cde2bb717242b3081f9c367ccd0a2f0121"}},"platforms":["Darwin"],"actions":[{"action":"BuildXcodeWorkspaceScheme","workspace":"project.xcworkspace","scheme":"project OSX","destination":"platform=macOS","configuration":"Release"},{"action":"BuildXcodeWorkspaceScheme","workspace":"project.xcworkspace","scheme":"project iOS","destination":"generic/platform=iOS","configuration":"Release"},{"action":"BuildXcodeWorkspaceScheme","workspace":"project.xcworkspace","scheme":"project tvOS","destination":"generic/platform=tvOS","configuration":"Release"},{"action":"BuildXcodeWorkspaceScheme","workspace":"project.xcworkspace","scheme":"project watchOS","destination":"generic/platform=watchOS","configuration":"Release"},{"action":"TestXcodeWorkspaceScheme","workspace":"project.xcworkspace","scheme":"project OSX","destination":"platform=macOS"},{"action":"TestXcodeWorkspaceScheme","workspace":"project.xcworkspace","scheme":"project iOS","destination":"platform=iOS Simulator,name=iPhone 7"},{"action":"TestXcodeWorkspaceScheme","workspace":"project.xcworkspace","scheme":"project tvOS","destination":"platform=tvOS Simulator,name=Apple TV 1080p"}]}

Для добавления нового проекта Swift Xcode используйте следующий шаблон:

{"repository":"Git","url":"https://github.com/example/project.git","path":"project","branch":"main","maintainer":"email@example.com","compatibility":{"3.0":{"commit":"195cd8cde2bb717242b3081f9c367ccd0a2f0121"}},"platforms":["Darwin"],"actions":[{"action":"BuildXcodeProjectTarget","project":"project.xcodeproj","target":"project","destination":"generic/platform=iOS","configuration":"Release"}]}

После добавления нового проекта в индекс убедитесь, что он успешно собирается по привязанным коммитам против указанных версий Swift. В примерах коммиты указаны как совместимые со Swift 3.0, который включён в Xcode 8.0.

# Select Xcode 8.0 GM
sudo xcode-select -s /Applications/Xcode.app
# Build project at pinned commit against selected Xcode
./check project-path-field

В Linux вы можете собрать проект с помощью инструментальной цепочки Swift 3.0:

curl -O https://download.swift.org/swift-3.0-release/ubuntu1510/swift-3.0-RELEASE/swift-3.0-RELEASE-ubuntu15.10.tar.gz
tar xzvf swift-3.0-RELEASE-ubuntu15.10.tar.gz
./check project-path-field --swiftc swift-3.0-RELEASE-ubuntu15.10/usr/bin/swiftc

Поддержка проектов

В случае, если Swift вводит изменения, которые нарушают исходную совместимость с проектом (например, исправление ошибки компилятора, устраняющей неправильное поведение компилятора), ожидается, что авторы проекта обновят свои проекты и отправят новый запрос на вытягивание с обновлённым хешем коммита в течение двух недель с момента уведомления. В противном случае не обновляемые проекты могут быть удалены из индекса проектов.

Тестирование запросов на вытягивание

Тестирование запросов на вытягивание против набора инструментов совместимости исходного кода Swift можно выполнить, добавив комментарий @swift-ci Please test source compatibility в запросе на вытягивание Swift.

Сборка проектов

Для сборки всех проектов против указанного компилятора Swift локально используйте утилиту runner.py, как показано ниже.

./runner.py --swift-branch main --projects projects.json --swift-version 3 --include-actions 'action.startswith("Build")' --swiftc path/to/swiftc

Используйте флаг --include-repos для сборки конкретного проекта.

./runner.py --swift-branch main --projects projects.json --swift-version 3 --include-actions 'action.startswith("Build")' --include-repos 'path == "Alamofire"' --swiftc path/to/swiftc

По умолчанию, выходные данные сборки перенаправляются в файлы .log по действию в текущей рабочей директории. Чтобы изменить это поведение и вывести результаты сборки в стандартный вывод, используйте флаг --verbose.

The Swift Programming Language, Copyright © 2014-2025 Apple Inc.
Swift and the Swift logo are trademarks of Apple Inc.

Documentation for Swift 6.0.3


https://www.swift.org/documentation/source-compatibility/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API