Added track screen events for pages and controller in extension. UserId refresh on login/logout.

This commit is contained in:
Kyle Spearrin 2016-08-04 00:06:09 -04:00
parent c86c82ee69
commit a831c9ac4f
27 changed files with 498 additions and 6512 deletions

View file

@ -35,7 +35,8 @@ namespace Bit.Android
Resolver.Resolve<IFingerprint>(), Resolver.Resolve<IFingerprint>(),
Resolver.Resolve<ISettings>(), Resolver.Resolve<ISettings>(),
Resolver.Resolve<IPushNotification>(), Resolver.Resolve<IPushNotification>(),
Resolver.Resolve<ILockService>())); Resolver.Resolve<ILockService>(),
Resolver.Resolve<IGoogleAnalyticsService>()));
} }
protected override void OnPause() protected override void OnPause()

View file

@ -109,6 +109,9 @@ namespace Bit.Android
var container = new UnityContainer(); var container = new UnityContainer();
container container
// Android Stuff
.RegisterInstance(ApplicationContext)
.RegisterInstance<Application>(this)
// Services // Services
.RegisterType<IDatabaseService, DatabaseService>(new ContainerControlledLifetimeManager()) .RegisterType<IDatabaseService, DatabaseService>(new ContainerControlledLifetimeManager())
.RegisterType<ISqlService, SqlService>(new ContainerControlledLifetimeManager()) .RegisterType<ISqlService, SqlService>(new ContainerControlledLifetimeManager())
@ -126,6 +129,7 @@ namespace Bit.Android
.RegisterType<IReflectionService, ReflectionService>(new ContainerControlledLifetimeManager()) .RegisterType<IReflectionService, ReflectionService>(new ContainerControlledLifetimeManager())
.RegisterType<ILockService, LockService>(new ContainerControlledLifetimeManager()) .RegisterType<ILockService, LockService>(new ContainerControlledLifetimeManager())
.RegisterType<IAppInfoService, AppInfoService>(new ContainerControlledLifetimeManager()) .RegisterType<IAppInfoService, AppInfoService>(new ContainerControlledLifetimeManager())
.RegisterType<IGoogleAnalyticsService, GoogleAnalyticsService>(new ContainerControlledLifetimeManager())
// Repositories // Repositories
.RegisterType<IFolderRepository, FolderRepository>(new ContainerControlledLifetimeManager()) .RegisterType<IFolderRepository, FolderRepository>(new ContainerControlledLifetimeManager())
.RegisterType<IFolderApiRepository, FolderApiRepository>(new ContainerControlledLifetimeManager()) .RegisterType<IFolderApiRepository, FolderApiRepository>(new ContainerControlledLifetimeManager())

File diff suppressed because it is too large Load diff

View file

@ -11,6 +11,7 @@ namespace Bit.Android.Services
private readonly IAuthService _authService; private readonly IAuthService _authService;
private readonly Tracker _tracker; private readonly Tracker _tracker;
private bool _setUserId = true;
public GoogleAnalyticsService( public GoogleAnalyticsService(
Context appContext, Context appContext,
@ -29,7 +30,11 @@ namespace Bit.Android.Services
_tracker.SetClientId(appIdService.AppId); _tracker.SetClientId(appIdService.AppId);
} }
public bool SetUserId { get; set; } = true; public void RefreshUserId()
{
_tracker.Set(UserId, null);
_setUserId = true;
}
public void TrackEvent(string category, string eventName) public void TrackEvent(string category, string eventName)
{ {
@ -38,11 +43,7 @@ namespace Bit.Android.Services
builder.SetAction(eventName); builder.SetAction(eventName);
builder.SetLabel("AppEvent"); builder.SetLabel("AppEvent");
if(SetUserId) SetUserId();
{
_tracker.Set(UserId, _authService.UserId);
SetUserId = false;
}
_tracker.Send(builder.Build()); _tracker.Send(builder.Build());
} }
@ -52,23 +53,24 @@ namespace Bit.Android.Services
builder.SetDescription(message); builder.SetDescription(message);
builder.SetFatal(fatal); builder.SetFatal(fatal);
if(SetUserId) SetUserId();
{
_tracker.Set(UserId, _authService.UserId);
SetUserId = false;
}
_tracker.Send(builder.Build()); _tracker.Send(builder.Build());
} }
public void TrackPage(string pageName) public void TrackPage(string pageName)
{ {
if(SetUserId) SetUserId();
{
_tracker.Set(UserId, _authService.UserId);
SetUserId = false;
}
_tracker.SetScreenName(pageName); _tracker.SetScreenName(pageName);
_tracker.Send(new HitBuilders.ScreenViewBuilder().Build()); _tracker.Send(new HitBuilders.ScreenViewBuilder().Build());
} }
private void SetUserId()
{
if(_setUserId && _authService.IsAuthenticated)
{
_tracker.Set(UserId, _authService.UserId);
_setUserId = false;
}
}
} }
} }

