【问题标题】:iPhone SDK2.0 on Devices running iPhone OS 3.0运行 iPhone OS 3.0 的设备上的 iPhone SDK2.0
【发布时间】:2009-06-30 20:38:00
【问题描述】:

抱歉,帖子太长了......

我正在尝试了解我在应用程序上的行为是否“正常”。 我有一个针对 2.0 sdk 版本开发的应用程序(即确保最大 #of 设备可以运行它,因为我不使用任何“特殊”3.0 功能,我倾向于认为最低分母必须是最佳选择)。

所以在 Xcode(最新版本的 xcode)中,我确保所有内容都设置为 2.0 api,包括框架引用。 我构建并且事情在 2.1 设备上运行良好(硬件是 1gen iPhone)。 现在我在旧硬件(iPod touch)但最新软件 3.0 的设备上测试它

事情运行良好,但我在某些地方遇到了不同的行为,例如: 1)工具栏动画不起作用 2) 旋转的行为不同(将设备向右旋转会显示我的屏幕镜像.. :-) 这很“酷”但不是我们想要的

现在,我确信我可以“破解”并解决这些问题,但有些事情对我来说没有意义,而且通常我知道我不能完全理解某些事情,

问题是: 是不是任何运行针对 2.0 编译的东西的设备,无论其当前的软件版本/硬件版本如何,都必须表现得完全相同? 这不就是向后兼容的全部内容吗? 我希望运行 2.0 软件的 3.0 设备将体验与运行 2.0 软件的 2.0 设备完全相同的流程。 我错过了什么?我这方面的不理解在哪里?

谢谢, -tzurs

【问题讨论】:

  • 顺便说一句。如果有人可以评论他们在我的情况下添加了哪些框架版本,我将不胜感激。 (也就是说,你是从哪个路径添加框架,3.0 还是 2.0)我会假设 2.0 但我什么都不知道了..
  • 您应该始终从您尝试编译的基础添加。最简单的方法是获取当前框架,右键单击并“在 finder 中显示” - 然后拖入您希望使用的其他框架。

标签: iphone xcode iphone-sdk-3.0 build


【解决方案1】:

大部分情况下它的行为是相同的,但在某些情况下(尤其是围绕旋转),它只是有点不同。它们也可能在工具栏或导航栏中对视图进行了重新排序,因此如果您直接操作此类事物的子视图,它们将会发生变化。

也可能是您依赖于 2.0 中存在的错误,如果您以“正确”的方式做某事,从 2.0 到 3.0 不会有任何问题。

特别是围绕旋转,如果您使用 shouldAutoRotate... 作为触发器来做某事,请考虑使用旋转通知。

【讨论】:

  • 感谢您的回复,根据您的问题,我没有使用任何“已知错误”或任何非标准的东西,我的轮换代码实际上非常简单,并且在两个硬件上都可以正常工作,而不是事实在 3.0 设备上,向右旋转显示整个视图翻转。我在 tabbarcontroller 中使用的动画也非常简单,但在 3.0.0 中不起作用。无论如何,这一切都不是我追求的重要事情,而是“为什么要有所不同!!”我认为 3.0 会使用与 2.0 完全相同的代码。
  • 下面的框架随着时间的推移都发生了很大的变化。我从苹果人那里听说,如果他们看到应用程序是为早期版本的代码编译的,一些框架会稍微调整行为,但是不可能对框架进行大量重写并让它们在功能上与旧应用程序 100% 等效。这就是 Apple 发布测试版的全部原因,因此您可以适应不再以相同方式工作的东西。
  • 我的印象是他们只是在新设备上保留了相关库的一个版本。或类似的东西。从来没有为他们是如何做到这一点而烦恼的。我认为它是操作系统的“承诺”,它以某种方式运行完全相同的代码。我猜我的错。
【解决方案2】:

不是任何运行某些东西的设备 根据 2.0 编译的必须 行为完全相同,无论 它当前的软件版本/硬件 版本?这不是全部吗 关于向后兼容性?

有点半开玩笑,但在微软的世界里,这是有道理的。然而,Apple 世界传统上并不十分重视向后兼容性。尤其是当涉及到由于先前版本中的错误或由于以最初不打算使用的方式使用事物时的行为。

【讨论】:

  • 嗯。所以你是说当被要求运行 2.0 api 函数时 3.0 没有运行确切的代码?在我编码的 20 年中,这将是令人惊讶的闻所未闻的...... :-) 但如果你这么说,你就会知道你在说什么。我现在对在未来版本中可以做些什么来支持我的应用程序感到困惑。我是否应该查看 3.0 的一些发行说明,说它的 2.0 实现破坏了与“原始”2.0 的兼容性?有没有你知道的这样的文件?
  • 为什么会令人惊讶?我编码的时间比你长,而且一直都是这样。当我在 UNIX 中进行系统调用时,我调用的是 1970 年的代码吗?或者我是在调用一个可能在下面完全改变的版本。如果下面的代码没有改变,为什么还要有 API?您拥有 API,因此当更新的库版本出现时,您可以进行兼容性测试以确保您所做的假设仍然正确。
  • 说得好,我可能没有正确解释自己。如果我从 1970 年调用一个 api 方法,它添加两个数字并返回结果,我想继续调用它并得到相同的结果,即使我针对上周编译的库进行编译并声称它维护 70 年代的 api(过去的好时光)。关于向后兼容的全部要点是,开发人员和软件公司不需要“检查”他们的代码“非常好”编写并且工作多年现在不“兼容”的 beta 版本。新的操作系统不兼容,不是软件..
  • 我什至会走得更远,假设我在 iPhone 2.0 时购买了应用程序,现在我升级了(它说“向后压缩”),现在我安装的应用程序不再工作了?!@ !我需要与我购买它的公司交谈,并“让”他们为新操作系统编译它?对我来说这没有什么意义。我的 2 美分。
  • 是的,很容易采用一个简单地将两个数字相加并让它始终返回相同结果的方法调用。但是,当您采用与系统的许多其他元素交互的 API 时,这是不可能的 - 您必须永远为每个修订版本拥有整个操作系统的完整副本,并保证在此之上运行多个版本同时与不同的应用程序(比如您的应用程序和有时在后台运行的邮件)不会相互干扰。
【解决方案3】:

最容易看到变化的地方是差异或差异。这将作为每个版本的文档集的一部分发布,并显示更改的内容以及如何响应支持不同的版本。另请查看 Apple 关于支持多个版本的示例代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多