0

对于一个大型项目,我在同一个工作区中有一个主机应用程序MyApp和一个链接框架。假设由于某些原因需要知道发布版本(或当前版本号)。我该如何处理这种情况?框架无论如何都可以访问主机应用程序吗?还是有更好的设计?MyFrameworkiOSMyFrameworkMyApp.plist

4

1 回答 1

1

回答:

Info.plist如果您可以创建主机应用程序的正确BundleOR对象,则可以访问 的内容。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 回答