未定义的符号:MPMusicPlayerController

问题描述:

我使用的XCode 8.3,斯威夫特3未定义的符号:MPMusicPlayerController

我得到有关AudioToolboxFramework和x86_64架构以下错误:

Undefined symbols for architecture x86_64: 
    "_OBJC_CLASS_$_MPMusicPlayerController", referenced from: 
     objc-class-ref in libdtdev.a(AudioStream.o) 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

我的项目针对iOS的10.3和在构建设置的架构被列为: Standard Architecture (armv7, arm64) - $(ARCH_STANDARD)

有效的体系结构: arm64 armv7 armv7s

对于设置Build Active Architectures Only,我已将它设置为YES用于DEBUG,NO用于RELEASE。

有谁能告诉我为什么我仍然收到有关x86_64的错误?它可能来自另一个框架吗?

我Podfile包含:

pod 'Alamofire', '~> 4.4' 
pod 'SwiftyJSON' 
pod 'Fabric' 
pod 'Crashlytics' 
pod 'ReachabilitySwift' 

其实,我只是改变了Build Active Architectures Only调试到NO,并得到了很多错误的说法No such module 'ReachabilitySwift'所以也许它涉及到该库?如果我从General -> Linked Frameworks and Libraries删除AudioToolbox.framework,我也会得到同样的错误。

而且,我跑: lipo -info ./MyProject/Library/libdtdev.a

,并得到这个: Architectures in the fat file: ./MyProject/Library/libdtdev.a are: armv7 i386 x86_64 arm64

所以肯定是有一些定义x86_64的牌坊。

+0

架构x86_64的未定义符号 - 这意味着您的SDK不支持模拟器,请在设备中检查一次 –

+0

检查设备?就像在iPhone上运行一样?当我执行CMD + B构建时,会出现错误。因此,如果我连接了设备,这并不重要。或者你的意思是我需要修改我的模拟器? – eoinzy

我从这个链接的解决方案: MPMusicPlayerController and setNowPlayingItem

的解决方案是将MediaPlayer.framework添加到链接的框架和库。

+0

这很奇怪。这应该在您导入时自动完成。 – Sulthan

+0

这很奇怪,但我将应用程序从Xcode 7.3/Swift2升级到了Xcode 8.3/Swift3,所以在翻译过程中一定会迷失方向。我也是一名Android开发人员,在iOS人离开公司之后我才接管,所以我相信一个更好的iOS开发人员可能会看到其他方法来修复它! – eoinzy

+0

查看“语言 - 模块”下的项目设置,特别是“自动链接框架”和“启用模块”。您应该在Xcode 8的pod文件中使用'use_frameworks !'。 – Sulthan