使用iOS 6 SDK和Xcode 4.5构建针对armv6架构(目标iOS 3.1.3)的应用程序?

14

是否有机会使用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 的新版本?早期版本的用户会发生什么情况?他们是否只是不被告知不兼容的更新,并因此继续使用我的应用程序的旧版本?如果不是这样,这是否可以实现?

2个回答

21

oonoweb的答案对于iOS SDK 6.0是正确的。在使用iOS 6 SDK进行构建时,不可能支持iOS 4.3以下的版本,但可以使用Xcode 4.5继续为armv6构建并针对iOS 4.2.1及以下版本进行构建。

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

chpwn的博客列出了步骤,我已经重新编写了:

  • 从苹果开发者下载中心下载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中打开您的项目。 转到目标 > 构建设置选项卡 > 基础SDK,并从下拉菜单中选择iOS 5.1
  • 再次在构建设置选项卡 > 有效架构中删除armv7s(如果存在),并添加armv6(如果尚未存在)。
  • 转到信息选项卡 > 部署目标,并在下拉列表中输入3.1.3(或您要支持的任何版本)。 (该选项不会出现,但您可以键入它。)
  • 如果您不想安装它,则现在可以删除Xcode 4.4.1 .dmg文件。

您将会收到关于在处理armv6文件时没有规则的警告。Nate最近发布了这个答案来解决这个问题。

如果您正在创建一个新项目(而非维护旧项目),您可能还需要查看***-Info.plist文件,并且如果这里有它,从“所需设备功能”中删除armv7。


4
我已经按照chpwn博客中的所有步骤操作,但现在Xcode给我很多警告:“警告:没有处理$(PROJECT_DIR)/Classes/aSUBDIRECTORY/fileXYZ.m这种类型为sourcecode.c.objc的文件的规则,以供armv6架构使用。” - Tafkadasoh
1
需要注意的是,如果您依赖于任何针对iOS6构建的第三方库(如Facebook、Flurry等),则此方法将无法使用。预编译的库将没有适用于armv6设备上安装的固件的适当字节码,因此,即使它成功编译,它仍将无法执行(即崩溃)。 - Matt S.
1
@Tafkadasoh,有一种解决这个问题的方法没有在chpwn的博客中描述,这个答案是从我的回答中得出的。请参见我对此相关问题的回答。基本上,你需要自己定义一个新的构建规则。这对我很有效。 - Nate
“iOS部署目标”不需要从Targets->Build Settings更改吗?我尝试了一下,但NSLog(@“%i”,__IPHONE_OS_VERSION_MIN_REQUIRED);返回40300,我猜这不是3.1.3此外,从Info选项卡更改部署目标是从项目还是目标?目标信息选项卡没有部署目标键。我已经从项目信息选项卡更改了这个,但结果相同。 - teo

10

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


很遗憾,我有一些客户使用旧的iPod Touch进行内部应用程序开发,无法升级到4.2.1以上的版本。我希望我能告诉他们升级,但现在只能尝试MattyG的解决方案。 - Bek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接