summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Maps.iOS
diff options
context:
space:
mode:
authorJason Smith <jason.smith@xamarin.com>2016-03-22 13:02:25 -0700
committerJason Smith <jason.smith@xamarin.com>2016-03-22 16:13:41 -0700
commit17fdde66d94155fc62a034fa6658995bef6fd6e5 (patch)
treeb5e5073a2a7b15cdbe826faa5c763e270a505729 /Xamarin.Forms.Maps.iOS
downloadxamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.gz
xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.bz2
xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.zip
Initial import
Diffstat (limited to 'Xamarin.Forms.Maps.iOS')
-rw-r--r--Xamarin.Forms.Maps.iOS/FormsMaps.cs34
-rw-r--r--Xamarin.Forms.Maps.iOS/GeocoderBackend.cs61
-rw-r--r--Xamarin.Forms.Maps.iOS/MapRenderer.cs327
-rw-r--r--Xamarin.Forms.Maps.iOS/Properties/AssemblyInfo.cs25
-rw-r--r--Xamarin.Forms.Maps.iOS/Xamarin.Forms.Maps.iOS.Classic.csproj78
-rw-r--r--Xamarin.Forms.Maps.iOS/Xamarin.Forms.Maps.iOS.csproj76
6 files changed, 601 insertions, 0 deletions
diff --git a/Xamarin.Forms.Maps.iOS/FormsMaps.cs b/Xamarin.Forms.Maps.iOS/FormsMaps.cs
new file mode 100644
index 00000000..91033f78
--- /dev/null
+++ b/Xamarin.Forms.Maps.iOS/FormsMaps.cs
@@ -0,0 +1,34 @@
+using Xamarin.Forms.Maps.iOS;
+#if __UNIFIED__
+using UIKit;
+
+#else
+using MonoTouch.UIKit;
+#endif
+
+namespace Xamarin
+{
+ public static class FormsMaps
+ {
+ static bool s_isInitialized;
+ static bool? s_isiOs8OrNewer;
+
+ internal static bool IsiOs8OrNewer
+ {
+ get
+ {
+ if (!s_isiOs8OrNewer.HasValue)
+ s_isiOs8OrNewer = UIDevice.CurrentDevice.CheckSystemVersion(8, 0);
+ return s_isiOs8OrNewer.Value;
+ }
+ }
+
+ public static void Init()
+ {
+ if (s_isInitialized)
+ return;
+ GeocoderBackend.Register();
+ s_isInitialized = true;
+ }
+ }
+} \ No newline at end of file
diff --git a/Xamarin.Forms.Maps.iOS/GeocoderBackend.cs b/Xamarin.Forms.Maps.iOS/GeocoderBackend.cs
new file mode 100644
index 00000000..42b96457
--- /dev/null
+++ b/Xamarin.Forms.Maps.iOS/GeocoderBackend.cs
@@ -0,0 +1,61 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+#if __UNIFIED__
+using CoreLocation;
+using AddressBookUI;
+#else
+using MonoTouch.AddressBookUI;
+using MonoTouch.CoreLocation;
+#endif
+#if __UNIFIED__
+using RectangleF = CoreGraphics.CGRect;
+using SizeF = CoreGraphics.CGSize;
+using PointF = CoreGraphics.CGPoint;
+
+#else
+using nfloat=global::System.Single;
+using nint=global::System.Int32;
+using nuint=global::System.UInt32;
+#endif
+
+namespace Xamarin.Forms.Maps.iOS
+{
+ internal class GeocoderBackend
+ {
+ public static void Register()
+ {
+ Geocoder.GetPositionsForAddressAsyncFunc = GetPositionsForAddressAsync;
+ Geocoder.GetAddressesForPositionFuncAsync = GetAddressesForPositionAsync;
+ }
+
+ static Task<IEnumerable<string>> GetAddressesForPositionAsync(Position position)
+ {
+ var location = new CLLocation(position.Latitude, position.Longitude);
+ var geocoder = new CLGeocoder();
+ var source = new TaskCompletionSource<IEnumerable<string>>();
+ geocoder.ReverseGeocodeLocation(location, (placemarks, error) =>
+ {
+ if (placemarks == null)
+ placemarks = new CLPlacemark[0];
+ IEnumerable<string> addresses = placemarks.Select(p => ABAddressFormatting.ToString(p.AddressDictionary, false));
+ source.SetResult(addresses);
+ });
+ return source.Task;
+ }
+
+ static Task<IEnumerable<Position>> GetPositionsForAddressAsync(string address)
+ {
+ var geocoder = new CLGeocoder();
+ var source = new TaskCompletionSource<IEnumerable<Position>>();
+ geocoder.GeocodeAddress(address, (placemarks, error) =>
+ {
+ if (placemarks == null)
+ placemarks = new CLPlacemark[0];
+ IEnumerable<Position> positions = placemarks.Select(p => new Position(p.Location.Coordinate.Latitude, p.Location.Coordinate.Longitude));
+ source.SetResult(positions);
+ });
+ return source.Task;
+ }
+ }
+} \ No newline at end of file
diff --git a/Xamarin.Forms.Maps.iOS/MapRenderer.cs b/Xamarin.Forms.Maps.iOS/MapRenderer.cs
new file mode 100644
index 00000000..aa3bb447
--- /dev/null
+++ b/Xamarin.Forms.Maps.iOS/MapRenderer.cs
@@ -0,0 +1,327 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Collections.Specialized;
+using System.ComponentModel;
+using Xamarin.Forms.Platform.iOS;
+#if __UNIFIED__
+using UIKit;
+using MapKit;
+using CoreLocation;
+using Foundation;
+#else
+using MonoTouch.UIKit;
+using MonoTouch.Foundation;
+using MonoTouch.CoreLocation;
+using MonoTouch.MapKit;
+using System.Drawing;
+#endif
+#if __UNIFIED__
+using RectangleF = CoreGraphics.CGRect;
+using SizeF = CoreGraphics.CGSize;
+using PointF = CoreGraphics.CGPoint;
+using ObjCRuntime;
+
+#else
+using nfloat=global::System.Single;
+using nint=global::System.Int32;
+using nuint=global::System.UInt32;
+using MonoTouch.ObjCRuntime;
+#endif
+
+namespace Xamarin.Forms.Maps.iOS
+{
+ internal class MapDelegate : MKMapViewDelegate
+ {
+ // keep references alive, removing this will cause a segfault
+ static readonly List<object> List = new List<object>();
+ readonly Map _map;
+ UIView _lastTouchedView;
+
+ internal MapDelegate(Map map)
+ {
+ _map = map;
+ }
+
+#if __UNIFIED__
+ public override MKAnnotationView GetViewForAnnotation(MKMapView mapView, IMKAnnotation annotation)
+#else
+ public override MKAnnotationView GetViewForAnnotation (MKMapView mapView, NSObject annotation)
+#endif
+ {
+ MKPinAnnotationView mapPin = null;
+
+ // https://bugzilla.xamarin.com/show_bug.cgi?id=26416
+ var userLocationAnnotation = Runtime.GetNSObject(annotation.Handle) as MKUserLocation;
+ if (userLocationAnnotation != null)
+ return null;
+
+ const string defaultPinId = "defaultPin";
+ mapPin = (MKPinAnnotationView)mapView.DequeueReusableAnnotation(defaultPinId);
+ if (mapPin == null)
+ {
+ mapPin = new MKPinAnnotationView(annotation, defaultPinId);
+ mapPin.CanShowCallout = true;
+ }
+
+ mapPin.Annotation = annotation;
+ AttachGestureToPin(mapPin, annotation);
+
+ return mapPin;
+ }
+
+#if __UNIFIED__
+ void AttachGestureToPin(MKPinAnnotationView mapPin, IMKAnnotation annotation)
+#else
+ void AttachGestureToPin (MKPinAnnotationView mapPin, NSObject annotation)
+#endif
+ {
+ UIGestureRecognizer[] recognizers = mapPin.GestureRecognizers;
+
+ if (recognizers != null)
+ {
+ foreach (UIGestureRecognizer r in recognizers)
+ {
+ mapPin.RemoveGestureRecognizer(r);
+ }
+ }
+
+ Action<UITapGestureRecognizer> action = g => OnClick(annotation, g);
+ var recognizer = new UITapGestureRecognizer(action) { ShouldReceiveTouch = (gestureRecognizer, touch) =>
+ {
+ _lastTouchedView = touch.View;
+ return true;
+ } };
+ List.Add(action);
+ List.Add(recognizer);
+ mapPin.AddGestureRecognizer(recognizer);
+ }
+
+ void OnClick(object annotationObject, UITapGestureRecognizer recognizer)
+ {
+ // https://bugzilla.xamarin.com/show_bug.cgi?id=26416
+ NSObject annotation = Runtime.GetNSObject(((IMKAnnotation)annotationObject).Handle);
+ if (annotation == null)
+ return;
+
+ // lookup pin
+ Pin targetPin = null;
+ for (var i = 0; i < _map.Pins.Count; i++)
+ {
+ Pin pin = _map.Pins[i];
+ object target = pin.Id;
+ if (target != annotation)
+ continue;
+
+ targetPin = pin;
+ break;
+ }
+
+ // pin not found. Must have been activated outside of forms
+ if (targetPin == null)
+ return;
+
+ // if the tap happened on the annotation view itself, skip because this is what happens when the callout is showing
+ // when the callout is already visible the tap comes in on a different view
+ if (_lastTouchedView is MKAnnotationView)
+ return;
+
+ targetPin.SendTap();
+ }
+ }
+
+ public class MapRenderer : ViewRenderer
+ {
+ long _handle = 0;
+ CLLocationManager _locationManager;
+
+ public override SizeRequest GetDesiredSize(double widthConstraint, double heightConstraint)
+ {
+ return Control.GetSizeRequest(widthConstraint, heightConstraint);
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ if (Element != null)
+ {
+ var mapModel = (Map)Element;
+ MessagingCenter.Unsubscribe<Map, MapSpan>(this, "MapMoveToRegion");
+ ((ObservableCollection<Pin>)mapModel.Pins).CollectionChanged -= OnCollectionChanged;
+ }
+
+ var mkMapView = (MKMapView)Control;
+ mkMapView.RegionChanged -= MkMapViewOnRegionChanged;
+
+ if (_locationManager != null)
+ {
+ _locationManager.Dispose();
+ _locationManager = null;
+ }
+ }
+
+ base.Dispose(disposing);
+ }
+
+ protected override void OnElementChanged(ElementChangedEventArgs<View> e)
+ {
+ base.OnElementChanged(e);
+
+ if (e.OldElement != null)
+ {
+ var mapModel = (Map)e.OldElement;
+ MessagingCenter.Unsubscribe<Map, MapSpan>(this, "MapMoveToRegion");
+ ((ObservableCollection<Pin>)mapModel.Pins).CollectionChanged -= OnCollectionChanged;
+ }
+
+ if (e.NewElement != null)
+ {
+ var mapModel = (Map)e.NewElement;
+
+ if (Control == null)
+ {
+ SetNativeControl(new MKMapView(RectangleF.Empty));
+ var mkMapView = (MKMapView)Control;
+ var mapDelegate = new MapDelegate(mapModel);
+ mkMapView.GetViewForAnnotation = mapDelegate.GetViewForAnnotation;
+ mkMapView.RegionChanged += MkMapViewOnRegionChanged;
+ }
+
+ MessagingCenter.Subscribe<Map, MapSpan>(this, "MapMoveToRegion", (s, a) => MoveToRegion(a), mapModel);
+ if (mapModel.LastMoveToRegion != null)
+ MoveToRegion(mapModel.LastMoveToRegion, false);
+
+ UpdateMapType();
+ UpdateIsShowingUser();
+ UpdateHasScrollEnabled();
+ UpdateHasZoomEnabled();
+
+ ((ObservableCollection<Pin>)mapModel.Pins).CollectionChanged += OnCollectionChanged;
+
+ OnCollectionChanged(((Map)Element).Pins, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
+ }
+ }
+
+ protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
+ {
+ base.OnElementPropertyChanged(sender, e);
+
+ if (e.PropertyName == Map.MapTypeProperty.PropertyName)
+ UpdateMapType();
+ else if (e.PropertyName == Map.IsShowingUserProperty.PropertyName)
+ UpdateIsShowingUser();
+ else if (e.PropertyName == Map.HasScrollEnabledProperty.PropertyName)
+ UpdateHasScrollEnabled();
+ else if (e.PropertyName == Map.HasZoomEnabledProperty.PropertyName)
+ UpdateHasZoomEnabled();
+ }
+
+ void AddPins(IList pins)
+ {
+ foreach (Pin pin in pins)
+ {
+ var annotation = new MKPointAnnotation { Title = pin.Label, Subtitle = pin.Address ?? "" };
+
+ pin.Id = annotation;
+#if __UNIFIED__
+ annotation.SetCoordinate(new CLLocationCoordinate2D(pin.Position.Latitude, pin.Position.Longitude));
+#else
+ annotation.Coordinate = new CLLocationCoordinate2D (pin.Position.Latitude, pin.Position.Longitude);
+#endif
+ ((MKMapView)Control).AddAnnotation(annotation);
+ }
+ }
+
+ void MkMapViewOnRegionChanged(object sender, MKMapViewChangeEventArgs mkMapViewChangeEventArgs)
+ {
+ if (Element == null)
+ return;
+
+ var mapModel = (Map)Element;
+ var mkMapView = (MKMapView)Control;
+
+ mapModel.VisibleRegion = new MapSpan(new Position(mkMapView.Region.Center.Latitude, mkMapView.Region.Center.Longitude), mkMapView.Region.Span.LatitudeDelta, mkMapView.Region.Span.LongitudeDelta);
+ }
+
+ void MoveToRegion(MapSpan mapSpan, bool animated = true)
+ {
+ Position center = mapSpan.Center;
+ var mapRegion = new MKCoordinateRegion(new CLLocationCoordinate2D(center.Latitude, center.Longitude), new MKCoordinateSpan(mapSpan.LatitudeDegrees, mapSpan.LongitudeDegrees));
+ ((MKMapView)Control).SetRegion(mapRegion, animated);
+ }
+
+ void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs)
+ {
+ switch (notifyCollectionChangedEventArgs.Action)
+ {
+ case NotifyCollectionChangedAction.Add:
+ AddPins(notifyCollectionChangedEventArgs.NewItems);
+ break;
+ case NotifyCollectionChangedAction.Remove:
+ RemovePins(notifyCollectionChangedEventArgs.OldItems);
+ break;
+ case NotifyCollectionChangedAction.Replace:
+ RemovePins(notifyCollectionChangedEventArgs.OldItems);
+ AddPins(notifyCollectionChangedEventArgs.NewItems);
+ break;
+ case NotifyCollectionChangedAction.Reset:
+ var mapView = (MKMapView)Control;
+ mapView.RemoveAnnotations(mapView.Annotations);
+ AddPins((IList)(Element as Map).Pins);
+ break;
+ case NotifyCollectionChangedAction.Move:
+ //do nothing
+ break;
+ }
+ }
+
+ void RemovePins(IList pins)
+ {
+ foreach (object pin in pins)
+#if __UNIFIED__
+ ((MKMapView)Control).RemoveAnnotation((IMKAnnotation)((Pin)pin).Id);
+#else
+ ((MKMapView)Control).RemoveAnnotation ((NSObject)((Pin)pin).Id);
+#endif
+ }
+
+ void UpdateHasScrollEnabled()
+ {
+ ((MKMapView)Control).ScrollEnabled = ((Map)Element).HasScrollEnabled;
+ }
+
+ void UpdateHasZoomEnabled()
+ {
+ ((MKMapView)Control).ZoomEnabled = ((Map)Element).HasZoomEnabled;
+ }
+
+ void UpdateIsShowingUser()
+ {
+ if (FormsMaps.IsiOs8OrNewer && ((Map)Element).IsShowingUser)
+ {
+ _locationManager = new CLLocationManager();
+ _locationManager.RequestWhenInUseAuthorization();
+ }
+
+ ((MKMapView)Control).ShowsUserLocation = ((Map)Element).IsShowingUser;
+ }
+
+ void UpdateMapType()
+ {
+ switch (((Map)Element).MapType)
+ {
+ case MapType.Street:
+ ((MKMapView)Control).MapType = MKMapType.Standard;
+ break;
+ case MapType.Satellite:
+ ((MKMapView)Control).MapType = MKMapType.Satellite;
+ break;
+ case MapType.Hybrid:
+ ((MKMapView)Control).MapType = MKMapType.Hybrid;
+ break;
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Xamarin.Forms.Maps.iOS/Properties/AssemblyInfo.cs b/Xamarin.Forms.Maps.iOS/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..18b4256f
--- /dev/null
+++ b/Xamarin.Forms.Maps.iOS/Properties/AssemblyInfo.cs
@@ -0,0 +1,25 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+using Xamarin.Forms;
+using Xamarin.Forms.Maps;
+using Xamarin.Forms.Maps.iOS;
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+
+[assembly: AssemblyTitle("Xamarin.Forms.Maps.iOS")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+
+[assembly: Guid("4a5d02cd-7350-46b6-bbd5-204b727c67c9")]
+[assembly: ExportRenderer(typeof(Map), typeof(MapRenderer))]
+[assembly: Preserve] \ No newline at end of file
diff --git a/Xamarin.Forms.Maps.iOS/Xamarin.Forms.Maps.iOS.Classic.csproj b/Xamarin.Forms.Maps.iOS/Xamarin.Forms.Maps.iOS.Classic.csproj
new file mode 100644
index 00000000..d26b8649
--- /dev/null
+++ b/Xamarin.Forms.Maps.iOS/Xamarin.Forms.Maps.iOS.Classic.csproj
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{CA10FACD-22AB-463F-A20E-379C212B0858}</ProjectGuid>
+ <ProjectTypeGuids>{6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <OutputType>Library</OutputType>
+ <RootNamespace>Xamarin.Forms.Maps.iOS</RootNamespace>
+ <IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>
+ <AssemblyName>Xamarin.Forms.Maps.iOS.Classic</AssemblyName>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>classic_bin\iPhoneSimulator\Debug</OutputPath>
+ <BaseIntermediateOutputPath>classic_obj\</BaseIntermediateOutputPath>
+ <DefineConstants>DEBUG</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ <MtouchDebug>true</MtouchDebug>
+ <CodesignKey>iPhone Developer</CodesignKey>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>none</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>classic_bin\iPhoneSimulator\Release</OutputPath>
+ <BaseIntermediateOutputPath>classic_obj\</BaseIntermediateOutputPath>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ <CodesignKey>iPhone Developer</CodesignKey>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Turkey|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\Turkey\</OutputPath>
+ <DefineConstants>__MOBILE__;__IOS__;DEBUG</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <UseVSHostingProcess>false</UseVSHostingProcess>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="..\Xamarin.Forms.Core\Properties\GlobalAssemblyInfo.cs">
+ <Link>Properties\GlobalAssemblyInfo.cs</Link>
+ </Compile>
+ <Compile Include="MapRenderer.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="FormsMaps.cs" />
+ <Compile Include="GeocoderBackend.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Xml" />
+ <Reference Include="System.Core" />
+ <Reference Include="monotouch" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Xamarin.Forms.Core\Xamarin.Forms.Core.csproj">
+ <Project>{57b8b73d-c3b5-4c42-869e-7b2f17d354ac}</Project>
+ <Name>Xamarin.Forms.Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Xamarin.Forms.Maps\Xamarin.Forms.Maps.csproj">
+ <Project>{7D13BAC2-C6A4-416A-B07E-C169B199E52B}</Project>
+ <Name>Xamarin.Forms.Maps</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Xamarin.Forms.Platform.iOS\Xamarin.Forms.Platform.iOS.Classic.csproj">
+ <Project>{4a47b5df-ddfc-476b-ac41-5105ff3b9b8b}</Project>
+ <Name>Xamarin.Forms.Platform.iOS.Classic</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.MonoTouch.CSharp.targets" />
+</Project>
diff --git a/Xamarin.Forms.Maps.iOS/Xamarin.Forms.Maps.iOS.csproj b/Xamarin.Forms.Maps.iOS/Xamarin.Forms.Maps.iOS.csproj
new file mode 100644
index 00000000..a50911ba
--- /dev/null
+++ b/Xamarin.Forms.Maps.iOS/Xamarin.Forms.Maps.iOS.csproj
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{ABA078C4-F9BB-4924-8B2B-10FE0D2F5491}</ProjectGuid>
+ <ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <OutputType>Library</OutputType>
+ <RootNamespace>Xamarin.Forms.Maps.iOS</RootNamespace>
+ <IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>
+ <AssemblyName>Xamarin.Forms.Maps.iOS</AssemblyName>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\iPhoneSimulator\Debug</OutputPath>
+ <DefineConstants>DEBUG</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ <MtouchDebug>true</MtouchDebug>
+ <CodesignKey>iPhone Developer</CodesignKey>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>none</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\iPhoneSimulator\Release</OutputPath>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ <CodesignKey>iPhone Developer</CodesignKey>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Turkey|AnyCPU'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\Turkey\</OutputPath>
+ <DefineConstants>__UNIFIED__;__MOBILE__;__IOS__;DEBUG</DefineConstants>
+ <DebugType>full</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <UseVSHostingProcess>false</UseVSHostingProcess>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="..\Xamarin.Forms.Core\Properties\GlobalAssemblyInfo.cs">
+ <Link>Properties\GlobalAssemblyInfo.cs</Link>
+ </Compile>
+ <Compile Include="MapRenderer.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="FormsMaps.cs" />
+ <Compile Include="GeocoderBackend.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Reference Include="Xamarin.iOS" />
+ <Reference Include="System" />
+ <Reference Include="System.Xml" />
+ <Reference Include="System.Core" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Xamarin.Forms.Core\Xamarin.Forms.Core.csproj">
+ <Project>{57b8b73d-c3b5-4c42-869e-7b2f17d354ac}</Project>
+ <Name>Xamarin.Forms.Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Xamarin.Forms.Maps\Xamarin.Forms.Maps.csproj">
+ <Project>{7D13BAC2-C6A4-416A-B07E-C169B199E52B}</Project>
+ <Name>Xamarin.Forms.Maps</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Xamarin.Forms.Platform.iOS\Xamarin.Forms.Platform.iOS.csproj">
+ <Project>{271193c1-6e7c-429c-a36d-3f1be5267231}</Project>
+ <Name>Xamarin.Forms.Platform.iOS</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
+</Project>