基本目标与活动目标与部署目标

Posted

技术标签:

【中文标题】基本目标与活动目标与部署目标【英文标题】:Base versus Active versus Deployment target 【发布时间】:2010-11-24 09:19:36 【问题描述】:

我知道这个问题的某些部分被问到了几个不同的版本,但我想确保我没听错。

这是我的假设和理解,在提交之前我想知道它们是否正确。

我的应用程序假定所有操作系统都支持的功能,因此我应该:

    将 Active SDK 设置为最新版本(当前为 SDK 3.0)。 将部署目标设置为我希望支持的较低版本 - iPhone 2.0 或更高版本? Base SDK 到底是做什么用的?如果我选择了不同的 Active SDK,我应该忽略它吗?我在项目设置中的哪里可以看到 Active SDK?

最后一个问题 - 苹果是否允许选择 iPhone OS 2.0 作为部署目标?

提前致谢,

顺便说一句-我提出这个问题的主要原因之一是因为当使用早期的 SDK 编译时,当此动画被保存以供多次使用时,苹果似乎在释放 UIImageView 动画数组的内存时出现问题。这是一个在 SDK 3.0 中修复的已知问题(只需将 UIImageView 动画数组设置为 nil)

【问题讨论】:

【参考方案1】:

Base 和 Active SDK 的区别在于前者是为项目设置的默认 SDK,而后者是您当前构建的 SDK。因此,您的 Active SDK 有可能成为 Base SDK,此时 XCode 将使用您为项目指定的 SDK。

为了尽可能为最广泛的设备构建您的应用,您是对的:

将 Base SDK 设置为可能的最新 SDK(3.0、3.0.1) 将部署目标设置为最早的 SDK (2.0)

Apple 确实允许您将 iPhone 2.0 指定为部署目标,但请记住,在 iPhone 2.0 之后发布的任何 API 或框架默认情况下您将无法使用。有techniques to use features from later SDKs,但它们并不平凡。

【讨论】:

并不是说要坚持,但是OP询问了“Base SDK”和“Deployment Target”。您是否使用“Active SDK”来表示“部署目标”?苹果使用术语“Base SDK”和“Deployment Target”,我理解的意思是:MAX SDK =“Base SDK”和 MIN SDK =“Deployment Target”。【参考方案2】:

您应该将 Base SDK 构建设置设置为包含您打算使用的所有功能的最新 SDK(通常是最新的可用 SDK),并将“iPhone 部署目标”构建设置设置为您要运行的操作系统。

然后,您需要确保在运行时检查早期操作系统上可能不存在的任何功能。

【讨论】:

清晰简单的答案【参考方案3】:

“Base SDK”是您的应用程序可以支持的最大 SDK。这里有一个硬性限制 - 您不能选择未来未发布的 SDK。

“部署目标”是您愿意支持的最低 SDK。你愿意回到多远的时间。

Xcode 似乎创建了对“部署目标”的虚假依赖。例如,我无法使用 Xcode 4.5.2(Xcode 4.5.2 与 ios 6.0 配对)在我的 iOS 5.1.1 iPod 上进行开发,即使在此安装中安装了 4.3、5.0 和 5.1 API 和模拟器。我需要在我的 iOS 6.0 iPhone 中使用模拟器或插孔。

Apple 正在玩的游戏似乎也会导致应用出现问题。我购买的 Elements 副本不会通过 iTunes 同步到 iPod,因为 Elements 需要更新版本的 iOS 才能运行(它可以在我的 iOS 6.0 iPhone 上同步并正常运行)。

我有两台 iPad,一台是 4.3。想想这会造成什么混乱,我不寒而栗。

【讨论】:

【参考方案4】:

一般;

将 BASE SDK 设置为您愿意支持和测试的最新 SDK。

将部署目标设置为您愿意支持和测试的最低 iOS 版本。

如果您碰巧使用了部署目标 SDK 上不可用的 Base SDK 功能,则该应用将在旧设备上运行时崩溃,因此测试至关重要。

另一种/补充过程是使用 Deploymate http://www.deploymateapp.com/,它会进行静态代码分析以识别问题。

如果你来自安卓世界,类比是这样的;

TargetSDK -> 基础 SDK

MinSDK -> 部署目标

Lint -> 部署

【讨论】:

以上是关于基本目标与活动目标与部署目标的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在部署目标小于 iOS 7 的应用程序中集成 swift 的代码吗?

JBoss Tools部署错误:这可能是由于服务器的临时部署目录位于与最终目标不同的文件系统上

全景驾驶感知网络YOLOP部署与实现(交通目标检测可驾驶区域分割车道线检测)

Mac SDK:使用最新的SDK,但确保与早期部署目标的向后兼容性

Eclipse - maven - 我应该执行啥目标才能从 maven 实际部署到 Wildfly(实现与“在服务器上运行”eclipse 命令相同的结果)

20200303 Oracle 19c DataGuard 初实验部署实践