关于Xcode构建设置的杂项混淆(64/32位,SDK版本等)

And*_*ang 4 ide macos xcode cocoa objective-c

当我创建一个新的OS X应用程序项目时,我注意到很多目标选项让我感到非常困惑:


(1)Xcode窗口的左上角设置: 左上方


(2)"基础SDK": 基础SDK


(3)"部署目标": 部署目标


(4)架构: 架构


这是我的问题:

对于(2)和(3),我认为理解起来更清楚.这些是我理解的:
(2)这标识了我的发展.
(3)这标识了我的应用程序将使用的操作系统版本.
请告诉我,我是否正确......

但我无法理解(1).我只知道如果我在这里选择32位,我就无法使用ARC.

(4),它们是什么?它们代表CPU的位宽吗?(1)和(4)之间有什么区别?

Pet*_*sey 6

我会不按顺序解释你的物品.

基础SDK

这定义了您可以使用的最大的API集.您可以使用此处标识的版本号中存在的任何内容.例如,如果您使用10.8 SDK,则可以使用-[NSColor CGColor](在10.8中引入),但不能使用-[NSData base64EncodedDataWithOptions:](在10.9中首次公开).

(当然,您也可以使用比该版本更旧的任何内容.)

因此,SDK版本也称为可用性宏中的"max [imum] allowed"版本.

当Apple更改API的行为时,SDK版本有时也会变得很重要.当他们这样做时,他们有时会保留与旧SDK相关联的应用程序的旧行为.这称为"检查后或检查",如"检查您是否在10.8 [SDK]或更高版本".(概念和术语早期Xcode为每个操作系统版本都有SDK.它过去只是通过你运行Xcode和构建的任何操作系统.)

部署目标

这是您需要的最低操作系统版本.如果在先前版本中删除了某些内容(很少见,但它确实发生了),则无法使用它.

这往往会影响链接时间和运行时间,而不是编译时间.例如,如果您的部署目标是10.5或更早版本,ARC将无法工作.

因此,部署目标也称为可用性宏中的"min [imum] required"版本.

Info.plist还可以指定最低操作系统版本.现在,这是默认设置,它是通过宏扩展设置到部署目标.

架构构建设置

不同的CPU具有不同的体系结构.从本质上讲,它们适用于广泛的类别,例如:

  • PowerPC 32位(ppc)
  • PowerPC 64位(ppc64)
  • 英特尔32位(i386)
  • 英特尔64位(x86_64)
  • ARM 32位
  • ARM 64位

(PowerPC的架构不再被支持.你可以将它们添加到架构列表,ppcppc64,但Xcode中会忽略它们.)

Mac现在拥有英特尔处理器.几乎所有的Intel Mac都有64位处理器.如果你想在2006年之前支持Mac,你只需要担心32位英特尔.这可能比它的价值更麻烦.

iOS设备运行ARM处理器,大多数仍然是32位.A7(iPhone 5S,iPad Air,带Miniina显示屏的iPad Mini)为64位.但是,如果您在iOS模拟器上运行,它在Mac上运行(它是模拟器,而不是模拟器),因此它将针对英特尔架构(以前总是如此i386,但现在可能x86_64需要).

"Xcode窗口的左上角设置"

这是构建方案和运行目标.(是的,它是一个弹出式菜单中的两个单独的东西.实际上,它是一个控件中的两个单独的弹出菜单.试试吧.)

"我的Mac 64位"是运行目的地.您将在Mac上运行64位版本的应用程序,而不是在iOS模拟器或iOS设备上运行.您对Mac应用程序的选择仅仅是您要运行的体系结构,它们的行为应该相同(显然,这是您有时需要测试的内容).

iOS应用程序在这里有更多选择.有些应用程序仅适用于iPhone,有些仅适用于iPad,有些是通用的,有些可能适用于32位和64位架构.您可以为每个可以运行的外形和架构组合(例如,iPhone模拟器64位)提供模拟器.您可以选择在已连接并启用开发的任何iOS设备上运行您的应用程序(当您在Xcode的视线中插入设备时会收到此提示).

TL; DR

  • 部署目标是您的应用程序将运行的最低操作系统版本.
  • Base SDK是您可以使用的最高操作系统版本.如果它还不存在,它根本不存在.
  • 体系结构是您的应用程序将运行的硬件集.
  • Run Destination是您要在Xcode中运行它的硬件.