【问题标题】:How to access host app version from framework in iOS?如何从 iOS 中的框架访问主机应用程序版本?
【发布时间】:2020-04-19 18:14:56
【问题描述】:

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

【问题讨论】:

    标签: ios swift xcode module xcode-workspace


    【解决方案1】:

    答案:

    如果您可以创建适当的BundleNSBundle 主机应用程序对象,则可以访问Info.plist 的内容。然后您可以访问infoDictionary 属性以访问全部内容。

    现在的主要问题是如何创建主机应用程序的Bundle 对象? Bundle 有四个初始化器。我更喜欢使用init?(identifier:),因为其他人将MyApp 中的类名或路径作为参数,这些信息可能无法从您的MyFramework 获得

    所以要访问MyAppInfo.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 Documentation

    讨论

    主包允许您访问与当前运行的可执行文件位于同一目录中的资源。对于正在运行的应用程序,主包提供对应用程序包目录的访问。对于在框架中运行的代码,主包提供对框架包目录的访问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 2018-06-19
      • 2015-12-29
      • 2018-05-28
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多