I'm getting frequent crashes from one of our apps when using the ESRI OSM Vector basemap
https://www.arcgis.com/home/item.html?id=fae788aa91e54244b161b59725dcbb2a
Crashes typically occur when zooming in on areas with crowded/complicated features (eg.. building outlines in Honolulu). I've tried this with both the online as well as an offline VTPK with similar results.
Apologies for the giant log dump, but I'm not quite clear where the crash is occurring in y'alls SDK:
ArcGIS
Esri_runtimecore::Geometry::Transformation_2D::multiply(Esri_runtimecore::Geometry::Transformation_2D const&, Esri_runtimecore::Geometry::Transformation_2D const&, Esri_runtimecore::Geometry::Transformation_2D&)
ArcGIS
Esri_runtimecore::Cim_rasterizer::Symbol_draw_helper::to_dev_transfo()
ArcGIS
Esri_runtimecore::Map_renderer::Draw_helper_base::Shape_helper::Shape_helper(Esri_runtimecore::Map_renderer::Draw_helper_base&, Esri_runtimecore::Geometry::Multi_path const&, Esri_runtimecore::Common::Color_RGBA const&)
ArcGIS
Esri_runtimecore::Map_renderer::Display_list_draw_helper::draw_solid_fill(Esri_runtimecore::Geometry::Multi_path const&, Esri_runtimecore::Common::Color_RGBA)
ArcGIS
Esri_runtimecore::Cim_rasterizer::Symbol_draw_helper::draw_layer_(std::__1::shared_ptr<Esri_runtimecore::Cim_rasterizer::Symbol_layer const> const&, std::__1::shared_ptr<Esri_runtimecore::Geometry::Geometry> const&)
ArcGIS
Esri_runtimecore::Cim_rasterizer::Symbol_draw_helper::draw_layers_(std::__1::vector<std::__1::shared_ptr<Esri_runtimecore::Cim_rasterizer::Symbol_layer>, std::__1::allocator<std::__1::shared_ptr<Esri_runtimecore::Cim_rasterizer::Symbol_layer> > > const&, std::__1::shared_ptr<Esri_runtimecore::Geometry::Geometry> const&)
ArcGIS
Esri_runtimecore::Cim_rasterizer::Symbol_draw_helper::draw_(std::__1::shared_ptr<Esri_runtimecore::Cim_rasterizer::Symbol> const&, std::__1::shared_ptr<Esri_runtimecore::Geometry::Geometry> const&)
ArcGIS
Esri_runtimecore::Cim_rasterizer::Symbol_draw_helper::draw(std::__1::shared_ptr<Esri_runtimecore::Cim_rasterizer::Symbol> const&, std::__1::shared_ptr<Esri_runtimecore::Geometry::Geometry> const&)
ArcGIS
Esri_runtimecore::Cim_rasterizer::Symbol_draw_helper::draw(std::__1::shared_ptr<Esri_runtimecore::Cim_rasterizer::Symbol> const&, std::__1::shared_ptr<Esri_runtimecore::Geometry::Geometry> const&, std::__1::shared_ptr<Esri_runtimecore::Cim_rasterizer::Overrides> const&)
ArcGIS
Esri_runtimecore::Map_renderer::Item_draw_queue::post_item(std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Canvas_layer::Item> const&)
ArcGIS
Esri_runtimecore::Map_renderer::Static_vector_layer::load_items_for_display_(Esri_runtimecore::Map_renderer::Canvas_layer::Item::Queue&, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Canvas_layer::Render_properties> const&, std::__1::vector<Esri_runtimecore::Geometry::Envelope_2D, std::__1::allocator<Esri_runtimecore::Geometry::Envelope_2D> > const&)
ArcGIS
Esri_runtimecore::Map_renderer::Canvas_renderer::draw_to_display_list_(std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Display_list> const&, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Canvas_layer> const&, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Canvas_layer::Render_properties> const&, bool)
ArcGIS
std::__1::__function::__func<Esri_runtimecore::Map_renderer::Canvas_drawable::add_draw_task_(std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Canvas_renderer::Draw_request> const&)::$_6, std::__1::allocator<Esri_runtimecore::Map_renderer::Canvas_drawable::add_draw_task_(std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Canvas_renderer::Draw_request> const&)::$_6>, void ()>::operator()()
ArcGIS
std::__1::__function::__func<pplx::details::_MakeVoidToUnitFunc(std::__1::function<void ()> const&)::$_2, std::__1::allocator<pplx::details::_MakeVoidToUnitFunc(std::__1::function<void ()> const&)::$_2>, unsigned char ()>::operator()()
ArcGIS
pplx::details::_PPLTaskHandle<unsigned char, pplx::task<unsigned char>::_InitialTaskHandle<void, Esri_runtimecore::Map_renderer::Canvas_drawable::add_draw_task_(std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Canvas_renderer::Draw_request> const&)::$_6, pplx::details::_TypeSelectorNoAsync>, pplx::details::_TaskProcHandle>::invoke() const
ArcGIS
pplx::details::_TaskProcHandle::_RunChoreBridge(void*)
ArcGIS
Esri_runtimecore::Common::Core_scheduler::bridge_proc_(void*)
ArcGIS
Esri_runtimecore::Common::Queued_thread::process_message_(std::__1::shared_ptr<Esri_runtimecore::Common::Message_queue::Message> const&)
ArcGIS
Esri_runtimecore::Common::Queued_thread::execute_()
ArcGIS
Esri_runtimecore::Common::Thread::thread_proc_(Esri_runtimecore::Common::Thread*)
ArcGIS
void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(Esri_runtimecore::Common::Thread*), Esri_runtimecore::Common::Thread*> >(void*)
Is there something I can do to get additional debug information out of the SDK?
I'm sorry to hear you are having problems. The crash dump is great and helps a lot. Can you provide some additional info which will help us debug this?
- Runtime SDK version (100.9, 100.8, etc.)
- Xcode version
- Does the crash happen on simulator or device or both?
- iOS version the crash happens on?
- If on device, which model iPhone/iPad?
Thank you.
Mark
Sorry hit send a bit too quick before adding all that...
Attached a small video clip of the crash. I'll try bumping to 100.9 and see if that helps.
Switched to 100.9 and it's still happening. Interestingly enough if I load the same basemap or VTPK into Field Maps I can't seem to crash it.
Thanks for the additional info. I was able to reproduce the crash locally with the map you sent in the simulator, but I got a different call stack. I'll keep you posted on what I find out.
-Mark
Thanks for taking a look Mark - I think I'm actually seeing this one reported in a variety ways, I dug a little deeper into the AppCenter logs and it looks like this is the most frequent reported stack:
MAIN THREAD - CRASHED
libc++.1.dylib
std::__1::__shared_weak_count::lock()
ArcGIS
Esri_runtimecore::Rendering_engine::GPU_texture::~GPU_texture()
ArcGIS
std::__1::__shared_ptr_pointer<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk*, std::__1::default_delete<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk>, std::__1::allocator<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >::__on_zero_shared()
ArcGIS
std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk>::~shared_ptr()
ArcGIS
std::__1::__tree<std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >, std::__1::__map_value_compare<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >, std::__1::less<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index>, true>, std::__1::allocator<std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> > > >::destroy(std::__1::__tree_node<std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >, void*>*)
ArcGIS
std::__1::__tree<std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >, std::__1::__map_value_compare<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >, std::__1::less<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index>, true>, std::__1::allocator<std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> > > >::destroy(std::__1::__tree_node<std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >, void*>*)
ArcGIS
std::__1::__tree<std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >, std::__1::__map_value_compare<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >, std::__1::less<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index>, true>, std::__1::allocator<std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> > > >::destroy(std::__1::__tree_node<std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >, void*>*)
ArcGIS
std::__1::__tree<std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >, std::__1::__map_value_compare<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >, std::__1::less<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index>, true>, std::__1::allocator<std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> > > >::destroy(std::__1::__tree_node<std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >, void*>*)
ArcGIS
std::__1::__tree<std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >, std::__1::__map_value_compare<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >, std::__1::less<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index>, true>, std::__1::allocator<std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> > > >::destroy(std::__1::__tree_node<std::__1::__value_type<Esri_runtimecore::Map_renderer::Image_drawable::Chunk_index, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Image_drawable::Image_container::Chunk> >, void*>*)
ArcGIS
std::__1::__shared_ptr_emplace<Esri_runtimecore::Common::enable_make_shared<Esri_runtimecore::Map_renderer::Image_drawable::Image_container>, std::__1::allocator<Esri_runtimecore::Common::enable_make_shared<Esri_runtimecore::Map_renderer::Image_drawable::Image_container> > >::__on_zero_shared()
ArcGIS
Esri_runtimecore::Map_renderer::Image_drawable::draw_(Esri_runtimecore::Rendering_engine::Device*, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Display_properties>, float, Esri_runtimecore::Map_renderer::Chunk_set, Esri_runtimecore::Rendering_engine::GPU_frame_buffer_view const&)
ArcGIS
Esri_runtimecore::Map_renderer::Canvas_drawable::draw(std::__1::shared_ptr<Esri_runtimecore::Rendering_engine::Device> const&, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Drawable::Render_properties> const&, std::__1::shared_ptr<Esri_runtimecore::Map_renderer::Display_properties> const&)
ArcGIS
Esri_runtimecore::Map_renderer::Map::draw(std::__1::shared_ptr<Esri_runtimecore::Rendering_engine::Device> const&)
ArcGIS
Esri_runtimecore::Geo_views::Map_view::draw(Esri_runtimecore::Geo_views::Device&)
ArcGIS
RT_GeoView_draw
ArcGIS
-[RTCGeoView draw:error:] RTCGeoView.m:607
ArcGIS
-[AGSMetalGeoViewRenderer drawRequested] AGSMetalGeoViewRenderer.m:99
ArcGIS
-[AGSGeoView setRtcGeoView:] AGSGeoView.m:307
ArcGIS
drawRequestedHandler RTCGeoView.m:279
ArcGIS
_ZN16Esri_runtimecore6Common4SlotIFvRKNS_9Geo_views8Geo_viewEEE12target_modelIZNKS0_6SignalIS6_E7connectINSt3__18functionIFvPvEEEEEvSE_OT_EUlNS0_14Signal_contextIS6_EESI_DpOT0_E_E6invokeEPKvS5_
ArcGIS
Esri_runtimecore::Common::Signal_detail::Signal_base::notify_(Esri_runtimecore::Common::Function_ref<void (Esri_runtimecore::Common::Signal_detail::erased_target_base&)>) const
ArcGIS
Esri_runtimecore::Geo_views::Geo_view_draw_requested::draw_request_callback()
ArcGIS
Esri_runtimecore::Map_renderer::Map::on_pulse_()
ArcGIS
RT_GeoView_pulse
ArcGIS
-[RTCGeoView pulse:] RTCGeoView.m:784
ArcGIS
-[AGSMetalGeoViewRenderer drawInMTKView:] AGSMetalGeoViewRenderer.m:85
MetalKit
-[MTKView draw]
I have created an internal issue for this problem and have forwarded it on to the appropriate team. I was able to reproduce the issue both in the Simulator and on a device, although it took me a minute or two of panning/zooming around Honolulu to get it to crash. As of this time, I don't have a work-around for you, except to try a different base map.
Mark
Thanks Mark - the area around Fort DeRusy has been pretty consistent in causing crashes for me. It primarily happens when zooming in quickly.
My field crews aren't particularly bothered by the crashes... they just open the app back up and carry on, but it seemed worth mentioning. We haven't seen crashes like this with any of the other vector basemaps. Perhaps some bad geometry snuck through from OSM and is causing issues.
Thank you, I will pass that on!
We think we found the cause of this crash and have installed a fix. It should be available in the next release, update 11