2017-09-15 97 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

好的答案,但我们可以在哪里下载旧文件?上传将非常感激。 –