支持 iPhone 3G

Posted

技术标签:

【中文标题】支持 iPhone 3G【英文标题】:Support of iPhone 3G 【发布时间】:2011-11-10 10:58:51 【问题描述】:

我已经提交了一个 iPhone 应用程序 6 次,并且在最后/当前版本的要求中,不再。

我的问题:为什么我会失去这个模型?

我有几点意见:

    现在,应用程序不再。 我搜索了一些,没有找到任何关于它的消息。

    在提交此版本之前,我将 XCode 从版本 4.0.2 (ios SDK 4.3) 更新到版本 4.2 (iOS SDK 5)。 也许在提交期间,“Apple”检查了二进制文件以检查我的工具版本(我用它构建了我的应用程序)。 并且由于 iOS 5 无法在 iPhone 3G 上安装,我已经失去了这种支持。

    为了进行兼容性测试,我拥有一部 iPhone 3G。 在 XCode 4.2 中,我无法用我的 iPhone 3G 调试我的应用程序。 但是,我找到了解决方案:添加架构armv6是不够的,我需要放一些薄弱环节。

    如果我提交带有“特殊 3G”这些选项的应用程序,是否会考虑这些选项并恢复支持?

    (见编辑)

    “新增功能”是我更改了我的 Apple 帐户:我使用另一个帐户提交了我的应用程序。 也许有一些我没有看到的选项。


编辑:我忘记了一个可能很重要的部分:iOS 的版本。

运行我的应用程序的最低 iOS 版本是 iOS 3.1。 我的 iPhone 3G 在 iOS 3.X 上运行

我在使用 XCode 4.2 和我的 iPhone 3G 时遇到的所有问题似乎都是 iOS (3.X) 版本。

也许我的应用失去了对 iPhone 3G 的支持,以确保 iOS SDK 5 和 iOS 3.X 没有问题

但是,有些用户的 iPhone 3GS 在 iOS 3.X 上运行。

我用一台运行 iOS 4.0 的 iPhone 3GS 进行了一些测试:我没有任何问题,也没有选项可以添加到我的项目设置中。


感谢您的回答。问题可能是我的 XCode 的版本。

就像我说的,我已经添加了架构 armv6。但是对于我的 iPhone 3G iOS 3.X,这还不够。

您是否仅在一部 iPhone 3G 上成功测试了此设置?

我应该这样做:

    添加架构 arm6 将 Base SDK 设置为“最新 iOS”(iOS 5.0) 将 iOS 部署目标设置为最小值

---这是你的建议----

    在 info.plist 中删除参数“所需的设备功能”(armv6 和 armv7) 将 SystemConfiguration.framework 添加为可选(以建立弱链接)

使用此设置,我的应用程序崩溃:“dyld: Symbol not found: __NSConcreteGlobalBlock” 所以我还应该添加标志“Other Linker Flags”,-weak_library /usr/lib/libSystem.B.dylib

这是我的问题之一: 如果我提交带有这些选项“特殊 3G”的应用程序,是否会考虑这些选项并恢复支持?

【问题讨论】:

【参考方案1】:

默认情况下,Xcode 4.2 不包含对 iPhone 3G 的支持,但您可以将其添加回来。只需选择您的应用目标并选择“构建设置”。在顶部,将列出的体系结构从“标准 (armv7)”更改为“其他”。在弹出框中,选择现有选项并单击减号按钮,然后单击加号按钮并添加“armv7”,然后再次单击加号并添加“armv6”。 armv7 将支持较新的芯片,而 armv6 将重新添加对 iPhone 3G 的支持……前提是您将 iOS 部署目标设置为 iOS 4.2 或更早版本……您在 3.x 的设置应该没问题——这只是限制你显然不要使用 iOS 的新功能。

您可能还需要在“构建设置”的“其他 C 标志”下添加“-mno-thumb”,但如果我没记错的话,可能只有在您想在旧版本上使用自动引用计数时架构——即使这样也只是因为这是一个已知错误的解决方法。

【讨论】:

我发现了问题;这不是我的 XCode 版本或其他版本: 1. 必须删除参数“必需的设备功能”(在 plist 文件中)。在其他项目中,我没有这个参数。 2.库SystemConfiguration.framework不起作用:需要重写网络状态检测。 该框架中唯一在 iOS 3.x 中不起作用的方法是 SCNetworkReachabilitySetDispatcQueue,因为在 iOS 4.0 中引入了 Grand Central Dispatch。换句话说,你对你的应用进行了实质性的重构,并包含了那个版本的 iOS 不支持的东西,但没有告诉我们。 我对 SystemConfiguration.framework 库的问题是线程并发:CFRunLoopGetCurrent vs CFRunLoopGetMain。由于这个问题和参数“必需的设备功能”,我无法使用我的 iPhone 3G 进行调试:非常奇怪。因此,这是 Apple 在您提交应用程序时的限制。所以问题是:对于我提交的所有应用程序或仅对使用 iOS sdk 5 构建的应用程序,我失去了对 iphone 3G 的支持?

以上是关于支持 iPhone 3G的主要内容,如果未能解决你的问题,请参考以下文章

如何指定我的应用仅支持 iPhone 4 和 iPhone 4s?

iPhone - iPhone5 对现有应用程序的支持?

如何为所有 iPhone 设备支持一个 xib,直到 iPhone 6 Plus?

支持所有 iPhone 设备所需的图像尺寸

如何设计 UI 以支持 iPhone 和 iPad 的所有屏幕

iPhone:AVAudioPlayer 是不是支持 .wav 格式?