在使用Xcode 4.2和iOS 5 SDK时,是否有可能针对较旧的iOS版本进行目标定位?

103

我最近下载了带有iOS 5 SDK的Xcode 4.2软件包,但马上发现我无法使用安装了 iOS 4.2.1 的 iPhone 3Gs 进行调试。我只能在我的安装了iOS 5的iPhone 4上进行调试和测试。

对于任何运行iOS 5以下版本的设备,Xcode都只会显示“已完成针对iPhone3GS的运行”,并不会运行它。我的部署目标设置为3.0,因为我的应用程序中没有使用高于3.0的功能,并且我想能够针对所有版本3.0或更高版本进行部署。我已经安装并更新了所有的预配资料。

我已经退出并重新启动了Xcode,多次清理了构建。尝试在构建设置中添加armv6,但仍无法在我安装了iOS 4.2.1的旧手机上构建和运行我的应用程序。

我的问题是,是否可能使用新的SDK制作适用于低于iOS 5版本的应用程序?如果我无法在旧手机上安装应用程序,如何确保我的应用程序仍将在较低版本的iOS上运行?

编辑:好吧,看起来iOS SDK 5默认不支持armv6。您需要在您的目标和项目的构建设置下的体系结构字段中添加armv6。然后您的应用程序将能够在iPhone 3G设备上运行。 答案可以在此找到 如何使用iOS 5构建armv6和armv7架构


请注意,您的编辑涉及架构问题,这与“iOS”版本是不同的问题。另外,请将编辑添加为答案,以便您可以接受您找到的解决方案,从而将此问题标记为已解决。 - user244343
8个回答

153

我遇到了同样的问题,试图在一部装有 iOS 4.2.1 的 iPhone 3G 上运行新创建的 Xcode 4.2 项目。以下是我成功运行它的方法:

1)将目标的 "Build Settings" ==> "Architecture" 从 "Standard (armv7)" 更改为 "other",然后添加 armv6 和 armv7。

2)将目标的 "Build Settings" ==> "Valid Architecture" 更改为 armv6 和 armv7。

3)将目标的 "Build Settings" ==> "iOS Deployment Target" 更改为 iOS 4.2。

enter image description here

4) 打开项目的 *-Info.plist,删除设置 "Required device capabilities"(注意它需要 armv7) enter image description here

顺便说一句,当我尝试通过“组织者”手动添加应用程序时,它报告了以下信息:

无法安装应用程序

/Users/.../TestsDebug.app 中的 Info.plist 指定了设备能力要求,这些要求未被 Dev iPhone 3G 满足

之后所有都应该正常工作了。真是麻烦。


4
谢谢!我曾在其他地方读到过关于架构设置的内容,但似乎没有其他人提到“必要设备功能”的设置。 - bunnyhero
1
我有同样的问题,但即使项目设置为“标准armv7”架构,有效架构已经指示“armv6 armv7”。此外,在Info.plist中没有“所需设备功能”属性。尽管如此,我会尝试这个技巧,希望它能起作用! - Romain Champourlier
"所需设备功能" 也让我困扰了。 - codecaffeine
请记住,您将无法使用 iOS 4.3+ 中的任何框架。 - Cole Tobin
非常感谢您!我浪费了一整天来解决这个问题。我请你喝啤酒吧。真没想到XCode不够聪明,不能自动报告这个问题。 - Martin Berger
显示剩余3条评论

12

前往 Xcode > 偏好设置 > 下载 并安装旧版本 iOS 的调试支持。


我去了偏好设置,下载并安装了旧操作系统的调试支持,退出Xcode,重新打开Xcode进行清理和构建,但该应用程序仍无法安装在我的旧设备上。现在我完全不知所措了,因为当我看到你的回复时,我确信那会解决我的问题:( - Greg Ellis
1
我也欠你一杯啤酒!这解决了我在升级Xcode 4后遇到的另一个问题!现在我可以调试我的iOS 4.2设备(iPod Touch第二代)了! - Eduardo Costa

3

mmorris帮我接近解决了这个问题... 在Info.plist中,我必须将所需设备功能设置为armv6,而不是armv7。 希望这也能帮助其他人。


1

我发现我需要将armv6添加到架构中,但仍然无法正常工作。现在我已经从所需功能中删除了armv7,问题解决了!


1

您需要连接手机,然后进入组织者。Xcode 应该会自动请求旧版本。

有关更多信息,请参阅开发人员页面。这在 4.2 beta 的说明中有描述。


我已经这样做并点击了“用于开发此设备”,它似乎做了它应该做的事情,但我仍然无法在我的旧设备上从Xcode运行应用程序。 - Greg Ellis

1

我在尝试在旧的iPod Touch上运行我的应用程序时遇到了类似的问题。 我升级到Xcode 4.3.3后,该应用程序无法在旧硬件上通过调试器运行。

我认为这里关于“架构”和“所需设备功能”的其他评论是正确指定的重要细节。 不幸的是,它们并不能解决我的问题。

在我的情况下,我发现构建方案是罪魁祸首。 Xcode 4.3.3提示我在升级项目时从GDB调试器切换到LLDB。 当我将我的方案的运行操作改回GDB时,我能够再次从Xcode在旧硬件上运行该应用程序。


0

如果您之前使用的是旧版本的Xcode,那么这个方法对我有效,对您也应该有效。如果不是,那么您应该按照其他人给出的建议从旧版本的SDK中获取SDK:

sudo cp -a /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk

这个命令与其他命令略有不同,但是那些命令会将文件放在SDKs文件夹本身中 - 我们希望创建一个子目录并以适当的名称命名。


0
在我的情况下,Required device capabilities 中有一行多余的代码enter image description here。我只是将其删除了...

enter image description here

希望能对其他人有所帮助。


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