更新到Xcode 5.1后,iOS 7.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体系结构 – 但是很多第三方项目还不支持,所以我build议再次从体系结构设置中删除它(使用armv7armv7s )。 保持它在有效的体系结构设置,但是这指定它可能运行哪些体系结构。

它还引入了一些额外的警告的默认激活,如types转换为长警告 – 在这里相同的计数,当你使用相当一些其他库(作为源代码),你可能会得到很多警告,你不能(或不想到)做了很多。 您可以为这些项目再次禁用警告,或select不立即更新您的项目设置。

必须build立设置 – >体系结构

你可能已经设置了标准体系结构,对吗?

从Xcode 5.1开始,标准架构包括arm64,您还没准备好支持。

select其他.. doubleclick $(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。 避免所有types的:

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

NSInteger我= [aString integerValue](如果它是一个长types,那么你不会有任何麻烦。)

此外,另一个问题可能是当你想从一个值创build一个string。 你可以做的是这样的:

 #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。 通过总是投入一个无符号的长,你将不会再面临任何警告,更重要的是,不会有任何bug。

这个“逻辑”是由苹果自己在一些技术讲座video中介绍的: https : //developer.apple.com/tech-talks/videos/ (video“构build现代iOS游戏”,播放video大约10m00s)