当我创建一个新的OS应用程序项目时,我注意到许多目标选项让我非常困惑:
(1) Xcode窗口的左上角设置:

(2) "Base“:

(3)“部署目标”:

(4)建筑:

我的问题来了,,
对于(2)和(3),我认为更清楚一些。以下是我所理解的:
(2)这说明了我的发展方向。
(3)这表明我的应用程序将在哪个操作系统版本上使用。
请告诉我我是否正确.
但我不明白。我只知道如果我在这里选择32位,我就不能使用ARC。
无论是(4),它们是什么?它们是否代表CPU的位宽?(1)和(4)有什么区别?
发布于 2013-12-09 09:09:07
我会解释你的物品不合规程的。
Base
这定义了您可以使用的最大一组API。您可以使用在这里标识的版本号中存在的任何内容。例如,如果您使用10.8SDK,您可以使用-[NSColor CGColor] (在10.8中引入),但不能使用-[NSData base64EncodedDataWithOptions:] (10.9中的第一次公开)。
(当然,您也可以使用任何比该版本更早的版本。)
因此,SDK版本也称为可用性宏中的“最大允许”版本。
当Apple改变API的行为时,SDK版本有时也变得很重要。当他们这样做时,他们有时会把旧的行为保留在与旧SDK链接的应用程序周围。这被称为“在检查或后检查”,就像“检查您是否使用10.8SDK或更高版本”一样。(每个操作系统版本都有SDK的概念和术语)。它过去只需要运行任何操作系统,运行Xcode并在此基础上构建。)
部署目标
这是您所需的最低操作系统版本。如果在以前的版本中删除了某些内容(很少见,但确实发生了),则不能使用它。
这往往影响链接时和运行时的事情比编译时的事情更多。例如,如果部署目标是10.5或更早,ARC将无法工作。
因此,Deployment也被称为可用性宏中的“最低要求”版本。
Info.plist还可以指定最低OS版本。现在,这是默认设置的,并且是通过宏扩展到Deployment设置的。
建筑建筑设置
不同的CPU有不同的体系结构。基本上,它们属于广泛的类别,例如:
ppc)ppc64)i386)x86_64)(不再支持PowerPC架构。您可以将它们添加到架构列表中,如ppc和ppc64,但是Xcode只会忽略它们。)
现在Mac电脑有英特尔处理器。几乎所有的英特尔Mac都有64位处理器。你只要担心32位英特尔,如果你想支持Mac一直追溯到2006年。那可能比它的价值更麻烦。
iOS设备运行ARM处理器,而且大多数仍然是32位的.A7 (iPhone 5S,iPad Air,iPad Mini和Retina显示器)是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
发布于 2013-12-09 08:35:37
就像现在大多数OSes一样,您可以开发32位或64位的应用程序。"bitness“主要指内存地址的结构方式(使用32位,最多允许4GB地址,或者使用64位(留给读者练习的计算))。然而,所选择的体系结构通常有更多的含义(比如缺少对32位应用程序的ARC支持),还包括CPU寄存器的宽度、结构在RAM中使用的内存等。
OS还支持所谓的胖二进制,即包含应用程序的32位和64位变体的包。然而,只有当您通常更喜欢运行64位代码,但希望您的应用程序也能在只支持32位的操作系统版本上运行时,才需要这样做。
在XCode中,您可以定义构建项目的架构,比如32位、64位或胖包。在项目设置中,您可以设置允许的内容,在XCode的顶部栏中,您可以在允许的体系结构之间快速切换(问题1和问题4)。
base确定要使用什么来编译应用程序的。例如,如果您选择10.7,您就不能使用10.8或10.9中引入的新API(如果您希望应用程序只在早期的OS版本上运行,这完全可以)。但是,如果您想动态地使用新特性(如果它们是可用的),您可以选择最新的OS作为基本SDK和,在代码中签入运行的操作系统,并且只在新特性可用时才使用它们。如果您不使用新的API,那么编译一个访问新特性的应用程序并在旧系统上运行它是完全可以的(它们绑定得很晚,因此只有当您第一次访问它们并且它们不可用时,它们才会崩溃)。
部署目标确定应用程序正常运行所需的最低OS版本。这是一个运行时检查在应用程序启动时完成的。操作系统将拒绝启动为后续版本而制作的应用程序。
https://stackoverflow.com/questions/20462272
复制相似问题