对于一个大型项目,我在同一个工作区中有一个主机应用程序MyApp
和一个链接框架。假设由于某些原因需要知道发布版本(或当前版本号)。我该如何处理这种情况?框架无论如何都可以访问主机应用程序吗?还是有更好的设计?MyFramework
iOS
MyFramework
MyApp
.plist
问问题
280 次
1 回答
1
回答:
Info.plist
如果您可以创建主机应用程序的正确Bundle
OR对象,则可以访问 的内容。NSBundle
然后您可以访问infoDictionary
属性以访问全部内容。
现在的主要问题是如何创建Bundle
宿主应用程序的对象?有四个初始化器Bundle
。我更喜欢使用init?(identifier:)
,因为其他人将类名或路径MyApp
作为参数,这些信息可能无法从您的MyFramework
因此,要访问MyApp
',Info.plist
请使用以下代码。
if let hostInfoDic = Bundle(identifier: "com.company.MyApp")?.infoDictionary {
print("CFBundleShortVersionString: \(hostInfoDic["CFBundleShortVersionString"])")
print("CFBundleVersion: \(hostInfoDic["CFBundleVersion"])")
} else {
// Log error
// ... Fallback handler
}
在框架的配置调用中,您可以要求主机应用程序的包标识符作为附加参数。
笔记:
您不能直接使用Bundle.main.infoDictionary
,因为这将为您提供当前可执行目录中的捆绑信息,该目录可能是您的框架。
来自Apple 文档
讨论
主包允许您访问与当前运行的可执行文件位于同一目录中的资源。对于正在运行的应用程序,主包提供对应用程序包目录的访问。对于在框架中运行的代码,主包提供对框架包目录的访问。
于 2020-10-22T15:56:09.273 回答