{"id":353762,"date":"2019-02-21T15:43:33","date_gmt":"2019-02-21T23:43:33","guid":{"rendered":"http:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=353762"},"modified":"2019-02-21T15:43:33","modified_gmt":"2019-02-21T23:43:33","slug":"migrating-from-google-to-runtime-sdk-ios","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios","title":{"rendered":"Migrating from Google&#8217;s Maps SDK to the ArcGIS Runtime SDK for iOS"},"author":3811,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[37101],"tags":[23451,38851,24531,214052],"industry":[],"product":[36891],"class_list":["post-353762","blog","type-blog","status-publish","format-standard","hentry","category-announcements","tag-arcgis-runtime","tag-developers","tag-ios","tag-migrate-from-google","product-api-ios"],"acf":{"short_description":"If Google's price changes have you looking for a new iOS Mapping solution, look no further.","flexible_content":[{"acf_fc_layout":"content","content":"<p>Have your costs to include Google maps in your application drastically increased with the <a href=\"https:\/\/cloud.google.com\/maps-platform\/user-guide\/pricing-changes\/\" target=\"_blank\" rel=\"noopener\">pricing changes<\/a> Google introduced last year? If so, you aren\u2019t alone. This price increase has driven many iOS developers migrate to the ArcGIS Runtime SDK for iOS. There are a couple of reasons for this.<\/p>\n<p>First,\u00a0<a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/\">ArcGIS Runtime<\/a> is a state-of-the-art mapping technology that provides support for many different types of map data. Not only can you visualize, explore and interact with large amounts of geospatial data in 2D and 3D, but you can also search for places and addresses, find the best routes between multiple locations, and manipulate all this spatial data on the client to build truly powerful interactive location based apps.<\/p>\n<p>Second, you get a lot for free with an <a href=\"https:\/\/developers.arcgis.com\/pricing\/\">ArcGIS for Developers &#8220;Essentials&#8221; plan<\/a>:<\/p>\n<ul>\n<li>1,000,000 basemap and geosearch transactions per month<\/li>\n<li>Unlimited non-revenue generating apps (public or enterprise)<\/li>\n<li>Unlimited users<\/li>\n<li>Credits towards generating routes (up to 10,000 free each month)<\/li>\n<li>Style basemaps and manage your map content<\/li>\n<li>Host, query and analyze geographic content<\/li>\n<li>Take your maps and data offline<\/li>\n<li>Access a wide selection of rich content and services hosted in ArcGIS Online<\/li>\n<li>Use of all of Esri&#8217;s APIs and SDKs for web, native, and mobile platforms<\/li>\n<\/ul>\n<p>Find out more about what&#8217;s included with the Essentials plan in our <a href=\"https:\/\/developers.arcgis.com\/terms\/faq\/\">FAQ<\/a>.<\/p>\n<h3>Get started with the Runtime SDK<\/h3>\n<p>Simply sign up for a free developer account at <a href=\"https:\/\/developers.arcgis.com\">developers.arcgis.com<\/a> (no payment info needed).<\/p>\n<p>Next, download and install the SDK <a href=\"https:\/\/developers.arcgis.com\/downloads\/apis-and-sdks?product=ios\">here<\/a>\u00a0(installation of the ArcGIS Runtime SDK for iOS via Cocoapods or manual install is covered in <a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/swift\/guide\/install.htm\">this guide topic<\/a>).<\/p>\n<p>It&#8217;s that easy. There&#8217;s no API key needed to get rolling. You&#8217;re ready to go.<\/p>\n<p>Now let&#8217;s look at some common scenarios and how to translate from Google&#8217;s approach to the ArcGIS Runtime SDK.<\/p>\n"},{"acf_fc_layout":"content","content":"<h3>Display a map<\/h3>\n<p>First of all, let&#8217;s add a map to an iOS application.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":413822,"id":413822,"title":"","filename":"2019-01-18_11-09-21-e1547829939324.png","filesize":426305,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-09-21-e1547829939324.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios\/2019-01-18_11-09-21","alt":"Basemap in Runtime SDK","author":"3811","description":"","caption":"","name":"2019-01-18_11-09-21","status":"inherit","uploaded_to":353762,"date":"2019-01-18 16:44:20","modified":"2019-01-18 21:49:41","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1232,"height":338,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-09-21-e1547829939324-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-09-21-e1547829939324-300x82.png","medium-width":300,"medium-height":82,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-09-21-e1547829939324-768x211.png","medium_large-width":768,"medium_large-height":211,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-09-21-e1547829939324-1024x281.png","large-width":1024,"large-height":281,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-09-21-e1547829939324.png","1536x1536-width":1232,"1536x1536-height":338,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-09-21-e1547829939324.png","2048x2048-width":1232,"2048x2048-height":338,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-09-21-e1547829939324-826x227.png","card_image-width":826,"card_image-height":227,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-09-21-e1547829939324.png","wide_image-width":1232,"wide_image-height":338}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>Here&#8217;s how you display a simple map using Google&#8217;s Maps SDK for iOS:<\/p>\n<pre><code style=\"font-size: 70%;padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #333;font-weight: bold\">import<\/span> UIKit\r\n<span style=\"color: #333;font-weight: bold\">import<\/span> GoogleMaps\r\n\r\n<span style=\"color: #333;font-weight: bold\">class<\/span> <span style=\"color: #458;font-weight: bold\">DemoViewController<\/span>: <span style=\"color: #458;font-weight: bold\">UIViewController<\/span> {\r\n  <span style=\"color: #333;font-weight: bold\">override<\/span> <span style=\"color: #333;font-weight: bold\">func<\/span> <span style=\"color: #900;font-weight: bold\">loadView<\/span>() {\r\n    <span style=\"color: #333;font-weight: bold\">let<\/span> camera = <span style=\"color: #458;font-weight: bold\">GMSCameraPosition<\/span>.camera(withLatitude: <span style=\"color: #008080\">40.72<\/span>,\r\n                                            longitude: -<span style=\"color: #008080\">74<\/span>, \r\n                                            zoom: <span style=\"color: #008080\">6.0<\/span>)\r\n    <span style=\"color: #333;font-weight: bold\">let<\/span> mapView = <span style=\"color: #458;font-weight: bold\">GMSMapView<\/span>.<span style=\"color: #0086b3\">map<\/span>(withFrame: .zero, camera: camera)\r\n    view = mapView\r\n  }\r\n}\r\n<\/code><\/pre>\n<p>And here&#8217;s the same map using the ArcGIS Runtime SDK for iOS:<\/p>\n<pre><code style=\"font-size: 70%;padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #333;font-weight: bold\">import<\/span> UIKit\r\n<span style=\"color: #333;font-weight: bold\">import<\/span> ArcGIS\r\n\r\n<span style=\"color: #333;font-weight: bold\">class<\/span> <span style=\"color: #458;font-weight: bold\">DemoViewController<\/span>: <span style=\"color: #458;font-weight: bold\">UIViewController<\/span> {\r\n  <span style=\"color: #333;font-weight: bold\">override<\/span> <span style=\"color: #333;font-weight: bold\">func<\/span> <span style=\"color: #900;font-weight: bold\">loadView<\/span>() {\r\n    <span style=\"color: #333;font-weight: bold\">let<\/span> mapView = <span style=\"color: #458;font-weight: bold\">AGSMapView<\/span>(frame: .zero)\r\n    mapView.<span style=\"color: #0086b3\">map<\/span> = <span style=\"color: #458;font-weight: bold\">AGSMap<\/span>(basemapType: .navigationVector,\r\n                         latitude: <span style=\"color: #008080\">40.72<\/span>, longitude: -<span style=\"color: #008080\">74<\/span>, \r\n                         levelOfDetail: <span style=\"color: #008080\">6<\/span>)\r\n    view = mapView\r\n  }\r\n}\r\n<\/code><\/pre>\n<p>Notice the reference to a\u00a0<a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/api-reference\/_a_g_s_enumerations_8h.html#a1cbc78a8a4258e59d3c5e7a16a0cdb84\"><em>basemap<\/em><\/a>. A basemap typically includes roads, buildings, satellite imagery, place names, boundaries etc. that give your application&#8217;s data some context.<\/p>\n<p>You can choose from many ready-to-use basemaps from both Esri and third parties, and can style your own using the <a href=\"https:\/\/developers.arcgis.com\/vector-tile-style-editor\/\" target=\"_blank\" rel=\"noopener\">Vector Tile Style Editor<\/a>.<\/p>\n<p>Notice also that Runtime uses both a <a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/api-reference\/interface_a_g_s_map.html\"><em>map<\/em><\/a> and a <a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/api-reference\/interface_a_g_s_map_view.html\"><em>map view<\/em><\/a>. The map view is the UI component that handles user interactions and display of the map while the map is responsible for defining the data to be displayed (including the basemap).<\/p>\n"},{"acf_fc_layout":"content","content":"<h3>Add a marker<\/h3>\n<p>Now we&#8217;ll add some information to the map.<\/p>\n<p>In Google&#8217;s Maps SDK for iOS, you add a <em>marker<\/em>:<\/p>\n<pre><code style=\"font-size: 70%;padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #333;font-weight: bold\">class<\/span> <span style=\"color: #458;font-weight: bold\">DemoViewController<\/span>: <span style=\"color: #458;font-weight: bold\">UIViewController<\/span> {\r\n  <span style=\"color: #333;font-weight: bold\">override<\/span> <span style=\"color: #333;font-weight: bold\">func<\/span> <span style=\"color: #900;font-weight: bold\">loadView<\/span>() {\r\n    ...\r\n    <span style=\"color: #998;font-style: italic\">\/\/ Create and add a marker<\/span>\r\n    <span style=\"color: #333;font-weight: bold\">let<\/span> marker = <span style=\"color: #458;font-weight: bold\">GMSMarker<\/span>()\r\n    marker.position = <span style=\"color: #458;font-weight: bold\">CLLocationCoordinate2D<\/span>(latitude: <span style=\"color: #008080\">40.72<\/span>, longitude: -<span style=\"color: #008080\">74<\/span>)\r\n    marker.title = <span style=\"color: #d14\">\"New York\"<\/span>\r\n    marker.snippet = <span style=\"color: #d14\">\"USA\"<\/span>\r\n    marker.<span style=\"color: #0086b3\">map<\/span> = mapView\r\n<\/code><\/pre>\n<p>The ArcGIS Runtime SDK equivalent is to add a <em>graphic\u00a0<\/em>to a\u00a0<em>graphics overlay<\/em>:<\/p>\n<pre><code style=\"font-size: 70%;padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #333;font-weight: bold\">class<\/span> <span style=\"color: #458;font-weight: bold\">DemoViewController<\/span>: <span style=\"color: #458;font-weight: bold\">UIViewController<\/span> {\r\n  <span style=\"color: #998;font-style: italic\">\/\/ Create a graphics overlay to contain graphics.<\/span>\r\n  <span style=\"color: #333;font-weight: bold\">let<\/span> overlay = <span style=\"color: #458;font-weight: bold\">AGSGraphicsOverlay<\/span>()\r\n\r\n  <span style=\"color: #333;font-weight: bold\">override<\/span> <span style=\"color: #333;font-weight: bold\">func<\/span> <span style=\"color: #900;font-weight: bold\">loadView<\/span>() {\r\n    ...\r\n    <span style=\"color: #998;font-style: italic\">\/\/ Add the graphics overlay to the map view.<\/span>\r\n    mapView.graphicsOverlays.add(overlay)\r\n\r\n    <span style=\"color: #998;font-style: italic\">\/\/ Create a graphic and add it to the graphics overlay.<\/span>\r\n    <span style=\"color: #333;font-weight: bold\">let<\/span> graphic = <span style=\"color: #458;font-weight: bold\">AGSGraphic<\/span>(geometry: <span style=\"color: #458;font-weight: bold\">AGSPointMakeWGS84<\/span>(<span style=\"color: #008080\">40.72<\/span>, -<span style=\"color: #008080\">74<\/span>), \r\n                               symbol: <span style=\"color: #458;font-weight: bold\">AGSSimpleMarkerSymbol<\/span>(style: .circle, \r\n                                                                color: .red, \r\n                                                                size: <span style=\"color: #008080\">10<\/span>),\r\n                               attributes: [ <span style=\"color: #d14\">\"city\"<\/span>: <span style=\"color: #d14\">\"New York\"<\/span>,\r\n                                             <span style=\"color: #d14\">\"country\"<\/span>: <span style=\"color: #d14\">\"USA\"<\/span> ])\r\n    overlay.graphics.add(graphic)<\/code><\/pre>\n"},{"acf_fc_layout":"image","image":{"ID":413862,"id":413862,"title":"","filename":"2019-01-18_11-07-54.png","filesize":473533,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-07-54.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios\/2019-01-18_11-07-54","alt":"A Runtime SDK map with a simple marker","author":"3811","description":"","caption":"","name":"2019-01-18_11-07-54","status":"inherit","uploaded_to":353762,"date":"2019-01-18 16:50:06","modified":"2019-01-18 21:51:09","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1019,"height":368,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-07-54-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-07-54-300x108.png","medium-width":300,"medium-height":108,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-07-54-768x277.png","medium_large-width":768,"medium_large-height":277,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-07-54.png","large-width":1019,"large-height":368,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-07-54.png","1536x1536-width":1019,"1536x1536-height":368,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-07-54.png","2048x2048-width":1019,"2048x2048-height":368,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-07-54-826x298.png","card_image-width":826,"card_image-height":298,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-07-54.png","wide_image-width":1019,"wide_image-height":368}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>A <a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/api-reference\/interface_a_g_s_graphic.html\">graphic<\/a> is a combination of <a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/api-reference\/interface_a_g_s_geometry.html\"><em>geometry<\/em><\/a> (in this case a point, but it could be a polyline or polygon), <em>attribute<\/em> content (key-value pairs), and a display style (known as a <a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/api-reference\/interface_a_g_s_symbol.html\"><em>symbol<\/em><\/a> in the Runtime). Graphics are very flexible, and you can think of a marker as just a very simple point graphic.<\/p>\n<p>You&#8217;ll notice that we need to configure the map view with a <a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/api-reference\/interface_a_g_s_graphics_overlay.html\"><em>graphics overlay<\/em><\/a>\u00a0to contain the graphics we want to show. Graphics overlays and <em>Layers<\/em> provide a powerful model for data access and for displaying data from various sources. For more on this, see the guide topics on <a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/swift\/guide\/maps-and-scenes.htm\" target=\"_blank\" rel=\"noopener\">Maps and scenes<\/a> and on <a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/swift\/guide\/layers.htm\" target=\"_blank\" rel=\"noopener\">Layers and tables<\/a>.<\/p>\n"},{"acf_fc_layout":"content","content":"<h3>Display information<\/h3>\n<p>In the Runtime SDK, you display information associated with a map location using a <a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/api-reference\/interface_a_g_s_callout.html\"><em>callout<\/em><\/a>, which is <a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/api-reference\/interface_a_g_s_geo_view.html#a5b531613c34a97ed8747aaeb86466379\">associated with a map view<\/a>, and which you must explicitly display or dismiss.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":413912,"id":413912,"title":"","filename":"2019-01-18_11-57-22.png","filesize":271248,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-57-22.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios\/2019-01-18_11-57-22","alt":"Runtime Callout of New York","author":"3811","description":"","caption":"","name":"2019-01-18_11-57-22","status":"inherit","uploaded_to":353762,"date":"2019-01-18 16:58:21","modified":"2019-01-18 21:52:15","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":999,"height":341,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-57-22-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-57-22-300x102.png","medium-width":300,"medium-height":102,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-57-22-768x262.png","medium_large-width":768,"medium_large-height":262,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-57-22.png","large-width":999,"large-height":341,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-57-22.png","1536x1536-width":999,"1536x1536-height":341,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-57-22.png","2048x2048-width":999,"2048x2048-height":341,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-57-22-826x282.png","card_image-width":826,"card_image-height":282,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_11-57-22.png","wide_image-width":999,"wide_image-height":341}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>To show a callout when tapping a graphic:<\/p>\n<ol>\n<li>Make sure that the <strong>DemoViewController<\/strong> can respond to map view interactions by declaring conformance to <strong>AGSGeoViewTouchDelegate<\/strong> and setting the <strong>AGSMapView.touchDelegate<\/strong> appropriately.<\/li>\n<li>Implement the tap gesture\u00a0delegate handler.<\/li>\n<li>Tell the Runtime to identify any graphics where the user tapped the map.<\/li>\n<li>Display a suitable callout if necessary.<\/li>\n<\/ol>\n<pre><code style=\"font-size: 70%;padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #333;font-weight: bold\">class<\/span> <span style=\"color: #458;font-weight: bold\">DemoViewController<\/span>: <span style=\"color: #458;font-weight: bold\">UIViewController<\/span>, <span style=\"color: #458;font-weight: bold\">AGSGeoViewTouchDelegate<\/span> {\r\n  <span style=\"color: #333;font-weight: bold\">override<\/span> <span style=\"color: #333;font-weight: bold\">func<\/span> <span style=\"color: #900;font-weight: bold\">loadView<\/span>() {\r\n    ...\r\n\r\n    <span style=\"color: #998;font-style: italic\">\/\/ Set the map view's touch delegate.<\/span>\r\n    mapView.touchDelegate = <span style=\"color: #333;font-weight: bold\">self<\/span>\r\n  }\r\n\r\n  <span style=\"color: #998;font-style: italic\">\/\/ Handle the AGSGeoViewTouchDelegate tap event.<\/span>\r\n  <span style=\"color: #333;font-weight: bold\">func<\/span> <span style=\"color: #900;font-weight: bold\">geoView<\/span>(<span style=\"color: #008080\">_<\/span> geoView: AGSGeoView, didTapAtScreenPoint screenPoint: CGPoint, mapPoint: AGSPoint) {\r\n\r\n    <span style=\"color: #998;font-style: italic\">\/\/ Identify which graphic, if any, the user tapped on.<\/span>\r\n    geoView.identify(overlay, screenPoint: screenPoint, \r\n                     tolerance: <span style=\"color: #008080\">20<\/span>, returnPopupsOnly: <span style=\"color: #333;font-weight: 500\">false<\/span>) \r\n      { result <span style=\"color: #333;font-weight: bold\">in<\/span>\r\n\r\n      <span style=\"color: #333;font-weight: bold\">if<\/span> <span style=\"color: #333;font-weight: bold\">let<\/span> tappedGraphic = result.graphics.first {\r\n        <span style=\"color: #998;font-style: italic\">\/\/ Populate the configure the callout.<\/span>\r\n        geoView.callout.title = tappedGraphic.attributes[<span style=\"color: #d14\">\"city\"<\/span>] <span style=\"color: #333;font-weight: bold\">as<\/span>? <span style=\"color: #458;font-weight: bold\">String<\/span>\r\n        geoView.callout.detail = tappedGraphic.attributes[<span style=\"color: #d14\">\"country\"<\/span>] <span style=\"color: #333;font-weight: bold\">as<\/span>? <span style=\"color: #458;font-weight: bold\">String<\/span>\r\n        geoView.callout.isAccessoryButtonHidden = <span style=\"color: #333;font-weight: 500\">true<\/span>\r\n\r\n        <span style=\"color: #998;font-style: italic\">\/\/ Show the callout.<\/span>\r\n        geoView.callout.show(<span style=\"color: #333;font-weight: bold\">for<\/span>: tappedGraphic, tapLocation: mapPoint, animated: <span style=\"color: #333;font-weight: 500\">true<\/span>)\r\n      } <span style=\"color: #333;font-weight: bold\">else<\/span> {\r\n        <span style=\"color: #998;font-style: italic\">\/\/ The user didn't tap on a graphic, so dismiss any existing callout.<\/span>\r\n        geoView.callout.dismiss()\r\n      }\r\n    }\r\n  }\r\n<\/code><\/pre>\n<p>Callouts can display simple information by default, but can be configured to varying degrees. You can even specify a custom view to use.<\/p>\n<p>The ArcGIS Runtime gives you full control over how you respond to user interactions with your map view, as well as convenient APIs for common responses to those interactions. In this case, we want to <a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/api-reference\/interface_a_g_s_geo_view.html#af40cfce72c58e4dd4b29dea89a91a196\"><em>identify<\/em><\/a> what was\u00a0<a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/api-reference\/protocol_a_g_s_geo_view_touch_delegate-p.html#a0eef1dd210363317ec3d49d4f7fc1cfe\"><em>tapped<\/em><\/a> and provide feedback using a callout.<\/p>\n"},{"acf_fc_layout":"content","content":"<h3>Next steps &amp; more resources<\/h3>\n"},{"acf_fc_layout":"image","image":{"ID":414282,"id":414282,"title":"","filename":"Blog_Card_Image-1.jpg","filesize":83823,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/Blog_Card_Image-1.jpg","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios\/blog_card_image-2","alt":"","author":"3811","description":"","caption":"","name":"blog_card_image-2","status":"inherit","uploaded_to":353762,"date":"2019-01-18 20:01:31","modified":"2019-01-18 20:02:33","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":826,"height":465,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/Blog_Card_Image-1-150x150.jpg","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/Blog_Card_Image-1-300x169.jpg","medium-width":300,"medium-height":169,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/Blog_Card_Image-1-768x432.jpg","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/Blog_Card_Image-1.jpg","large-width":826,"large-height":465,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/Blog_Card_Image-1.jpg","1536x1536-width":826,"1536x1536-height":465,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/Blog_Card_Image-1.jpg","2048x2048-width":826,"2048x2048-height":465,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/Blog_Card_Image-1.jpg","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/Blog_Card_Image-1.jpg","wide_image-width":826,"wide_image-height":465}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>We&#8217;ve just scratched the surface of what the ArcGIS Runtime SDK can do for you. Here are some of the many resources available to you as you take the next steps in building location based apps with the Runtime:<\/p>\n<ul>\n<li>The\u00a0<a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/swift\/guide\/introduction.htm\" target=\"_blank\" rel=\"noopener\">Guide<\/a>\u00a0covers key Runtime concepts, including\u00a0<a href=\"http:\/\/developers.arcgis.com\/ios\/latest\/swift\/guide\/migrate-from-google-maps-to-arcgis-runtime.htm\" target=\"_blank\" rel=\"noopener\">more details<\/a> on the topics covered here.<\/li>\n<li>An open-source\u00a0<a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/swift\/sample-code\/sample-code.htm\" target=\"_blank\" rel=\"noopener\">Samples App<\/a>\u00a0that covers over 100 Runtime capabilities.<\/li>\n<li>Hands-on <a href=\"https:\/\/developers.arcgis.com\/labs\/?product=iOS&amp;topic=any\" target=\"_blank\" rel=\"noopener\">DevLabs<\/a>\u00a0introduce you to components of the APIs. As a developer migrating from Google Maps, check these ones out in particular:<br \/>\n&#8211;\u00a0<a href=\"https:\/\/developers.arcgis.com\/labs\/ios\/find-places\/\" target=\"_blank\" rel=\"noopener\">Find Places<\/a><br \/>\n&#8211; <a href=\"https:\/\/developers.arcgis.com\/labs\/ios\/search-for-an-address\" target=\"_blank\" rel=\"noopener\">Search and Geocode<\/a><br \/>\n&#8211; <a href=\"https:\/\/developers.arcgis.com\/labs\/ios\/get-a-route-and-directions\/\" target=\"_blank\" rel=\"noopener\">Directions and Routing<\/a><\/li>\n<li>A detailed and searchable\u00a0<a href=\"https:\/\/developers.arcgis.com\/ios\/latest\/api-reference\/\" target=\"_blank\" rel=\"noopener\">API Reference<\/a>.<\/li>\n<li>Actively monitored\u00a0<a href=\"https:\/\/community.esri.com\/community\/developers\/native-app-developers\/arcgis-runtime-sdk-for-ios\">forums<\/a>. Join the GeoNet community and ask your questions there.<\/li>\n<li>Be sure to check out the &#8220;What can I do with 50 credits per month?&#8221; question in our <a href=\"https:\/\/developers.arcgis.com\/terms\/faq\/\">FAQ<\/a>.<\/li>\n<\/ul>\n<p>One last thing. While this post has focused on the ArcGIS Runtime SDK for iOS, there are ArcGIS Runtime SDKs for <a href=\"https:\/\/developers.arcgis.com\/android\/latest\/\">Android<\/a>, <a href=\"https:\/\/developers.arcgis.com\/net\/latest\/\">.NET<\/a> (including Xamarin for cross-platform development), <a href=\"https:\/\/developers.arcgis.com\/macos\/latest\/\">macOS<\/a>, <a href=\"https:\/\/developers.arcgis.com\/java\/latest\/\">Java<\/a> and <a href=\"https:\/\/developers.arcgis.com\/qt\/latest\/\">Qt<\/a> (again for cross-platform solutions) all of which provide the same great functionality in a consistent set of APIs.<\/p>\n"}],"authors":[{"ID":3811,"user_firstname":"Nicholas","user_lastname":"Furness","nickname":"Nicholas Furness","user_nicename":"nfurness","display_name":"Nick Furness","user_email":"NFurness@esri.com","user_url":"http:\/\/developers.arcgis.com","user_registered":"2018-03-02 00:15:26","user_description":"Nick Furness is a Product Manager for the ArcGIS Maps SDKs for Native Apps, and ArcGIS Maps SDKs for Game Engines, specializing in Swift and iOS. He's spent over 25 years working in the GIS space building projects ranging from small mom-and-pop solutions all the way up to enterprise utility and national government deployments. Nick presents at various Esri Developer Summits, the User Conference, and many other events, almost always talking about something to do with the Native Maps SDKs (although you might find the odd bit of JavaScript thrown in there).","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/DevSummit-2013-Face-150x150.png' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"related_articles":[{"ID":412672,"post_author":"7191","post_date":"2019-01-17 10:24:06","post_date_gmt":"2019-01-17 18:24:06","post_content":"","post_title":"New Mapping Experience Available for Developers","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"new-mapping-experience-available-for-developers","to_ping":"","pinged":"","post_modified":"2019-01-17 10:24:06","post_modified_gmt":"2019-01-17 18:24:06","post_content_filtered":"","post_parent":0,"guid":"http:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=412672","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":332682,"post_author":"3731","post_date":"2018-10-16 16:52:56","post_date_gmt":"2018-10-16 23:52:56","post_content":"","post_title":"ArcGIS Runtime SDK 100.4 is here!","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"arcgis-runtime-sdk-100-4-is-here","to_ping":"","pinged":"","post_modified":"2018-10-16 17:06:55","post_modified_gmt":"2018-10-17 00:06:55","post_content_filtered":"","post_parent":0,"guid":"http:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=332682","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"}],"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/2019-01-18_14-20-31.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/Runtime-Live-By-The-Code-Banner.jpg"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Migrating from Google&#039;s Maps SDK to the ArcGIS Runtime SDK for iOS<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Migrating from Google&#039;s Maps SDK to the ArcGIS Runtime SDK for iOS\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios\"},\"author\":{\"name\":\"Nick Furness\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/e07f43559a84520f015fcf55e8c58ab8\"},\"headline\":\"Migrating from Google&#8217;s Maps SDK to the ArcGIS Runtime SDK for iOS\",\"datePublished\":\"2019-02-21T23:43:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios\"},\"wordCount\":13,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"ArcGIS Runtime\",\"Developers\",\"iOS\",\"migrate from google\"],\"articleSection\":[\"Announcements\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios\",\"name\":\"Migrating from Google's Maps SDK to the ArcGIS Runtime SDK for iOS\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2019-02-21T23:43:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Migrating from Google&#8217;s Maps SDK to the ArcGIS Runtime SDK for iOS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/e07f43559a84520f015fcf55e8c58ab8\",\"name\":\"Nick Furness\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/DevSummit-2013-Face-150x150.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/DevSummit-2013-Face-150x150.png\",\"caption\":\"Nick Furness\"},\"description\":\"Nick Furness is a Product Manager for the ArcGIS Maps SDKs for Native Apps, and ArcGIS Maps SDKs for Game Engines, specializing in Swift and iOS. He's spent over 25 years working in the GIS space building projects ranging from small mom-and-pop solutions all the way up to enterprise utility and national government deployments. Nick presents at various Esri Developer Summits, the User Conference, and many other events, almost always talking about something to do with the Native Maps SDKs (although you might find the odd bit of JavaScript thrown in there).\",\"sameAs\":[\"http:\/\/developers.arcgis.com\",\"https:\/\/www.linkedin.com\/in\/nixta\/\",\"https:\/\/x.com\/geeknixta\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/nfurness\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Migrating from Google's Maps SDK to the ArcGIS Runtime SDK for iOS","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios","og_locale":"en_US","og_type":"article","og_title":"Migrating from Google's Maps SDK to the ArcGIS Runtime SDK for iOS","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","twitter_card":"summary_large_image","twitter_site":"@ESRI","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios"},"author":{"name":"Nick Furness","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/e07f43559a84520f015fcf55e8c58ab8"},"headline":"Migrating from Google&#8217;s Maps SDK to the ArcGIS Runtime SDK for iOS","datePublished":"2019-02-21T23:43:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios"},"wordCount":13,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["ArcGIS Runtime","Developers","iOS","migrate from google"],"articleSection":["Announcements"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios","name":"Migrating from Google's Maps SDK to the ArcGIS Runtime SDK for iOS","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2019-02-21T23:43:33+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-ios\/announcements\/migrating-from-google-to-runtime-sdk-ios#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Migrating from Google&#8217;s Maps SDK to the ArcGIS Runtime SDK for iOS"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/e07f43559a84520f015fcf55e8c58ab8","name":"Nick Furness","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/DevSummit-2013-Face-150x150.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/DevSummit-2013-Face-150x150.png","caption":"Nick Furness"},"description":"Nick Furness is a Product Manager for the ArcGIS Maps SDKs for Native Apps, and ArcGIS Maps SDKs for Game Engines, specializing in Swift and iOS. He's spent over 25 years working in the GIS space building projects ranging from small mom-and-pop solutions all the way up to enterprise utility and national government deployments. Nick presents at various Esri Developer Summits, the User Conference, and many other events, almost always talking about something to do with the Native Maps SDKs (although you might find the odd bit of JavaScript thrown in there).","sameAs":["http:\/\/developers.arcgis.com","https:\/\/www.linkedin.com\/in\/nixta\/","https:\/\/x.com\/geeknixta"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/nfurness"}]}},"text_date":"February 21, 2019","author_name":"Nick Furness","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/nfurness","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2019\/01\/Runtime-Live-By-The-Code-Banner.jpg","primary_product":"ArcGIS Runtime SDK for iOS","tag_data":[{"term_id":23451,"name":"ArcGIS Runtime","slug":"arcgis-runtime","term_group":0,"term_taxonomy_id":23451,"taxonomy":"post_tag","description":"","parent":0,"count":91,"filter":"raw"},{"term_id":38851,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":38851,"taxonomy":"post_tag","description":"","parent":0,"count":78,"filter":"raw"},{"term_id":24531,"name":"iOS","slug":"ios","term_group":0,"term_taxonomy_id":24531,"taxonomy":"post_tag","description":"","parent":0,"count":82,"filter":"raw"},{"term_id":214052,"name":"migrate from google","slug":"migrate-from-google","term_group":0,"term_taxonomy_id":214052,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"}],"category_data":[{"term_id":37101,"name":"Announcements","slug":"announcements","term_group":0,"term_taxonomy_id":37101,"taxonomy":"category","description":"","parent":0,"count":1959,"filter":"raw"}],"product_data":[{"term_id":36891,"name":"ArcGIS Runtime SDK for iOS","slug":"api-ios","term_group":0,"term_taxonomy_id":36891,"taxonomy":"product","description":"","parent":36601,"count":55,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=api-ios","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/353762","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/3811"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=353762"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/353762\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=353762"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=353762"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=353762"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=353762"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=353762"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}