View file

@ -2,6 +2,7 @@
{ {
public interface IGoogleAnalyticsService public interface IGoogleAnalyticsService
{ {
void RefreshUserId();
void TrackPage(string pageName); void TrackPage(string pageName);
void TrackEvent(string category, string eventName); void TrackEvent(string category, string eventName);
void TrackException(string message, bool fatal); void TrackException(string message, bool fatal);

View file

@ -28,6 +28,7 @@ namespace Bit.App
private readonly ISettings _settings; private readonly ISettings _settings;
private readonly IPushNotification _pushNotification; private readonly IPushNotification _pushNotification;
private readonly ILockService _lockService; private readonly ILockService _lockService;
private readonly IGoogleAnalyticsService _googleAnalyticsService;
public App( public App(
IAuthService authService, IAuthService authService,
@ -38,7 +39,8 @@ namespace Bit.App
IFingerprint fingerprint, IFingerprint fingerprint,
ISettings settings, ISettings settings,
IPushNotification pushNotification, IPushNotification pushNotification,
ILockService lockService) ILockService lockService,
IGoogleAnalyticsService googleAnalyticsService)
{ {
_databaseService = databaseService; _databaseService = databaseService;
_connectivity = connectivity; _connectivity = connectivity;
@ -49,6 +51,7 @@ namespace Bit.App
_settings = settings; _settings = settings;
_pushNotification = pushNotification; _pushNotification = pushNotification;
_lockService = lockService; _lockService = lockService;
_googleAnalyticsService = googleAnalyticsService;
SetStyles(); SetStyles();
@ -181,6 +184,7 @@ namespace Bit.App
private void Logout(string logoutMessage) private void Logout(string logoutMessage)
{ {
_authService.LogOut(); _authService.LogOut();
_googleAnalyticsService.RefreshUserId();
_pushNotification.Unregister(); _pushNotification.Unregister();
Current.MainPage = new HomePage(); Current.MainPage = new HomePage();
if(!string.IsNullOrWhiteSpace(logoutMessage)) if(!string.IsNullOrWhiteSpace(logoutMessage))

View file

@ -22,6 +22,7 @@ namespace Bit.App.Pages
private IUserDialogs _userDialogs; private IUserDialogs _userDialogs;
private ISyncService _syncService; private ISyncService _syncService;
private ISettings _settings; private ISettings _settings;
private IGoogleAnalyticsService _googleAnalyticsService;
public LoginPage() public LoginPage()
{ {
@ -32,6 +33,7 @@ namespace Bit.App.Pages
_userDialogs = Resolver.Resolve<IUserDialogs>(); _userDialogs = Resolver.Resolve<IUserDialogs>();
_syncService = Resolver.Resolve<ISyncService>(); _syncService = Resolver.Resolve<ISyncService>();
_settings = Resolver.Resolve<ISettings>(); _settings = Resolver.Resolve<ISettings>();
_googleAnalyticsService = Resolver.Resolve<IGoogleAnalyticsService>();
Init(); Init();
} }
@ -178,6 +180,7 @@ namespace Bit.App.Pages
_authService.UserId = response.Result?.Profile?.Id; _authService.UserId = response.Result?.Profile?.Id;
_authService.Email = response.Result?.Profile?.Email; _authService.Email = response.Result?.Profile?.Email;
_settings.AddOrUpdateValue(Constants.SettingLastLoginEmail, _authService.Email); _settings.AddOrUpdateValue(Constants.SettingLastLoginEmail, _authService.Email);
_googleAnalyticsService.RefreshUserId();
if(_authService.IsAuthenticatedTwoFactor) if(_authService.IsAuthenticatedTwoFactor)
{ {

View file

@ -0,0 +1,21 @@
using Bit.App.Abstractions;
using System;
using UIKit;
using XLabs.Ioc;
namespace Bit.iOS.Core.Controllers
{
public class ExtendedUITableViewController : UITableViewController
{
public ExtendedUITableViewController(IntPtr handle)
: base(handle)
{ }
public override void ViewDidAppear(bool animated)
{
var googleAnalyticsService = Resolver.Resolve<IGoogleAnalyticsService>();
googleAnalyticsService.TrackPage(GetType().Name);
base.ViewDidAppear(animated);
}
}
}

View file

@ -0,0 +1,21 @@
using System;
using UIKit;
using Bit.App.Abstractions;
using XLabs.Ioc;
namespace Bit.iOS.Core.Controllers
{
public class ExtendedUIViewController : UIViewController
{
public ExtendedUIViewController(IntPtr handle)
: base(handle)
{ }
public override void ViewDidAppear(bool animated)
{
var googleAnalyticsService = Resolver.Resolve<IGoogleAnalyticsService>();
googleAnalyticsService.TrackPage(GetType().Name);
base.ViewDidAppear(animated);
}
}
}

View file

@ -8,6 +8,7 @@ namespace Bit.iOS.Core.Services
{ {
private readonly ITracker _tracker; private readonly ITracker _tracker;
private readonly IAuthService _authService; private readonly IAuthService _authService;
private bool _setUserId = true;
public GoogleAnalyticsService( public GoogleAnalyticsService(
IAppIdService appIdService, IAppIdService appIdService,
@ -21,15 +22,15 @@ namespace Bit.iOS.Core.Services
_tracker.Set(GaiConstants.ClientId, appIdService.AppId); _tracker.Set(GaiConstants.ClientId, appIdService.AppId);
} }
public bool SetUserId { get; set; } = true; public void RefreshUserId()
{
_tracker.Set(GaiConstants.UserId, null);
_setUserId = true;
}
public void TrackEvent(string category, string eventName) public void TrackEvent(string category, string eventName)
{ {
if(SetUserId) SetUserId();
{
_tracker.Set(GaiConstants.UserId, _authService.UserId);
SetUserId = false;
}
var dict = DictionaryBuilder.CreateEvent(category, eventName, "AppEvent", null).Build(); var dict = DictionaryBuilder.CreateEvent(category, eventName, "AppEvent", null).Build();
_tracker.Send(dict); _tracker.Send(dict);
Gai.SharedInstance.Dispatch(); Gai.SharedInstance.Dispatch();
@ -37,25 +38,26 @@ namespace Bit.iOS.Core.Services
public void TrackException(string message, bool fatal) public void TrackException(string message, bool fatal)
{ {
if(SetUserId) SetUserId();
{
_tracker.Set(GaiConstants.UserId, _authService.UserId);
SetUserId = false;
}
var dict = DictionaryBuilder.CreateException(message, fatal).Build(); var dict = DictionaryBuilder.CreateException(message, fatal).Build();
_tracker.Send(dict); _tracker.Send(dict);
} }
public void TrackPage(string pageName) public void TrackPage(string pageName)
{ {
if(SetUserId) SetUserId();
{
_tracker.Set(GaiConstants.UserId, _authService.UserId);
SetUserId = false;
}
_tracker.Set(GaiConstants.ScreenName, pageName); _tracker.Set(GaiConstants.ScreenName, pageName);
var dict = DictionaryBuilder.CreateScreenView().Build(); var dict = DictionaryBuilder.CreateScreenView().Build();
_tracker.Send(dict); _tracker.Send(dict);
} }
private void SetUserId()
{
if(_setUserId && _authService.IsAuthenticated)
{
_tracker.Set(GaiConstants.UserId, _authService.UserId);
_setUserId = false;
}
}
} }
} }

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\..\packages\Xamarin.Build.Download.0.2.1\build\Xamarin.Build.Download.props" Condition="Exists('..\..\packages\Xamarin.Build.Download.0.2.1\build\Xamarin.Build.Download.props')" /> <Import Project="..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props" Condition="Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@ -73,12 +73,18 @@
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="Xamarin.iOS" /> <Reference Include="Xamarin.iOS" />
<Reference Include="XLabs.Ioc, Version=2.0.5782.12218, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\XLabs.IoC.2.0.5782\lib\portable-net45+netcore45+wp8+MonoAndroid1+MonoTouch1\XLabs.Ioc.dll</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="Resources\" /> <Folder Include="Resources\" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Constants.cs" /> <Compile Include="Constants.cs" />
<Compile Include="Controllers\ExtendedUITableViewController.cs" />
<Compile Include="Controllers\ExtendedUIViewController.cs" />
<Compile Include="HockeyAppCrashManagerDelegate.cs" /> <Compile Include="HockeyAppCrashManagerDelegate.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\KeyChainStorageService.cs" /> <Compile Include="Services\KeyChainStorageService.cs" />
@ -111,10 +117,10 @@
<PropertyGroup> <PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup> </PropertyGroup>
<Error Condition="!Exists('..\..\packages\Xamarin.Build.Download.0.2.1\build\Xamarin.Build.Download.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Build.Download.0.2.1\build\Xamarin.Build.Download.props'))" />
<Error Condition="!Exists('..\..\packages\Xamarin.Build.Download.0.2.1\build\Xamarin.Build.Download.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Build.Download.0.2.1\build\Xamarin.Build.Download.targets'))" />
<Error Condition="!Exists('..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets'))" /> <Error Condition="!Exists('..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets'))" />
<Error Condition="!Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props'))" />
<Error Condition="!Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets'))" />
</Target> </Target>
<Import Project="..\..\packages\Xamarin.Build.Download.0.2.1\build\Xamarin.Build.Download.targets" Condition="Exists('..\..\packages\Xamarin.Build.Download.0.2.1\build\Xamarin.Build.Download.targets')" />
<Import Project="..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets" Condition="Exists('..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets')" /> <Import Project="..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets" Condition="Exists('..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets')" />
<Import Project="..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets" Condition="Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets')" />
</Project> </Project>

View file

@ -6,6 +6,7 @@
<package id="SQLitePCL.bundle_green" version="0.9.3" targetFramework="xamarinios10" /> <package id="SQLitePCL.bundle_green" version="0.9.3" targetFramework="xamarinios10" />
<package id="SQLitePCL.raw" version="0.9.3" targetFramework="xamarinios10" /> <package id="SQLitePCL.raw" version="0.9.3" targetFramework="xamarinios10" />
<package id="Xam.Plugins.Settings" version="2.1.0" targetFramework="xamarinios10" /> <package id="Xam.Plugins.Settings" version="2.1.0" targetFramework="xamarinios10" />
<package id="Xamarin.Build.Download" version="0.2.1" targetFramework="xamarinios10" /> <package id="Xamarin.Build.Download" version="0.2.2-beta2" targetFramework="xamarinios10" />
<package id="Xamarin.Google.iOS.Analytics" version="3.14.0.7" targetFramework="xamarinios10" /> <package id="Xamarin.Google.iOS.Analytics" version="3.14.0.7" targetFramework="xamarinios10" />
<package id="XLabs.IoC" version="2.0.5782" targetFramework="xamarinios10" />
</packages> </packages>

View file

@ -19,10 +19,11 @@ using Plugin.Connectivity;
using Plugin.Fingerprint; using Plugin.Fingerprint;
using Bit.iOS.Core.Utilities; using Bit.iOS.Core.Utilities;
using Bit.App.Resources; using Bit.App.Resources;
using Bit.iOS.Core.Controllers;
namespace Bit.iOS.Extension namespace Bit.iOS.Extension
{ {
public partial class LoadingViewController : UIViewController public partial class LoadingViewController : ExtendedUIViewController
{ {
private Context _context = new Context(); private Context _context = new Context();
private bool _setupHockeyApp = false; private bool _setupHockeyApp = false;
@ -30,8 +31,7 @@ namespace Bit.iOS.Extension
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
public LoadingViewController(IntPtr handle) : base(handle) public LoadingViewController(IntPtr handle) : base(handle)
{ { }
}
public override void ViewDidLoad() public override void ViewDidLoad()
{ {
@ -258,6 +258,7 @@ namespace Bit.iOS.Extension
.RegisterType<IPasswordGenerationService, PasswordGenerationService>(new ContainerControlledLifetimeManager()) .RegisterType<IPasswordGenerationService, PasswordGenerationService>(new ContainerControlledLifetimeManager())
.RegisterType<IAppIdService, AppIdService>(new ContainerControlledLifetimeManager()) .RegisterType<IAppIdService, AppIdService>(new ContainerControlledLifetimeManager())
.RegisterType<ILockService, LockService>(new ContainerControlledLifetimeManager()) .RegisterType<ILockService, LockService>(new ContainerControlledLifetimeManager())
.RegisterType<IGoogleAnalyticsService, GoogleAnalyticsService>(new ContainerControlledLifetimeManager())
// Repositories // Repositories
.RegisterType<IFolderRepository, FolderRepository>(new ContainerControlledLifetimeManager()) .RegisterType<IFolderRepository, FolderRepository>(new ContainerControlledLifetimeManager())
.RegisterType<IFolderApiRepository, FolderApiRepository>(new ContainerControlledLifetimeManager()) .RegisterType<IFolderApiRepository, FolderApiRepository>(new ContainerControlledLifetimeManager())

View file

@ -6,10 +6,11 @@ using Plugin.Settings.Abstractions;
using Plugin.Fingerprint.Abstractions; using Plugin.Fingerprint.Abstractions;
using System.Threading.Tasks; using System.Threading.Tasks;
using Bit.App; using Bit.App;
using Bit.iOS.Core.Controllers;
namespace Bit.iOS.Extension namespace Bit.iOS.Extension
{ {
public partial class LockFingerprintViewController : UIViewController public partial class LockFingerprintViewController : ExtendedUIViewController
{ {
private ISettings _settings; private ISettings _settings;
private IFingerprint _fingerprint; private IFingerprint _fingerprint;

View file

@ -10,10 +10,11 @@ using Bit.iOS.Core.Utilities;
using Bit.App.Abstractions; using Bit.App.Abstractions;
using System.Linq; using System.Linq;
using Bit.App; using Bit.App;
using Bit.iOS.Core.Controllers;
namespace Bit.iOS.Extension namespace Bit.iOS.Extension
{ {
public partial class LockPasswordViewController : UITableViewController public partial class LockPasswordViewController : ExtendedUITableViewController
{ {
private ISettings _settings; private ISettings _settings;
private IAuthService _authService; private IAuthService _authService;

View file

@ -8,10 +8,11 @@ using Bit.iOS.Core.Utilities;
using Bit.App.Resources; using Bit.App.Resources;
using System.Diagnostics; using System.Diagnostics;
using Bit.App; using Bit.App;
using Bit.iOS.Core.Controllers;
namespace Bit.iOS.Extension namespace Bit.iOS.Extension
{ {
public partial class LockPinViewController : UIViewController public partial class LockPinViewController : ExtendedUIViewController
{ {
private ISettings _settings; private ISettings _settings;
private IAuthService _authService; private IAuthService _authService;

View file

@ -10,10 +10,11 @@ using Plugin.Settings.Abstractions;
using CoreGraphics; using CoreGraphics;
using Bit.App; using Bit.App;
using Bit.iOS.Core.Utilities; using Bit.iOS.Core.Utilities;
using Bit.iOS.Core.Controllers;
namespace Bit.iOS.Extension namespace Bit.iOS.Extension
{ {
public partial class PasswordGeneratorViewController : UIViewController public partial class PasswordGeneratorViewController : ExtendedUIViewController
{ {
private IPasswordGenerationService _passwordGenerationService; private IPasswordGenerationService _passwordGenerationService;
private ISettings _settings; private ISettings _settings;

View file

@ -2,10 +2,11 @@
using Bit.iOS.Extension.Models; using Bit.iOS.Extension.Models;
using UIKit; using UIKit;
using Plugin.Settings.Abstractions; using Plugin.Settings.Abstractions;
using Bit.iOS.Core.Controllers;
namespace Bit.iOS.Extension namespace Bit.iOS.Extension
{ {
public partial class SetupViewController : UIViewController public partial class SetupViewController : ExtendedUIViewController
{ {
public SetupViewController(IntPtr handle) : base(handle) public SetupViewController(IntPtr handle) : base(handle)
{ } { }

View file

@ -13,10 +13,11 @@ using XLabs.Ioc;
using Bit.App; using Bit.App;
using Plugin.Connectivity.Abstractions; using Plugin.Connectivity.Abstractions;
using Bit.iOS.Core.Utilities; using Bit.iOS.Core.Utilities;
using Bit.iOS.Core.Controllers;
namespace Bit.iOS.Extension namespace Bit.iOS.Extension
{ {
public partial class SiteAddViewController : UITableViewController public partial class SiteAddViewController : ExtendedUITableViewController
{ {
private ISiteService _siteService; private ISiteService _siteService;
private IFolderService _folderService; private IFolderService _folderService;

View file

@ -12,10 +12,11 @@ using Bit.iOS.Core.Utilities;
using System.Threading.Tasks; using System.Threading.Tasks;
using Bit.iOS.Core; using Bit.iOS.Core;
using MobileCoreServices; using MobileCoreServices;
using Bit.iOS.Core.Controllers;
namespace Bit.iOS.Extension namespace Bit.iOS.Extension
{ {
public partial class SiteListViewController : UITableViewController public partial class SiteListViewController : ExtendedUITableViewController
{ {
public SiteListViewController(IntPtr handle) : base(handle) public SiteListViewController(IntPtr handle) : base(handle)
{ } { }

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props" Condition="Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform> <Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform>
@ -38,7 +39,8 @@
<MtouchEnableBitcode>False</MtouchEnableBitcode> <MtouchEnableBitcode>False</MtouchEnableBitcode>
<MtouchTlsProvider>Default</MtouchTlsProvider> <MtouchTlsProvider>Default</MtouchTlsProvider>
<MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler> <MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler>
<MtouchExtraArgs></MtouchExtraArgs> <MtouchExtraArgs>
</MtouchExtraArgs>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
<DebugType>none</DebugType> <DebugType>none</DebugType>
@ -96,7 +98,8 @@
<MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler> <MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler>
<MtouchFloat32>False</MtouchFloat32> <MtouchFloat32>False</MtouchFloat32>
<DeviceSpecificBuild>False</DeviceSpecificBuild> <DeviceSpecificBuild>False</DeviceSpecificBuild>
<MtouchExtraArgs></MtouchExtraArgs> <MtouchExtraArgs>
</MtouchExtraArgs>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
<DebugType>none</DebugType> <DebugType>none</DebugType>
@ -271,6 +274,10 @@
<HintPath>..\..\packages\Acr.Support.2.1.0\lib\Xamarin.iOS10\Acr.Support.iOS.dll</HintPath> <HintPath>..\..\packages\Acr.Support.2.1.0\lib\Xamarin.iOS10\Acr.Support.iOS.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Google.Analytics, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\lib\Xamarin.iOS10\Google.Analytics.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="HockeySDK, Version=1.0.6018.21546, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="HockeySDK, Version=1.0.6018.21546, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\HockeySDK.Xamarin.4.1.0-beta3\lib\Xamarin.iOS10\HockeySDK.dll</HintPath> <HintPath>..\..\packages\HockeySDK.Xamarin.4.1.0-beta3\lib\Xamarin.iOS10\HockeySDK.dll</HintPath>
<Private>True</Private> <Private>True</Private>
@ -393,4 +400,14 @@
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.AppExtension.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.AppExtension.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets'))" />
<Error Condition="!Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props'))" />
<Error Condition="!Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets'))" />
</Target>
<Import Project="..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets" Condition="Exists('..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets')" />
<Import Project="..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets" Condition="Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets')" />
</Project> </Project>

View file

@ -18,6 +18,8 @@
<package id="Validation" version="2.2.8" targetFramework="xamarinios10" /> <package id="Validation" version="2.2.8" targetFramework="xamarinios10" />
<package id="Xam.Plugin.Connectivity" version="2.2.12" targetFramework="xamarinios10" /> <package id="Xam.Plugin.Connectivity" version="2.2.12" targetFramework="xamarinios10" />
<package id="Xam.Plugins.Settings" version="2.1.0" targetFramework="xamarinios10" /> <package id="Xam.Plugins.Settings" version="2.1.0" targetFramework="xamarinios10" />
<package id="Xamarin.Build.Download" version="0.2.2-beta2" targetFramework="xamarinios10" />
<package id="Xamarin.Google.iOS.Analytics" version="3.14.0.7" targetFramework="xamarinios10" />
<package id="XLabs.IoC" version="2.0.5782" targetFramework="xamarinios10" /> <package id="XLabs.IoC" version="2.0.5782" targetFramework="xamarinios10" />
<package id="XLabs.IoC.Unity" version="2.0.5782" targetFramework="xamarinios10" /> <package id="XLabs.IoC.Unity" version="2.0.5782" targetFramework="xamarinios10" />
</packages> </packages>

View file

@ -62,7 +62,8 @@ namespace Bit.iOS
Resolver.Resolve<IFingerprint>(), Resolver.Resolve<IFingerprint>(),
Resolver.Resolve<ISettings>(), Resolver.Resolve<ISettings>(),
Resolver.Resolve<IPushNotification>(), Resolver.Resolve<IPushNotification>(),
Resolver.Resolve<ILockService>())); Resolver.Resolve<ILockService>(),
Resolver.Resolve<IGoogleAnalyticsService>()));
// Appearance stuff // Appearance stuff
@ -248,6 +249,7 @@ namespace Bit.iOS
.RegisterType<IReflectionService, ReflectionService>(new ContainerControlledLifetimeManager()) .RegisterType<IReflectionService, ReflectionService>(new ContainerControlledLifetimeManager())
.RegisterType<ILockService, LockService>(new ContainerControlledLifetimeManager()) .RegisterType<ILockService, LockService>(new ContainerControlledLifetimeManager())
.RegisterType<IAppInfoService, AppInfoService>(new ContainerControlledLifetimeManager()) .RegisterType<IAppInfoService, AppInfoService>(new ContainerControlledLifetimeManager())
.RegisterType<IGoogleAnalyticsService, GoogleAnalyticsService>(new ContainerControlledLifetimeManager())
// Repositories // Repositories
.RegisterType<IFolderRepository, FolderRepository>(new ContainerControlledLifetimeManager()) .RegisterType<IFolderRepository, FolderRepository>(new ContainerControlledLifetimeManager())
.RegisterType<IFolderApiRepository, FolderApiRepository>(new ContainerControlledLifetimeManager()) .RegisterType<IFolderApiRepository, FolderApiRepository>(new ContainerControlledLifetimeManager())

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props" Condition="Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform> <Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform>
@ -42,7 +43,8 @@
<MtouchTlsProvider>Default</MtouchTlsProvider> <MtouchTlsProvider>Default</MtouchTlsProvider>
<MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler> <MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler>
<MtouchFloat32>False</MtouchFloat32> <MtouchFloat32>False</MtouchFloat32>
<MtouchExtraArgs></MtouchExtraArgs> <MtouchExtraArgs>
</MtouchExtraArgs>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
<DebugType>none</DebugType> <DebugType>none</DebugType>
@ -100,7 +102,8 @@
<MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler> <MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler>
<MtouchFloat32>False</MtouchFloat32> <MtouchFloat32>False</MtouchFloat32>
<DeviceSpecificBuild>False</DeviceSpecificBuild> <DeviceSpecificBuild>False</DeviceSpecificBuild>
<MtouchExtraArgs></MtouchExtraArgs> <MtouchExtraArgs>
</MtouchExtraArgs>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
<DebugType>none</DebugType> <DebugType>none</DebugType>
@ -277,6 +280,10 @@
<HintPath>..\..\packages\BTProgressHUD.1.2.0.3\lib\Xamarin.iOS10\BTProgressHUD.dll</HintPath> <HintPath>..\..\packages\BTProgressHUD.1.2.0.3\lib\Xamarin.iOS10\BTProgressHUD.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Google.Analytics, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\lib\Xamarin.iOS10\Google.Analytics.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="HockeySDK, Version=1.0.6018.21546, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="HockeySDK, Version=1.0.6018.21546, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\HockeySDK.Xamarin.4.1.0-beta3\lib\Xamarin.iOS10\HockeySDK.dll</HintPath> <HintPath>..\..\packages\HockeySDK.Xamarin.4.1.0-beta3\lib\Xamarin.iOS10\HockeySDK.dll</HintPath>
<Private>True</Private> <Private>True</Private>
@ -688,5 +695,10 @@
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup> </PropertyGroup>
<Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.0.107\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.0.107\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets'))" /> <Error Condition="!Exists('..\..\packages\Xamarin.Forms.2.3.0.107\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.2.3.0.107\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets'))" />
<Error Condition="!Exists('..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets'))" />
<Error Condition="!Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props'))" />
<Error Condition="!Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets'))" />
</Target> </Target>
<Import Project="..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets" Condition="Exists('..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets')" />
<Import Project="..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets" Condition="Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets')" />
</Project> </Project>

View file

@ -23,7 +23,9 @@
<package id="Xam.Plugin.DeviceInfo" version="2.0.2" targetFramework="xamarinios10" /> <package id="Xam.Plugin.DeviceInfo" version="2.0.2" targetFramework="xamarinios10" />
<package id="Xam.Plugin.PushNotification" version="1.2.2" targetFramework="xamarinios10" developmentDependency="true" /> <package id="Xam.Plugin.PushNotification" version="1.2.2" targetFramework="xamarinios10" developmentDependency="true" />
<package id="Xam.Plugins.Settings" version="2.1.0" targetFramework="xamarinios10" /> <package id="Xam.Plugins.Settings" version="2.1.0" targetFramework="xamarinios10" />
<package id="Xamarin.Build.Download" version="0.2.2-beta2" targetFramework="xamarinios10" />
<package id="Xamarin.Forms" version="2.3.0.107" targetFramework="xamarinios10" /> <package id="Xamarin.Forms" version="2.3.0.107" targetFramework="xamarinios10" />
<package id="Xamarin.Google.iOS.Analytics" version="3.14.0.7" targetFramework="xamarinios10" />
<package id="XLabs.IoC" version="2.0.5782" targetFramework="xamarinios10" /> <package id="XLabs.IoC" version="2.0.5782" targetFramework="xamarinios10" />
<package id="XLabs.IoC.Unity" version="2.0.5782" targetFramework="xamarinios10" /> <package id="XLabs.IoC.Unity" version="2.0.5782" targetFramework="xamarinios10" />
</packages> </packages>

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props" Condition="Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform> <Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform>
@ -9,6 +10,8 @@
<RootNamespace>Bit.iOS.Test</RootNamespace> <RootNamespace>Bit.iOS.Test</RootNamespace>
<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix> <IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>
<AssemblyName>BitiOSTest</AssemblyName> <AssemblyName>BitiOSTest</AssemblyName>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
@ -93,6 +96,7 @@
<None Include="Info.plist" /> <None Include="Info.plist" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Content Include="Entitlements.plist" /> <Content Include="Entitlements.plist" />
<None Include="packages.config" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<BundleResource Include="Resources\Default.png" /> <BundleResource Include="Resources\Default.png" />
@ -100,6 +104,10 @@
<BundleResource Include="Resources\Default-568h@2x.png" /> <BundleResource Include="Resources\Default-568h@2x.png" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Google.Analytics, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\lib\Xamarin.iOS10\Google.Analytics.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="MonoTouch.NUnitLite" /> <Reference Include="MonoTouch.NUnitLite" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -122,4 +130,14 @@
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets'))" />
<Error Condition="!Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.props'))" />
<Error Condition="!Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets'))" />
</Target>
<Import Project="..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets" Condition="Exists('..\..\packages\Xamarin.Google.iOS.Analytics.3.14.0.7\build\Xamarin.Google.iOS.Analytics.targets')" />
<Import Project="..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets" Condition="Exists('..\..\packages\Xamarin.Build.Download.0.2.2-beta2\build\Xamarin.Build.Download.targets')" />
</Project> </Project>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Xamarin.Build.Download" version="0.2.2-beta2" targetFramework="xamarinios10" />
<package id="Xamarin.Google.iOS.Analytics" version="3.14.0.7" targetFramework="xamarinios10" />
</packages>