Xcode 7 Beta 6,dyld ___NSArray0__ 崩溃

8

第一次我成功地在Xcode 7中编译了我的应用程序(在beta 4和5中失败了)。所以,我猜这是一个好进展。

然而,当我在我的iPhone 6上加载我的应用程序,iOS 8.4.1,它在调试器中崩溃,并显示以下消息:

dyld: 找不到符号:_NSArray0 引用自:/private/var/mobile/Containers/Bundle/Application/0294DF62-AE80-485D-BB11-8C3A5D39777D/Boxtiq.app/Boxtiq 预期在:/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation 位于:/private/var/mobile/Containers/Bundle/Application/0294DF62-AE80-485D-BB11-8C3A5D39777D/Boxtiq.app/Boxtiq

这是否与链接的库的顺序有关?期待一些建议。

谢谢!


当我在我的iPhone 6上加载我的应用程序,iOS 8.4.1时,你不能从Xcode 7 beta运行在iOS 8设备上。 - matt
7个回答

22

我通过在Podfile中加入以下内容来解决了这个问题。 platform :ios, '8.4' 无需升级设备至iOS 9并丢失对iOS 8.4的测试。


2
这对我很有效。比被接受的答案更好,因为我不想更新我的设备。 - JRam13
1
这个修复方法可行。正如你所提到的,问题的根源在于“部署目标”设置。如果你正在使用Pods,你还应该更新集成Pods项目中的部署目标。为了使它运行,请执行“pod update”以重新将Pods集成到工作区。清理所有内容。运行。 - Ilia

19

我之前遇到了同样的错误,后来解决了。 我移除了CoreFoundation.framework,然后重新添加并将状态设置为“可选”,就可以正常工作了。


设置可选项就足够了,不需要再删除和添加。 - DawnSong

6
如果在运行单元测试时出现此问题,请按照以下步骤操作:
  1. 选择单元测试目标
  2. 转到“构建设置”
  3. 搜索“部署目标”
  4. 将部署目标版本更改为项目的部署目标
就这样! enter image description here

这是我的问题。 - LightningStryk
嘿,很高兴能帮上忙 :) - Sergey Katranuk
请注意,您必须为主项目和所有子项目设置此项 - 在主项目中,此项出现在“常规”下,但在子项目(库)中,此项出现在“部署”下,如图所示。最简单的方法是在每个子项目的“构建设置”下使用搜索框。我没有添加任何内容,只是试图使其更加清晰明了。谢谢Serghei! - Andy Weinstein

4
在使用新版本的XCODE构建iOS8时,出现了一个问题。请删除CoreFoundation.framework,然后将其以“可选”的状态重新添加。

4

我也遇到了这个问题,我通过将CoreFoundation.framework框架添加到“构建设置(Build Settings)”中来解决它。


1
项目概述 ==> 链接的框架和库 ==> 添加CoreFoundation(将状态设置为“可选”) - liaogang

2
我曾经在更新Xcode至7.0 GM版本(7A218)后,在编译Mac OS项目时遇到了同样的错误。Xcode 7仅包含10.11 SDK(你可以在/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs中查看,其中有一个名为MacOSX10.11.sdk的文件)。在编译时,xcode将从/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks链接框架,但在运行时则从/System/Library/Frameworks/中链接框架。
我在我的Mac上运行着OS X 10.10.5 (14F27)系统。我使用xcode 7构建了静态库(如前所述,使用了MacOSX10.11.sdk),并将其链接到我的项目中。然而,在运行时,我遇到了以下错误:
dyld: Symbol not found: _NSArray0
我认为这是因为该库已经使用来自Mac OS SDK 10.11的CoreFoundation.framework进行了编译,但在运行时却链接到了/System/Library/Frameworks/中版本为10.10的CoreFoundation.framework。
我的解决方法是向我的Xcode添加了我的朋友旧版的Xcode 6,并从中获取了Mac OS SDK 10.10(如您记得,在/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs中有一个名为MacOSX10.10.sdk的文件),并使用10.10 SDK重新构建了我的静态库(您可以在命令行中使用“-sdk macosx10.10”参数进行编译,或在Build Settings => Base SDK中设置构建SDK)。这样问题就得到了解决。
我认为对于iOS,您也可以采用相同的策略。

1

我在使用安装了第一个iOS 9 beta版本的设备上运行Xcode 7.0 beta 6时遇到了完全相同的崩溃问题,但在使用模拟器时并没有发生崩溃。

在将我的iPhone更新至iOS 9 beta 5后,崩溃问题停止了。


谢谢Johnny和Matt。你们如何建议进行向后兼容性测试?暂时我假设iOS8上的新用户将搜索该应用程序并安装我们的应用程序,这将导致崩溃。有什么想法吗? - Sachin
我知道这对你来说可能不太可能,但是我有两台设备,一台安装了iOS 8,另一台安装了iOS 9。我还同时安装了Xcode 6.4和Xcode 7.0 beta,这样我就能够继续为两个版本进行开发了。 - johnnyg17
此外,苹果公司不允许iOS 8用户下载面向iOS 9的应用程序,因此您只需要担心版本是否与目标部署相同或更高。我几乎可以确定,只要您在应用商店中已经有一个iOS 8版本可用,即使在发布iOS 9版本后,苹果公司也会让他们下载iOS 8版本。 - johnnyg17
3
我仍然认为这是我当前的iOS8版本中存在的问题,因为昨天发布的新XCODE版本没有解决它。这可能是一个严重的问题,因为那些不立即升级到iOS9并安装该应用程序的人将无法加载该应用程序。 :( - Sachin

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