【问题标题】:Why Apple disallows static library in a framework?为什么 Apple 不允许在框架中使用静态库?
【发布时间】:2023-03-30 02:39:01
【问题描述】:

Appole doc一样

它声明:

如果您正在构建自己的静态库并使用 shell 脚本 将其打包在 .framework 目录中,您需要迁移到构建 一个带有动态库的框架,因为这是正确的方法 构建一个框架。静态框架不是受支持的方式 共享静态库。

为什么 Apple 不允许在框架中使用静态库?

它是post 的缩写吗? 或者,也许该帖子混淆了static librarystatic framework

iOS 中的所有框架都是动态的,对吧? 苹果说:

框架是封装动态库、头文件的分层目录 文件和资源,例如故事板、图像文件和本地化 字符串,放入单个包中。使用框架的应用程序需要嵌入 应用程序包中的框架。

【问题讨论】:

  • 对,正如发行说明中所说的 developer.apple.com/library/archive/releasenotes/DeveloperTools/…,“Xcode 支持包含 Swift 代码的静态库目标。调试使用 Swift 静态库的应用程序可能需要完整的构建工件集,这些构建工件在其原始版本中位置。”
  • 看起来有一些静态框架,但苹果没有太多关于它的文档。就像这里描述的那样:我在官方文档中没有看到任何关于静态框架的字眼。只有(动态)框架。所以 xcode 不能像动态框架一样处理它。框架中的资源不能自动复制到应用程序的主包中。如果您使用 cocoapods,它将自动处理它,但不会用于手动集成。 github.com/leavez/cocoapods-static-swift-framework

标签: ios xcode frameworks static-libraries binaryfiles


【解决方案1】:

必须在应用启动时加载静态库,而不考虑是否立即需要它。另一方面,动态库仅在需要时才加载,从而改善了应用的启动时间并降低了手机的内存压力。

例如,考虑我正在使用一个电子商务应用程序,该应用程序还允许扫描条形码并提供有关产品的详细信息。现在,当我启动应用程序时,我将不再需要条形码功能。我需要先登陆应用程序并开始购物。当我需要扫描一些条形码时,我很乐意等待并让框架加载,而不是在应用程序启动时加载。

Apple 在其文档中是这样说的:

决定应用性能的两个重要因素是启动时间和内存占用。减小应用程序的可执行文件的大小并在启动后最大限度地减少内存使用量,使应用程序启动速度更快,启动后使用的内存更少。使用动态库而不是静态库可以减少应用程序的可执行文件大小。它们还允许应用程序仅在需要时才延迟加载具有特殊功能的库,而不是在启动时。此功能有助于进一步缩短启动时间并提高内存使用效率。

文档链接:https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/OverviewOfDynamicLibraries.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2013-03-13
    相关资源
    最近更新 更多