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



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

Framework = Library + Bundle
Static = Linking at build time
Dynamic = Linking at run time
在Xcode中,我们有"静态库"。和";Framework"。这引起了一些令人困惑的问题:
  • 为什么没有"动态库"?选择吗?
  • 既然我们已经可以静态链接框架了,为什么我们还需要一个"静态库"呢?(是不是StaticFramework = statilibrary + Bundle?)

为什么没有"动态库";选择吗?

因为iOS应用程序一开始不允许使用动态库。

既然我们已经可以静态链接框架了,为什么我们还需要一个"静态库"呢?(是不是StaticFramework = statilibrary + Bundle?)

因为旧Xcode只支持Static Library.

后加入Static Framework,保留Static Library

有很多概念必须弄清楚

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

  1. 静态库.a,.so。在编译时链接。wiki
  2. 动态库.dylib.dll等在运行时链接。出于安全考虑,只有苹果可以在iOS上使用它,我们不能做这个。

ps, apple平台中的特殊类型

基于.dylib存根的文本-.tbd

框架框架是一个包,它可以包含诸如动态库、字符串、头文件、图像、故事板等资源。与库相比,框架有更多的特性

框架也有静态和动态

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

为什么没有"动态库";选择吗?

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

既然我们已经可以静态链接框架了,为什么我们还需要一个"静态库"呢?(是不是StaticFramework = statilibrary + Bundle?)

嗯,Xcode不仅支持Objective-c和Swift,而且还支持C, c++,这些可能会使用静态库

最新更新