xcode中的Base SDK,iOS部署目标,Target和Project的含义是什么


161

假设我将基本SDK设置为7,这是什么意思?这可能意味着该应用程序将在iOS 7上运行。但这就是iOS部署目标。

另外,为什么还要在项目和目标中都指定这3个值。这没有道理。为什么要两次指定相同的内容?


在另一个较新的问题上,对此有一个很好的简洁答案:stackoverflow.com/a/41278576/498949
克里斯·雷

Answers:


79

基本的SDK是构建应用程序所针对的基础(即,包含文件和库文件以及框架)。如您所说,除了基本sdk> =部署目标外,它不会影响部署目标。

您可以在2个级别上指定构建设置,因为每个项目可以有多个目标,并且可能不希望所有目标都使用相同的设置。项目级别设置覆盖默认设置,而目标级别设置覆盖项目级别设置。

例如,我有同时具有OSX和iOS目标的项目,有些是ARC,有些是MRR。如果无法指定Xcode允许的粒度级别的构建设置,则每个项目都必须有不同的项目。


196

iOS 7 TechTalk的“构建现代应用程序”的第2部分中,他们清楚地解释了这一点。

在此处输入图片说明

好读嗨!我有空!

因此,现代的应用程序可能使用iOS 9作为目标SDK,并使用iOS 7作为部署目标。这意味着您可以在iOS 7,iOS 8和iOS 9上运行,并且在iOS 9上实际运行时可以使用任何iOS 9调用。

您可以在我的文章SDK和Deployment Target中阅读更多内容


20
很好的参考。在这50分钟的视频中,该部分埋在25:17左右。
丹尼尔(Daniel)

2
真好!但是,如果将Base SDK设置为7.0,然后尝试安装到iOS 8.0,会发生什么情况?我们是否必须始终下载最新的XCode来支持最新的Base SDK?
GoRoS

1
@GoRoS如果基于sdk的<iOS 8(用户无法从应用商店安装)将不支持您的应用。由于UIKit / Foundation是动态库,因此如果通过Xcode或二进制强制执行,则可能会起作用,但该应用程序随时可能崩溃,并且通常不稳定。基本SDK始终与相应的Xcode版本一起使用。但是,用于Xcode的Base SDK是用于模拟器的,设备上的一个可能会有所不同。因此,在发货之前在真实设备上测试事物很重要。这就是所有动态库的问题。
库纳尔·巴拉尼

2
@chichilatte不,您不需要。该应用程序仍支持iOS 12,iOS 13 ...,但是它没有iOS 12,iOS 13 ...的任何新功能。要使用iOS 12的新功能,您需要针对iOS 12 SDK进行编译并使用iOS 12中的
API。– onmyway133

2
谢谢,这很有意义。我认为@ Kunal-Balani的上述评论是错误的。
chichilatte

67

基本SDK是您链接的SDK。部署目标是应用程序运行所需的最低iOS版本。您可以使用在iOS 6下运行的SDK 7构建应用程序。但是,您必须注意不要使用iOS 6上不可用的任何功能或方法。如果这样做,则应用程序将在iOS 6上立即崩溃。使用此功能。

有关更多详细信息,请参阅Apple文档:https : //developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.