Ios &引用;类型';捆绑';没有成员';模块'&引用;只有在快车道

Ios &引用;类型';捆绑';没有成员';模块'&引用;只有在快车道,ios,fastlane,swift-package-manager,Ios,Fastlane,Swift Package Manager,我正在SPM目标内部使用资源。我对资源的定义如下: .target(名称:“工作流”, 依赖项:[“公共”], 路径:“工作流”, 资源:[进程(“资源”)], 这在Xcode中运行良好,但如果我使用fastlane在Azure DevOps上本地编译我的项目,我会收到以下错误消息: 类型“Bundle”没有成员“module” 如果let path=Bundle.module.path(forResource:named,of type:extension){ 在Fastfile中,Xco

我正在SPM目标内部使用资源。我对资源的定义如下:

.target(名称:“工作流”,
依赖项:[“公共”],
路径:“工作流”,
资源:[进程(“资源”)],
这在Xcode中运行良好,但如果我使用fastlane在Azure DevOps上本地编译我的项目,我会收到以下错误消息:

类型“Bundle”没有成员“module”
如果let path=Bundle.module.path(forResource:named,of type:extension){
Fastfile
中,Xcode版本定义为

default_平台(:ios)
平台:ios-do
在你们都做之前
XC版本(版本:“~>12.1”)

我还没有弄明白为什么编译可以在Xcode中工作,但在使用fastlane时却不能。DR:将
包包装起来。模块
代码放在
\if SWIFT\u包中

较长版本: 由于Xcode更喜欢约定而不是配置,所以当项目是一个包时,它似乎知道如何管理
Bundle.module
的编译。当您不是在Xcode中直接编译包时,例如,当Fastlane创建xcodeproj来编译包代码时,我们需要指导编译器如何使用langu软件包专用的老化功能,例如,
Bundle.module

在我的例子中,我想公开包捆绑包中某个文件的url,以便包的使用者可以加载该文件。我必须将该代码包装在
#if SWIFT_package
中,以防止Fastlane中出现编译器错误:

#if SWIFT_PACKAGE
public extension Emoji {
  static var keywordsURL = Bundle.module.url(forResource: "emoji-keywords", withExtension: "json")
}
#endif

好的,我发现fastlane所做的是从SPM(
SPM(命令:“生成xcodeproj”)
)创建一个
xcodeproj
。然后这个项目不支持
Bundle.module
,也不包含资源。
SPM(命令:“构建”)
对我也不起作用,因为它也编译到macOS,而macOS不支持
UIKit
。我还没有找到一个好的解决方案。你找到过解决方案吗?对不起,我没有找到。我偶然发现了一个有效的解决方案。我马上就把它作为答案贴在这里。。。