【问题标题】:Build for armv6 architecture (target iOS 3.1.3) with iOS 6 SDK and Xcode 4.5?使用 iOS 6 SDK 和 Xcode 4.5 构建 armv6 架构(目标 iOS 3.1.3)?
【发布时间】: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 的新版本?我的用户在早期版本中会发生什么?他们只是没有被告知不兼容的更新,因此会继续使用我的应用程序的旧版本吗?如果没有,可以实现吗?

【问题讨论】:

    标签: iphone ios xcode4.5 targets ios6


    【解决方案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 的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-11-21
    • 2012-09-13
    • 2012-09-10
    • 2015-08-18
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 2014-07-25
    相关资源
    最近更新 更多