繁体   English   中英

更新到Xcode 5.1后,iOS 7.1会出错

[英]iOS 7.1 gives error after updating to Xcode 5.1

我最近将我的Xcode更新到了5.1版。 更新后,它可以在除iOS 7.1之外的所有模拟器上正常运行,其中会出现mach-O链接错误。 此外,“构建设置”选项卡中只有64位架构选项。 据我所知,这是所有问题和错误的原因。 有谁知道这个的原因以及如何解决它?

以下是我收到的一些警告和错误:

警告 :

Values of type 'NSInteger' should not be used as format arguments; add an explicit cast to 'long' instead

错误:

Symbol(s) not found for architecture x86_64

谢谢。

Xcode 5.1改变了标准项目设置。 其中它现在包括项目的arm64架构 - 但是很多第三方项目还不支持,所以我建议再次从架构设置中删除它(让你使用armv7armv7s )。 尽管如此,请将其保留在有效的体系结构设置中 - 这指定了它可以运行的体系结构。

它还引入了一些额外警告的默认激活,例如长期警告的类型转换 - 这里计算相同,当你使用其他一些库(作为源代码)时,你可能会得到很多警告,你不能(或者不想要) to)做很多事情。 您可以再次为这些项目禁用警告,或选择不立即更新项目设置。

必须构建设置 - >架构

您可能已设置标准体系结构,对吧?

从Xcode 5.1开始,标准架构包含arm64,您尚未准备好支持它。

选择其他..双击$(ARCHS_STANDARD)并将其更改为$(ARCHS_STANDARD_32_BIT)

注意:这是一个临时修复。 您可能正在使用一些没有64位切片的静态库。 查看是否有可用的,然后将架构切换回标准架构。

事实上,XCode现在包含arm64架构。 NSInteger现在完全不同,因为它在NSObjCRuntime.h中定义:

#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif

要处理它,你应该改进你的代码库。 首先,你必须非常一致。 仅将NSInteger分配给NSInteger而不分配给int。 避免各种:

int i = [aString integerValue](因为它返回一个NSInteger)

NSInteger i = [aString integerValue](如果它是一个long类型,那么你将没有任何麻烦。)

此外,您可能遇到的另一个问题是当您想要从值创建字符串时。 你能做的是:

#define cL(v)    (long)(v)
#define cUL(v)   (unsigned long)(v)

NSLog(@"array.count: %ld", cUL(anArray.count));

array.count返回armv7(s)下的unsigned int和arm64下的unsigned long。 通过始终投入无符号长度,您将不会再遇到任何警告,更重要的是,不会遇到任何错误。

这个“逻辑”已经由Apple自己介绍了一些技术会谈视频: https//developer.apple.com/tech-talks/videos/ (视频“架构现代iOS游戏”。播放视频大约10分钟)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM