使用SPM的iOS App导出本地化失败:找不到UIKit模块
解决Xcode导出本地化时SPM包因macOS编译报错的问题
问题原因
Export Localizations功能执行时,会默认尝试为项目中所有启用的平台编译代码——哪怕你的SPM包已经指定了仅支持iOS/iPadOS,Xcode还是会触发macOS平台的编译检查,导致依赖UIKit的代码报错。
解决方案
1. 给UIKit相关代码加条件编译
这是最直接的修复方式,确保UIKit的导入和代码只在iOS/iPadOS下编译:
- 单个文件内的UIKit依赖:
#if canImport(UIKit) import UIKit extension UIImage { // 你的扩展代码 } #endif - 如果整个文件都是UIKit专用,直接在文件顶部加平台判断:
#if os(iOS) || os(iPadOS) import UIKit // 整个文件的代码内容 #endif
2. 导出本地化时指定目标平台
在导出本地化的对话框里,只选择需要的平台:
- 打开「Product > Export Localizations」
- 在弹出的窗口中,找到「Include」选项,取消勾选macOS目标,只保留iOS和iPadOS
- 点击「Export」执行导出
3. 强化SPM包的平台限制
检查你的Package.swift,确保包和target都明确指定仅支持iOS/iPadOS:
let package = Package( name: "Helpers", platforms: [ .iOS(.v16), .iPadOS(.v16) ], targets: [ .target( name: "Helpers", platforms: [.iOS(.v16), .iPadOS(.v16)], resources: [.process("Resources")] ) ] )
4. 临时禁用macOS目标(极端情况)
如果以上方法都无效,可以临时关闭项目的macOS支持:
- 选中主应用target,进入「General」标签的「Deployment Info」
- 取消勾选「Mac」选项
- 导出本地化完成后,再重新勾选恢复macOS支持
内容的提问来源于stack exchange,提问作者alpennec
相关产品推荐
相关产品推荐

