2017-09-15 92 views
22

所以,現在我已經將我的項目使用斯威夫特4在Xcode 9時,並已開始測試我的應用程序在Xcode 9模擬器的GoogleMaps使用了超過100%的CPU。這是一個包含四個不同標籤的大應用程序,幾乎所有內容都按預期工作。其中一個標籤是使用GoogleMaps的地圖。我從未有過任何麻煩,但是當在Xcode 9建成並顯示在模擬器,其移動地圖時使用的CPU的超過 100%,而且滯後很多。 這是在模擬器上運行時的調試導航器。 我們做了一些自定義繪製,但值得借鑑的不是102%。移動地圖

CPU usage

這隻開始發生我更新的Xcode 9和斯威夫特4 當在Xcode 9在iPhone 7,8或X 模擬器,都與iOS 11調試完畢後,它會略高於100%的CPU,並且每次我嘗試移動它時都會使UI停止更新大約一秒鐘。我開始拖動手勢,但UI只更新一次。有效地給我講述1fps

然而,在Xcode 9上的iPhone 6 模擬器的iOS 9調試時,它就會達到〜移動地圖,而不是落後幾乎一樣時90%。我猜我在這裏得到20-30 fps。 (這可能是相同的FPS我在模擬器得到的Xcode 8.地圖從未在模擬器真正流暢..)

當實際設備上運行(iPhone 7,iOS的11),CPU使用約40%當不斷移動地圖時,工作非常流暢,根本沒有滯後(60fps)。

我也在輸出,只要我打開與地圖的標籤上找到這一點,但我認爲這是不相關的,以這種特殊的問題:

Main Thread Checker: UI API called on a background thread: -[UIApplication applicationState] 
PID: *****, TID: *******, Thread name: com.google.Maps.LabelingBehavior, Queue name: com.apple.root.default-qos.overcommit, QoS: 21 

這是說GoogleMapsAPI呼籲[UIApplication applicationState]在後臺線程。 。

我正在使用GoogleMaps的最新版本:2.4.0。據我所知,這個版本可能不支持Xcode 9/Swift 4等,但我找不到任何有關新版本的信息。

+0

我想你應該問這對谷歌開發的形式太。因爲他們可以給我們打電話給我們。 –

+0

@AbuUlHassan我想過了,但他們在GoogleMapsAPI的支持頁面上聲明,StackOverflow和這些自定義標記(谷歌地圖)由GoogleMapsAPI團隊的幾個成員監視,並鼓勵我們使用它(https:// developers.google.com/maps/documentation/ios-sdk/support)我真的不喜歡他們的問題跟蹤器。 – Sti

+0

@Sti您是否在真實設備上測試過它? – Aznix

回答

17

更新:此問題被固定在Xcode 9.1 Beta 2中

有一個在OpenGLES.framework導致它跳過加載LLVM JIT並回落到解釋着色器的錯誤。這對模擬器嚴重的性能影響,因爲它是完全軟件渲染的OpenGL(包括CoreAnimation,SceneKit等)。

編輯:爲了澄清,這個症狀正是你所描述的:100%或更高的CPU使用率和1fps渲染。這會影響Google Maps SDK和MapKit。

作爲臨時解決辦法,你可以從Beta 3複製libCoreVMClient.dylib到的Xcode 9通用和性能應恢復到它以前。這必須分別爲每個平臺運行時完成。

對於iOS這個位於:Xcode[-beta].app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/OpenGLES.framework/libCoreVMClient.dylib

對於tvOS這是位於:Xcode[-beta].app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/tvOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/OpenGLES.framework/libCoreVMClient.dylib

對於watchOS這是位於:Xcode[-beta].app/Contents/Developer/Platforms/WatchOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/watchOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/OpenGLES.framework/libCoreVMClient.dylib

+0

我仍然有點困惑..這個錯誤對真實設備或只有模擬器有什麼影響嗎?我知道它並沒有在真實的設備上使用100%的CPU,但是它有影響嗎?如果我使用b3中的dylib - 然後編譯並構建並將我的應用程序導出到AppStore,那麼這個構建與使用GM-dylib的構建有何不同?我不完全確定這是什麼類型的文件,如果它有不可預見的副作用,我不願意將其切換出來。 – Sti

+1

此錯誤不會影響設備上的性能。替換dylib不會影響構建或提交到應用商店的內容。它純粹在模擬器運行時間內。您也可以使用Xcode 9下載和使用iOS 10.3運行時(不存在此錯誤)。 – russbishop

+0

好的答案,但我們可以在哪裏下載舊文件?上傳將非常感激。 –