为什么我们对 Xcode 中的静态库和框架有这种令人困惑的设置

5 xcode ios

我读过很多关于静态/动态库/框架的文章。所以我的理解是(如果不准确请告诉我):

Framework = Library + Bundle
Static = Linking at build time
Dynamic = Linking at run time
Run Code Online (Sandbox Code Playgroud)

在Xcode中,我们有“静态库”和“框架”。这提出了一些令人困惑的点:

  • 为什么没有“动态库”选项?
  • 既然我们已经可以静态链接框架,为什么我们还需要“静态库”?(StaticFramework不是=StaticLibrary+Bundle吗?)

kun*_*ang 2

有很多概念必须明确

\n

根据与可执行文件的链接方式,库分为两类

\n
    \n
  1. 静态库.a.so. 编译时链接。维基百科
  2. \n
  3. 动态库.dylib .dll等在运行时链接。由于某些安全原因,只有苹果可以在 iOS 上使用它,我们无法构建它。
  4. \n
\n

ps,苹果平台特殊的一种

\n

基于文本的.dylib存根 \xe2\x80\x94.tbd

\n

框架

\n

Framework 是一个包,可以包含动态库、字符串、标题、图像、storyboard 等资源。\n与 Libraries 相比,Framework 的功能更多

\n

框架也有静态和动态之分

\n

iOS 8以后,我们可以使用动态框架,为什么苹果会发布这个。也许扩展和应用程序共享代码\n这个 iOS 动态框架被称为嵌入式框架,因为当我们构建应用程序时,将框架复制到应用程序包中。\n因此嵌入式框架与系统动态框架不同,例如UIKit.Framework

\n
\n

为什么没有“动态库”选项?

\n
\n

该选项允许使用嵌入式库Framework,但也不允许在多应用程序中共享动态框架

\n
\n

既然我们已经可以静态链接框架,为什么我们还需要“静态库”?(不是 StaticFramework = StaticLibrary + Bundle 吗?)

\n
\n

嗯,Xcode不仅支持Objective-c和Swift,还支持可能使用静态库的C、C++

\n