Swift 宏:找不到外部宏实现类型

Swift Macros: external macro implementation type could not be found

提问人:JAHelia 提问时间:10/30/2023 最后编辑:Max DesiatovJAHelia 更新时间:11/11/2023 访问量:312

问:

我在通过 SwiftPM 安装的项目中使用 MetaCodable 宏,当我尝试使用本地计算机作为运行代理(MBP M1 Max - Sonoma - XCode 15)使用 Microsoft Azure 的管道构建项目时,我收到以下错误消息:

error: external macro implementation type 'CodableMacroPlugin.CodedAt' could not be found for macro 'CodedAt'

这里的一些人建议在构建设置中添加,但这并不能解决问题。-external-plugin-pathother Swift flags

在这个线程中,有些人还建议添加 、 或 或 ,我使用该值尝试了这些选项的每个选项: 但我在每个 CI 构建中都遇到了相同的错误。-load-plugin-library-plugin-path-load-plugin-executableother Swift flags$(BUILT_PRODUCTS_DIR)#MetaCodable

我还在 Azure 的管道生成日志中收到此警告:

"output": "<unknown>:0: warning: compiler plugin not loaded: '/Users/my_user_name/Library/Developer/Xcode/DerivedData/MyProject/Build/Products/Release/CodableMacroPlugin; failed to initialize /Users/my_user_name/vsts-agent-osx-x64-2.183.1/_work/9/MyProject/Data/Models/SomeModel.swift

对此的任何想法都是值得赞赏的。

iOS Azure-Pipelines Xcode15 Swift-宏 swift5.9

评论

1赞 Soumya Mahunt 10/30/2023
您是仅在 CI 中遇到此问题,还是在本地构建项目时也遇到此问题?另外,您能否提供显示问题的最小可重现示例
0赞 JAHelia 10/30/2023
它只发生在 CI 上,本地构建工作正常。我无法在此处提供 Microsoft 的 Azure CI 日志示例
1赞 Soumya Mahunt 10/30/2023
您可以尝试以下几件事:尝试从 xcodebuild 命令行构建,尝试 swift 论坛上建议的一些解决方案:forums.swift.org/t/...forums.swift.org/t/......
0赞 JAHelia 11/2/2023
xcodebuild命令在我的机器上运行没有问题:但 Microsoft Azure 的管道仍然失败。我什至尝试将此命令添加为 Microsoft Azure 中的 CI 步骤(终端类型)(替换原始 CI 构建步骤),但由于相同的错误,它没有通过xcodebuild -project /Users/xxxxx/MyProject.xcodeproj -scheme MyScheme -configuration Release -destination 'generic/platform=iOS' build

答:

4赞 Trumpfi 10/31/2023 #1

我遇到了同样的问题,几个小时后在我这边找到了解决方案。

对于我们的库,除了 iOS 之外,我们必须为 SwiftSyntaxMacros 定义一个 macOS 支持版本。在本地,我们使用 MacOS 14 并将其设置为 14。 在服务器上,我们运行的是 13.X。对于MacOS支持版本,我们没有收到错误,只有“错误:找不到宏'foo'的外部宏实现类型'foo'”。

将其设置为MacOS 12后,问题就消失了:

platforms: [.macOS(.v12), .iOS(.v15)],

我希望这对你有用。在网上,我没有找到这个问题的解决方案。

评论

0赞 JAHelia 11/1/2023
我们使用的宏有支持,它是这样添加的:macOS.macOS(.v10_15)