Xcode静态二进制Swift Package运行时无法找到资源求助
问题:静态二进制Swift Package读取JSON资源时崩溃
我正尝试将现有Swift Package部署为静态framework格式的二进制Swift Package(公司强制要求)。其中一个包包含用作配置存储的JSON资源,但从源码包转为静态framework后,运行时无法找到本该复制到bundle的资源,导致崩溃。
崩溃场景
获取模块bundle资源URL的代码运行时崩溃:
let url = Bundle.module.url(forResource: "sample", withExtension: "json")!
报错信息:
2022-08-23 17:09:54.872641-0600 StaticLibConsumerAppDemo[44944:2189617] StaticLib/StaticLibDemo.swift:6: Fatal error: Unexpectedly found nil while unwrapping an Optional value
临时解决方案及问题
由于Bundle.module是Swift Package专属特性,编译为xcframework时用Xcode/xcodebuild构建会找不到该属性,因此我重新定义了Bundle.module以避免大量修改原有源码(该方案在其他包中成功生效,但此包失效):
import Foundation // MARK: - BundleFinder private class BundleFinder {} extension Bundle { static var module = Bundle(for: BundleFinder.self) }
排查现状
- sample.json已确认编译进xcframework(可在文件中找到)
- 二进制包的非资源功能可正常使用,仅在静态二进制代码尝试从bundle获取资源时出错
- 推测问题要么是资源未正确纳入bundle,要么是运行时找到的bundle并非预期的静态framework bundle,但调试后仍未解决
内容的提问来源于stack exchange,提问作者Liam
相关产品推荐
相关产品推荐

