问题 从xcode3切换到xcode4 - 无法将程序加载到旧的iPod Touch上[重复]


可能重复:
iPhone应用程序无法在旧设备上运行(3G,3GS,......) 

我有一个类似的问题(iPhone应用程序无法在旧设备上运行(3G,3GS,......))但该页面上的解决方法对我没有任何作用。我一直在XCode3上开发iOS应用程序,并在运行iOS 4.2.1的旧版第二代iPod Touch上进行测试。在最近几天尝试使用XCode4。

我能够使用模拟器在XCode4下构建和运行应用程序,我最初是在XCode3下开发的,以及全新的XCode4创建的“Hello World”类型。但是,当我尝试将一个放在实际的硬件上时,它会失败,几乎没有错误消息。 XCode4中的调试窗口没有显示任何错误。 XCode顶部中间的活动/状态指示器从“建立[AppName]”直接变为“完成运行[AppName]”,但应用程序永远不会在设备上传输或运行。

如果我通过Organizer查看iPod的控制台,我会看到一堆错误,例如:

Thu Jun 16 15:17:56 unknown lockdownd [16] <Error>:2ff68000 handle_connection:无法从Xcode接收USB消息#6。杀死连接

Thu Jun 16 15:17:56未知com.apple.mobile.lockdown [16] <Notice>:无法接收消息大小

而且我猜它与此有关。我已经尝试从我的Mac上拔掉所有其他USB设备,但没有任何区别。尝试重新启动设备和Mac,但再次没有区别。

我已将iOS部署目标调整为4.2,所以我认为那里没有任何问题。设备在管理器中显示绿点和有效的未过期配置文件。在代码签名属性下,它看起来像:

Code Signing Entity     Don't Code Sign
    Debug               Don't Code Sign
        Any iOS SDK     iPhone Developer (currently matches...[profile I have installed])
    Release             Don't Code Sign
        Any iOS SDK     iPhone Developer (currently matches...[profile I have installed])

设备本身在Schemes下拉列表中显示为:

[DeviceName](4.2.1覆盖Base SDK到5.0)

其他人遇到类似问题或有任何建议吗?


9620
2018-06-16 20:32


起源

嗯...我正在使用Xcode的最新副本,并在运行3.1.3的1g iPod touch上进行精细部署。 - Peter Kazazes


答案:


只是为了推广Thomas对答案的评论,这可能是由于您的设备不支持的CPU架构。 iPhone和iPhone 3G(以及同代的iPod touch)不支持armv7。将“Archiectures”构建设置设置为包含“armv6”,以确保生成的fat二进制包含armv6代码。


7
2017-08-09 22:46



这确实有帮助。您可以通过手动将其(字符串“armv6”)添加到构建设置中的体系结构列表中来添加对armv6体系结构上运行的设备的支持。 - Age Mooij
我看到了这个解决方案,并认为你已经解决了我的问题 - 自从安装iOS 5.0 SDK后,我无法在iPhone 3G上安装/测试应用程序。 (但iPhone 4效果很好)但是 - 这些架构被列为“arm6 arm7” - 我仍然被卡住了。 - radven
更新:我删除了当前的架构并将其重新创建为“armv6 armv7”,现在它可以工作了。好极了! - radven
我有基本相同的问题,与架构混淆似乎没有帮助。 “有效的架构”是“armv6 armv7”,所有三种“架构”都是如此。我尝试过两种方式设置“仅构建活动架构”(无论这意味着什么)。没有快乐。 - Hot Licks
我遇到了这个问题,而且我需要更新的“还有一件事”是 Required device capabilities 在 info.plist。它提到了 armv7,所以我删除了那个条目,这有帮助。 - beetstra


我对XCode 4.1.1和Ipod Touch 2nd gen也有同样的问题。我从其中一个模板开始,无法在我的硬件上运行它。在stackoverflow上找到所有答案,但最好在一个地方找到所有必要的步骤:

  1. 您必须在项目设置(Build Settings选项卡)中将armv6添加到Architectures。你可以把它设置为“armv6 $(ARCHS_STANDARD_32_BIT)”或“armv6 armv7”,没关系。 $(ARCHS_STANDARD_32_BIT)只是一个变量,它等于最新XCode中的“armv7”。

  2. 不要更改Base SDK,“最新的iOS(iOS5.0)”没问题。在“摘要”下,将“部署目标”更改为4.0或您希望作为最低版本的任何iOS版本。

  3. Xcode 4中较新的模板在Info.plist中有一个标准设置,您必须更改。搜索“所需的设备功能”并删除“armv7”。

如果您正在执行步骤1 + 2但忘记了步骤3,则设备日志中会出现“无法接收USB消息”错误,并且在XCode中没有错误消息。为什么会这样做,而不是向您显示提示您“所需设备功能”的错误消息是一个不同的问题。

简而言之: 随着iOS 4.3的更新,Apple开始放弃对armv6平台的支持。较新的硬件使用不同的指令集armv7运行。如果你想支持带有XCode 4的iOS 4,你应该确保你也使用上面的步骤正确地为armv6构建你的项目。


5
2018-01-06 13:52



很棒的总结。不过,即使按照这些步骤,我仍然会把头发拉出来,直到我发现干净(产品 - >清洁)。在此之后,应用程序安装并运行完美。 - BHSPitMonkey


看起来你已经安装了iOS 5.0 SDK。我读得对吗?如果是这样,那将由Apple Developer NDA管理,不应在此处讨论。我会在开发者论坛上发帖。

你有其他运行4.2.1的设备可以安装Xcode吗?你有其他任何设备吗? 一点都不 那可以与您的Xcode安装一起使用吗?


2
2018-06-17 18:52



我的iPad安装工作正常。 - Thomas Feiler
想想我想出来了 - 构建设置下的默认架构是armv7。将它改为armv6让我可以在Touch硬件上运行。 - Thomas Feiler
很高兴你弄清楚了! - jschmidt


请注意,显然架构设置区分大小写。 我手动添加'Armv6',但没有任何工作。 将其改为'armv6'就可以了。


2
2017-11-24 17:43