支持 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 设备支持一个 xib,直到 iPhone 6 Plus?