使用 iOS 6 SDK 和 Xcode 4.5 构建 armv6 架构(目标 iOS 3.1.3)?

Posted

技术标签:

【中文标题】使用 iOS 6 SDK 和 Xcode 4.5 构建 armv6 架构(目标 iOS 3.1.3)?【英文标题】:Build for armv6 architecture (target iOS 3.1.3) with iOS 6 SDK and Xcode 4.5? 【发布时间】:2012-09-21 15:28:00 【问题描述】:

是否有机会使用 ios 6 SDK 开发针对 iOS 3.1.3 的应用程序?如果我用旧的部署目标打开我的项目,编译器会警告我:

iOS deployment targets lower than 4.3 are not supported

这可能是因为显然只能构建 armv7armv7s 二进制文件。如果我手动添加armv6(在 iPhone 3G 之前的设备中工作),也会出现几个警告:

warning: no rule to process file '$(PROJECT_DIR)/main.m' of type sourcecode.c.objc for architecture armv6
...
...
warning: architecture armv6 is not supported (current ARCHS = "armv6 armv7 armv7s").

那么我该如何处理呢?在使用 iOS 6 SDK 进行开发时,有没有办法支持 iOS 3.1.3?如果没有,我最终将不得不转向最低目标,即 iOS 4.3。是否可以提交仅支持 >= 4.3 的新版本?我的用户在早期版本中会发生什么?他们只是没有被告知不兼容的更新,因此会继续使用我的应用程序的旧版本吗?如果没有,可以实现吗?

【问题讨论】:

【参考方案1】:

关于 iOS SDK 6.0,oonoweb 的回答是正确的。在针对 iOS 6 SDK 构建时,无法支持低于 iOS 4.3 的版本,但可以使用 Xcode 4.5 继续为 armv6 构建并针对 iOS 4.2.1 及更低版本。

诀窍是针对 iOS 5.1 SDK 而不是 6.0 构建。注意:如果您这样做,您将无法使用任何新的 iOS 6 特定功能:

chpwn 的blog 列出了步骤,我已经重写了:

从 Apple Developer Downloads 下载 Xcode 4.4.1(无需安装) 打开.dmg,右击Xcode.app,“显示包内容” 在该软件包中找到 iOS 5.1 SDK:Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/ 复制此 SDK 打开Xcode.app(4.5)的包内容,将5.1 SDK粘贴到位置:Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/ 在 Xcode 4.5 中打开您的项目。转到您的 Target > Build Settings 选项卡 > Base SDK,然后从下拉列表中选择 iOS 5.1 再次在 Build Settings 选项卡 > Valid Architectures - 如果 armv7s 存在则删除它,如果 armv6 不存在则添加它。 转到信息选项卡 > 部署目标,然后在下拉列表中输入 3.1.3(或您支持的任何内容)(该选项将不存在,但您可以输入)。 如果您不想安装 Xcode 4.4.1 .dmg,现在可以删除它。

您将收到有关讨论没有规则为 armv6 处理文件的警告。 Nate 最近发布了this answer 来处理这些问题。

如果您正在创建一个新项目(而不是维护旧项目),您可能还需要查看 ***-Info.plist 文件,并从“必需的设备功能”中删除 armv7(如果存在)。

【讨论】:

我已经按照 chpwn 博客中的所有步骤进行操作,但现在 Xcode 给了我很多警告:“警告:没有规则来处理文件 '$(PROJECT_DIR)/Classes/aSUBDIRECTORY/fileXYZ.m'为架构 armv6 键入 sourcecode.c.objc 这里需要注意的是,如果您依赖任何针对 iOS6(Facebook、Flurry 等)构建的第三方库(Facebook、Flurry 等),此方法将不起作用。预编译的库将没有安装在 armv6 设备上的固件的适当字节码,因此如果它设法实际编译,它仍然无法执行(即崩溃) @Tafkadasoh,有一种方法可以解决这个问题,chpwn 的博客中没有描述这个问题,这个答案来自于这个问题。 See my answer to this related question。基本上,您需要自己定义一个新的Build Rule。它对我有用。 “iOS 部署目标”不需要从 Targets->Bulid Settings 更改吗?我试过这个,但是 NSLog(@"%i", __IPHONE_OS_VERSION_MIN_REQUIRED);返回 40300 我猜这不是 3.1.3 另外,从信息选项卡更改部署目标是从项目还是目标?目标信息选项卡没有部署目标键。我已经从项目信息选项卡中更改了这个,但我得到了相同的结果。【参考方案2】:

使用 Xcode 4.5(即 iOS 6 SDK),您可以构建的最低版本是 iOS 4.3。我想是时候让您的 3.1.3 客户升级了。

【讨论】:

遗憾的是,有些客户的内部应用程序使用旧的 iPod touch,无法升级到 4.2.1 以上。我希望我可以告诉他们升级 :( 但现在只是尝试一下 MattyG 的解决方案。

以上是关于使用 iOS 6 SDK 和 Xcode 4.5 构建 armv6 架构(目标 iOS 3.1.3)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 4.5 中添加旧版本的 iOS SDK

对 iOS 5.0 和 iOS 6.0 使用 XCode 4.5 的困惑

XCode 4.5 iOS 6.0 模拟器和旋转问题

Xcode 4.5 和 iOS 6.x 中的故事板方向支持?

Xcode 4.5 与 iOs 6 在 iOs 4.3 中的问题

在 xcode 4.5 GM IOS 6 中将方向设置为横向模式