Swift框架无法访问plist文件,请求排查原因
问题原因及解决方案
核心问题
你的appConfig.plist没有被正确打包进框架自身的Bundle中,要么漏打包,要么被错误打包到了主App的Bundle里,导致框架代码无法找到它。你打印的Bundle路径是主App的路径,说明当前通过MyFramework.self获取的框架Bundle虽嵌入在主App内,但plist并未被包含在框架的Bundle目录下。
具体排查&修复步骤
检查文件的Target Membership
选中appConfig.plist文件,打开右侧的File Inspector面板,确保框架的Target被勾选,而非只勾选主App的Target。如果仅勾选主App,plist会被打包到主App的Bundle里,框架自然访问不到。验证框架的Copy Bundle Resources构建阶段
打开框架项目的Build Phases标签,找到Copy Bundle Resources阶段,确认appConfig.plist在这个列表中。如果不在,直接把plist文件拖入列表,这样编译时才会将plist复制到框架的Bundle内。代码优化(可选)
推荐用url(forResource:withExtension:)替代path(forResource:ofType:),同时可以打印框架Bundle的实际路径,确认是否正确:let frameworkBundle = Bundle(for: MyFramework.self) print("框架Bundle路径:\(frameworkBundle.bundlePath)") // 正常应输出类似 Testapp.app/Frameworks/MyFramework.framework 的路径 if let plistURL = frameworkBundle.url(forResource: "appConfig", withExtension: "plist"), let plistData = try? Data(contentsOf: plistURL) { do { let plistContents = try PropertyListSerialization.propertyList(from: plistData, options: [], format: nil) print(plistContents) Logger.shared.log(log:"Plist file found.") } catch { Logger.shared.log(log:"Error reading plist: \(error)") } } else { Logger.shared.log(log:"Plist file not found.") }
内容的提问来源于stack exchange,提问作者Neha Vipin
相关产品推荐
相关产品推荐

