背景
Swift 6 语言模式启用了严格的并发检查。可能需要对包进行代码更改以升级到 Swift 6 语言模式。
一个 Swift 6 应用可以依赖于 Swift 5 包,反之亦然。Swift 6 编译器支持 both Swift 6 and Swift 5 language modes。
WWDC 会议:https://www.youtube.com/watch?v=75-c6jSE8kU
迁移文档:https://www.swift.org/migration/documentation/swift-6-concurrency-migration-guide/swift6mode/
另请参阅:
- Update samples repo to Swift 6 #150939
- Ensure Swift code samples are Swift 6 compatible website#10820
工作
迁移使用 Swift 的包(此列表可能不完整):
- file_selector_ios
- file_selector_macos
- interactive_media_ads
- ios_platform_images
- path_provider_foundation
- pointer_interceptor_ios
- quick_actions_ios
- shared_preferences_foundation
- url_launcher_ios
- url_launcher_macos
2条答案
按热度按时间nbewdwxp1#
我在运行Xcode 16的PR上进行了预提交检查,将
SWIFT_STRICT_CONCURRENCY
传递给xcodebuild,并将.enableExperimentalFeature("StrictConcurrency")
(swift-tools-version为5.9)添加到Package.swift文件中。在
quick_actions_ios
中,我看到了一个失败:https://github.com/flutter/packages/blob/1e62ab016a36c248554f16b75f787e5cc1c46b27/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/QuickActionsPlugin.swift#L23
https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8744845274058465313/+/u/Run_package_tests/build_examples/stdout
另一个在url_launcher_ios上
https://github.com/flutter/packages/blob/1e62ab016a36c248554f16b75f787e5cc1c46b27/packages/url_launcher/url_launcher_ios/ios/url_launcher_ios/Sources/url_launcher_ios/URLLauncherPlugin.swift#L24
https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8744845274058465297/+/u/Run_package_tests/build_examples/stdout
vuv7lop32#
Swift编译器错误(Xcode):在非隔离上下文中的主演员隔离默认值
packages/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios/Sources/quick_actions_ios/QuickActionsPlugin.swift:23:4
我们应该将插件的入口(静态函数和
init
)至少标记为@MainActor
。对于像这样的简单插件,没有太多后台操作,可能只需将整个插件标记为@MainActor