Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 4.5和iOS 4.2.1不兼容_Ios_Xcode_Cocoa Touch - Fatal编程技术网

Xcode 4.5和iOS 4.2.1不兼容

Xcode 4.5和iOS 4.2.1不兼容,ios,xcode,cocoa-touch,Ios,Xcode,Cocoa Touch,最新的发行说明表明4.2.1和更低版本将不受支持,我们现在必须使用2版本的Xcode来开发支持旧设备的Xcode??如果我们想开发iOS6并支持4.2及更低版本,那么支持旧设备将很困难 我认为Xcode 4.4不支持iOS6。这就是问题所在。开发者如何轻松地支持这些平台而不费吹灰之力呢?最初的iPhone和iPhone 3G是唯一不支持iOS 5的设备。iphone3g已经有4年的历史了。您可能想考虑放弃对iOS 4的支持。如果你不想这样做,我认为你必须使用两种不同版本的Xcode进行开发。Xc

最新的发行说明表明4.2.1和更低版本将不受支持,我们现在必须使用2版本的Xcode来开发支持旧设备的Xcode??如果我们想开发iOS6并支持4.2及更低版本,那么支持旧设备将很困难


我认为Xcode 4.4不支持iOS6。这就是问题所在。开发者如何轻松地支持这些平台而不费吹灰之力呢?

最初的iPhone和iPhone 3G是唯一不支持iOS 5的设备。iphone3g已经有4年的历史了。您可能想考虑放弃对iOS 4的支持。如果你不想这样做,我认为你必须使用两种不同版本的Xcode进行开发。

Xcode 4.5使iOS 4.3成为最早受支持的操作系统,实际上是原始iPhone和3G的孤儿

如果您想支持4.3之前的iOS版本,则需要保留大约4.4版本的Xcode

更清楚一点:你不能轻易地(意味着Xcode没有现成的)支持4.3版本之前的设备并在同一个应用程序中使用iOS 6功能。这是因为iOS 6功能需要XCode 4.5,而XCode 4.5也将iOS 4.3设置为支持的最低操作系统

因此,您有3种选择:

  • 继续使用XCode 4.4。您将能够针对4.3版本之前的iOS。您将无法利用iOS 6的功能,但假设您在实际的iOS 6设备上执行了足够的测试,您的应用程序应该可以在其上正常运行
  • 迁移到XCode 4.5。您将无法瞄准4.3版本之前的iOS,但您将能够利用iOS 6的功能
  • 让两个版本成为你的应用。一个版本使用XCode 4.4(如选项1所示),另一个版本使用4.5(如选项2所示)。从分发的角度来看,这将是两个独立的应用程序,每个应用程序都有自己的bundle ID,等等。应用程序商店中有两个条目

  • 如果您愿意超出Xcode直接支持的范围,请参阅Nate的答案。

    我认为将目标设定为4.3是最佳选择,根据尝试使用
    IPHONEOS\u DEPLOYMENT\u TARGET=4.0
    手动设置项目设置。但是,我不知道是否有任何副作用。

    我认为对iOS 4.2.1的支持下降不是核心问题。事实上,我试图解决这个问题,并做了以下工作:

    • 使用iOS 6 SDK构建应用程序,将部署目标设置为iOS 4.2.1(有效)
    • 打包应用程序进行临时安装,并在iOS 4.2.1设备(iPod touch 2G)上安装应用程序
    • 测试应用程序
    但是,安装失败。这里的原因是-afaik-而不是iOS版本。原因是建筑。XCode 4.5不再允许您为armv6构建。它只为armv7构建。另一方面:所有具有armv7或更高版本的设备都可以运行iOS 5。唯一不支持armv7的设备是iPhone、iPhone 3G、iPod touch 1G和iPod touch 2G

    所以对我来说,问题是:你能用XCode 4.5和iOS 6作为基本SDK构建armv6吗


    编辑:您不能这样做,因为iOS 6基本SDK不适用于armv6。是吗?

    您可以这样做,但它需要一些小的Xcode攻击和一些牺牲。根据您所说的“支持iOS 6”的含义,这可能对您来说已经足够了,也可能还不够。如果你只是想让你的应用程序在iOS 6上运行,那么这应该是可行的。如果你还需要你的应用加入新的iOS 6功能,那么它就不会

    (对于使用多个版本的Xcode没有问题的其他人,请注意:答案允许您也使用新的iOS 6 API并直接针对ARMV7)

    (但也请阅读下面的其余部分!)

    基本上,您可以使用Xcode 4.5为iOS 4及更高版本构建,但是您不能利用iOS 6独有的新功能。因此,您正在为iOS 4和iOS 5构建应用程序,并假设该应用程序在iOS 6上运行良好(这应该是真的,但您需要自己进行测试)

    您需要复制iOS 5 SDK文件夹

    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.*.sdk
    
    从旧的Xcode安装(您需要暂时保留,或者重新安装到非标准位置)。然后,将构建设置中的部署目标设置为iOS 4.0(或任何您想要的最低操作系统)。您可能需要在文本编辑器中打开
    project.pbxproj
    文件来手动设置:

    IPHONEOS_DEPLOYMENT_TARGET = 4.0;
    
    您还需要将架构设置为
    armv6
    armv7
    。您不能直接目标
    armv7s
    。但是,这并不意味着你的应用程序不能在iPhone5上运行
    armv7
    可执行文件应该在iphone5上运行,而无需在
    armv7s
    中添加任何优化。只是兼容性在另一个方向不起作用(例如,
    armv7
    可执行文件不在
    armv6
    iphone3g上运行)

    还有一个步骤可能是必要的,那就是chpwn的博客中没有提到的。您可能会收到以下警告(实际上是错误,因为Xcode无法正确生成可执行文件):

    警告:对于体系结构armv6,没有处理sourcecode.c.objc类型的文件“$(PROJECT_DIR)/main.m”的规则

    为了解决这个问题,您需要为您的目标设置一个定制的构建规则,告诉Xcode使用LLVM GCC 4.2来生成armv6代码。为与模式匹配的文件定义规则
    *。[mc]

    这将是一个不同于Xcode默认值的编译器,您可能需要调整Objective-C代码中的一些语法。尽管很多想这样做的人可能是在ARC之前编写了他们的应用程序,但需要注意的是

    最后,您可能仍然会看到来自Xcode的关于iOS部署目标低于4.3的警告,以及
    armv6
    不受支持的警告。我发现这些都不是问题,可以忽略:

    在我的应用程序可执行文件上运行
    lipo-info