2017-03-31 116 views
1

我使用的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

回答

0

我從這個鏈接的解決方案: 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