From 79746efa2d41b6344491b385bc827ae5df8387db Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Wed, 26 Jun 2019 20:28:23 -0400 Subject: [PATCH] action extension project --- bitwarden-mobile.sln | 35 +++++- src/Android/Android.csproj | 1 - src/Android/MainApplication.cs | 2 +- src/Core/Services/ApiService.cs | 14 +-- src/Core/Utilities/ServiceContainer.cs | 6 +- src/iOS.Core/Models/AppExtensionContext.cs | 50 ++++++++ src/iOS.Core/Models/CipherViewModel.cs | 42 +++++++ .../Models/PasswordGenerationOptions.cs | 13 ++ src/iOS.Core/iOS.Core.csproj | 3 + src/iOS.Extension/ActionViewController.cs | 71 +++++++++++ .../ActionViewController.designer.cs | 24 ++++ src/iOS.Extension/AppDelegate.cs | 30 +++++ src/iOS.Extension/Entitlements.plist | 14 +++ src/iOS.Extension/Info.plist | 109 +++++++++++++++++ src/iOS.Extension/Main.cs | 12 ++ src/iOS.Extension/MainInterface.storyboard | 63 ++++++++++ src/iOS.Extension/Properties/AssemblyInfo.cs | 35 ++++++ src/iOS.Extension/Resources/Icon.png | Bin 0 -> 595 bytes src/iOS.Extension/Resources/Icon@2x.png | Bin 0 -> 861 bytes src/iOS.Extension/Resources/Icon@3x.png | Bin 0 -> 1217 bytes src/iOS.Extension/Resources/ext-icon.png | Bin 0 -> 1263 bytes src/iOS.Extension/Resources/ext-icon@2x.png | Bin 0 -> 2532 bytes src/iOS.Extension/Resources/ext-icon@3x.png | Bin 0 -> 3838 bytes src/iOS.Extension/Resources/logo.png | Bin 0 -> 2593 bytes src/iOS.Extension/Resources/logo@2x.png | Bin 0 -> 5449 bytes src/iOS.Extension/Resources/logo@3x.png | Bin 0 -> 8426 bytes src/iOS.Extension/Resources/logo_white.png | Bin 0 -> 2512 bytes src/iOS.Extension/Resources/logo_white@2x.png | Bin 0 -> 11659 bytes src/iOS.Extension/Resources/logo_white@3x.png | Bin 0 -> 8402 bytes src/iOS.Extension/extension.js | 101 ++++++++++++++++ src/iOS.Extension/iOS.Extension.csproj | 113 ++++++++++++++++++ src/iOS/AppDelegate.cs | 3 +- src/iOS/iOS.csproj | 7 +- 33 files changed, 725 insertions(+), 23 deletions(-) create mode 100644 src/iOS.Core/Models/AppExtensionContext.cs create mode 100644 src/iOS.Core/Models/CipherViewModel.cs create mode 100644 src/iOS.Core/Models/PasswordGenerationOptions.cs create mode 100644 src/iOS.Extension/ActionViewController.cs create mode 100644 src/iOS.Extension/ActionViewController.designer.cs create mode 100644 src/iOS.Extension/AppDelegate.cs create mode 100644 src/iOS.Extension/Entitlements.plist create mode 100644 src/iOS.Extension/Info.plist create mode 100644 src/iOS.Extension/Main.cs create mode 100644 src/iOS.Extension/MainInterface.storyboard create mode 100644 src/iOS.Extension/Properties/AssemblyInfo.cs create mode 100644 src/iOS.Extension/Resources/Icon.png create mode 100644 src/iOS.Extension/Resources/Icon@2x.png create mode 100644 src/iOS.Extension/Resources/Icon@3x.png create mode 100644 src/iOS.Extension/Resources/ext-icon.png create mode 100644 src/iOS.Extension/Resources/ext-icon@2x.png create mode 100644 src/iOS.Extension/Resources/ext-icon@3x.png create mode 100644 src/iOS.Extension/Resources/logo.png create mode 100644 src/iOS.Extension/Resources/logo@2x.png create mode 100644 src/iOS.Extension/Resources/logo@3x.png create mode 100644 src/iOS.Extension/Resources/logo_white.png create mode 100644 src/iOS.Extension/Resources/logo_white@2x.png create mode 100644 src/iOS.Extension/Resources/logo_white@3x.png create mode 100644 src/iOS.Extension/extension.js create mode 100644 src/iOS.Extension/iOS.Extension.csproj diff --git a/bitwarden-mobile.sln b/bitwarden-mobile.sln index f86e31321..5b4e19d85 100644 --- a/bitwarden-mobile.sln +++ b/bitwarden-mobile.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.539 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29009.5 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Android", "src\Android\Android.csproj", "{304400AF-F0ED-40FA-B102-EA3C3EC43E4F}" EndProject @@ -35,6 +35,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "iOS.Core", "src\iOS.Core\iO EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "iOS", "src\iOS\iOS.csproj", "{599E0201-420A-4C3E-A7BA-5349F72E0B15}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "iOS.Extension", "src\iOS.Extension\iOS.Extension.csproj", "{324BE76C-38FA-4F11-8BB1-95C7B3B1B545}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Ad-Hoc|Any CPU = Ad-Hoc|Any CPU @@ -286,6 +288,34 @@ Global {599E0201-420A-4C3E-A7BA-5349F72E0B15}.Release|iPhone.Build.0 = Release|iPhone {599E0201-420A-4C3E-A7BA-5349F72E0B15}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator {599E0201-420A-4C3E-A7BA-5349F72E0B15}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Ad-Hoc|Any CPU.ActiveCfg = Release|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Ad-Hoc|Any CPU.Build.0 = Release|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Ad-Hoc|iPhone.ActiveCfg = Release|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Ad-Hoc|iPhone.Build.0 = Release|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.AppStore|Any CPU.ActiveCfg = Release|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.AppStore|Any CPU.Build.0 = Release|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.AppStore|iPhone.ActiveCfg = Release|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.AppStore|iPhone.Build.0 = Release|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.AppStore|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.AppStore|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Debug|Any CPU.ActiveCfg = Debug|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Debug|iPhone.ActiveCfg = Debug|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Debug|iPhone.Build.0 = Debug|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.FDroid|Any CPU.ActiveCfg = Release|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.FDroid|Any CPU.Build.0 = Release|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.FDroid|iPhone.ActiveCfg = Release|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.FDroid|iPhone.Build.0 = Release|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.FDroid|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.FDroid|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Release|Any CPU.ActiveCfg = Release|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Release|iPhone.ActiveCfg = Release|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Release|iPhone.Build.0 = Release|iPhone + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -299,6 +329,7 @@ Global {256F9E44-0AF5-4D97-A2F9-DA26080C0A5D} = {2E399654-26A2-46F6-B9CA-1B496A3F370A} {E71F3053-056C-4381-9638-048ED73BDFF6} = {D10CA4A9-F866-40E1-B658-F69051236C71} {599E0201-420A-4C3E-A7BA-5349F72E0B15} = {D10CA4A9-F866-40E1-B658-F69051236C71} + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545} = {D10CA4A9-F866-40E1-B658-F69051236C71} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7D436EA3-8B7E-45D2-8D14-0730BD2E0410} diff --git a/src/Android/Android.csproj b/src/Android/Android.csproj index f700e8098..64d9816bc 100644 --- a/src/Android/Android.csproj +++ b/src/Android/Android.csproj @@ -74,7 +74,6 @@ - diff --git a/src/Android/MainApplication.cs b/src/Android/MainApplication.cs index 60a4986ab..d8ba361d2 100644 --- a/src/Android/MainApplication.cs +++ b/src/Android/MainApplication.cs @@ -40,7 +40,7 @@ namespace Bit.Droid if(ServiceContainer.RegisteredServices.Count == 0) { RegisterLocalServices(); - ServiceContainer.Init(new AndroidClientHandler()); + ServiceContainer.Init(); if(App.Migration.MigrationHelpers.NeedsMigration()) { var task = App.Migration.MigrationHelpers.PerformMigrationAsync(); diff --git a/src/Core/Services/ApiService.cs b/src/Core/Services/ApiService.cs index 15d70265f..68ae77ed8 100644 --- a/src/Core/Services/ApiService.cs +++ b/src/Core/Services/ApiService.cs @@ -8,7 +8,6 @@ using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; using System; using System.Collections.Generic; -using System.Linq; using System.Net; using System.Net.Http; using System.Text; @@ -22,7 +21,7 @@ namespace Bit.Core.Services { ContractResolver = new CamelCasePropertyNamesContractResolver() }; - private readonly HttpClient _httpClient; + private readonly HttpClient _httpClient = new HttpClient(); private readonly ITokenService _tokenService; private readonly IPlatformUtilsService _platformUtilsService; private readonly Func _logoutCallbackAsync; @@ -31,22 +30,13 @@ namespace Bit.Core.Services public ApiService( ITokenService tokenService, IPlatformUtilsService platformUtilsService, - Func logoutCallbackAsync, - HttpMessageHandler httpMessageHandler = null) + Func logoutCallbackAsync) { _tokenService = tokenService; _platformUtilsService = platformUtilsService; _logoutCallbackAsync = logoutCallbackAsync; var device = _platformUtilsService.GetDevice(); _deviceType = device.ToString(); - if(httpMessageHandler != null) - { - _httpClient = new HttpClient(httpMessageHandler); - } - else - { - _httpClient = new HttpClient(); - } } public bool UrlsSet { get; private set; } diff --git a/src/Core/Utilities/ServiceContainer.cs b/src/Core/Utilities/ServiceContainer.cs index 29359602e..0b5669d1d 100644 --- a/src/Core/Utilities/ServiceContainer.cs +++ b/src/Core/Utilities/ServiceContainer.cs @@ -2,7 +2,6 @@ using Bit.Core.Services; using System; using System.Collections.Generic; -using System.Net.Http; using System.Threading.Tasks; namespace Bit.Core.Utilities @@ -12,7 +11,7 @@ namespace Bit.Core.Utilities public static Dictionary RegisteredServices { get; set; } = new Dictionary(); public static bool Inited { get; set; } - public static void Init(HttpClientHandler httpClientHandler = null) + public static void Init() { if(Inited) { @@ -32,8 +31,7 @@ namespace Bit.Core.Utilities var cryptoFunctionService = new PclCryptoFunctionService(cryptoPrimitiveService); var cryptoService = new CryptoService(storageService, secureStorageService, cryptoFunctionService); var tokenService = new TokenService(storageService); - var apiService = new ApiService(tokenService, platformUtilsService, (bool expired) => Task.FromResult(0), - httpClientHandler); + var apiService = new ApiService(tokenService, platformUtilsService, (bool expired) => Task.FromResult(0)); var appIdService = new AppIdService(storageService); var userService = new UserService(storageService, tokenService); var settingsService = new SettingsService(userService, storageService); diff --git a/src/iOS.Core/Models/AppExtensionContext.cs b/src/iOS.Core/Models/AppExtensionContext.cs new file mode 100644 index 000000000..7b288e18e --- /dev/null +++ b/src/iOS.Core/Models/AppExtensionContext.cs @@ -0,0 +1,50 @@ +using System; + +namespace Bit.iOS.Core.Models +{ + public class AppExtensionContext + { + private string _uriString; + + public Uri Uri + { + get + { + if(string.IsNullOrWhiteSpace(UrlString) || !Uri.TryCreate(UrlString, UriKind.Absolute, out Uri uri)) + { + return null; + } + return uri; + } + } + + public string UrlString + { + get + { + return _uriString; + } + set + { + _uriString = value; + if(string.IsNullOrWhiteSpace(_uriString)) + { + return; + } + if(!_uriString.StartsWith(Bit.Core.Constants.iOSAppProtocol) && _uriString.Contains(".")) + { + if(!_uriString.Contains("://") && !_uriString.Contains(" ")) + { + _uriString = string.Concat("http://", _uriString); + } + } + if(!_uriString.StartsWith("http") && !_uriString.StartsWith(Bit.Core.Constants.iOSAppProtocol)) + { + _uriString = string.Concat(Bit.Core.Constants.iOSAppProtocol, _uriString); + } + } + } + + public PasswordGenerationOptions PasswordOptions { get; set; } + } +} \ No newline at end of file diff --git a/src/iOS.Core/Models/CipherViewModel.cs b/src/iOS.Core/Models/CipherViewModel.cs new file mode 100644 index 000000000..5aa36d466 --- /dev/null +++ b/src/iOS.Core/Models/CipherViewModel.cs @@ -0,0 +1,42 @@ +using Bit.Core.Enums; +using Bit.Core.Models.View; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Bit.iOS.Core.Models +{ + public class CipherViewModel + { + public CipherViewModel(CipherView cipher) + { + Id = cipher.Id; + Name = cipher.Name; + Username = cipher.Login?.Username; + Password = cipher.Login?.Password; + Totp = cipher.Login?.Totp; + Uris = cipher.Login?.Uris?.Select(u => new LoginUriModel(u)).ToList(); + Fields = cipher.Fields?.Select(f => new Tuple(f.Name, f.Value)).ToList(); + } + + public string Id { get; set; } + public string Name { get; set; } + public string Username { get; set; } + public string Password { get; set; } + public List Uris { get; set; } + public string Totp { get; set; } + public List> Fields { get; set; } + + public class LoginUriModel + { + public LoginUriModel(LoginUriView data) + { + Uri = data?.Uri; + Match = data?.Match; + } + + public string Uri { get; set; } + public UriMatchType? Match { get; set; } + } + } +} diff --git a/src/iOS.Core/Models/PasswordGenerationOptions.cs b/src/iOS.Core/Models/PasswordGenerationOptions.cs new file mode 100644 index 000000000..4c2aa0c8b --- /dev/null +++ b/src/iOS.Core/Models/PasswordGenerationOptions.cs @@ -0,0 +1,13 @@ +using System; + +namespace Bit.iOS.Core.Models +{ + public class PasswordGenerationOptions + { + public int MinLength { get; set; } + public int MaxLength { get; set; } + public bool RequireDigits { get; set; } + public bool RequireSymbols { get; set; } + public string ForbiddenCharacters { get; set; } + } +} diff --git a/src/iOS.Core/iOS.Core.csproj b/src/iOS.Core/iOS.Core.csproj index d5b418526..082ff1fd7 100644 --- a/src/iOS.Core/iOS.Core.csproj +++ b/src/iOS.Core/iOS.Core.csproj @@ -54,6 +54,9 @@ + + + diff --git a/src/iOS.Extension/ActionViewController.cs b/src/iOS.Extension/ActionViewController.cs new file mode 100644 index 000000000..d4c79eeae --- /dev/null +++ b/src/iOS.Extension/ActionViewController.cs @@ -0,0 +1,71 @@ +using System; + +using MobileCoreServices; +using Foundation; +using UIKit; + +namespace iOS.Extension +{ + public partial class ActionViewController : UIViewController + { + public ActionViewController(IntPtr handle) : base(handle) + { + } + + public override void DidReceiveMemoryWarning() + { + // Releases the view if it doesn't have a superview. + base.DidReceiveMemoryWarning(); + + // Release any cached data, images, etc that aren't in use. + } + + public override void ViewDidLoad() + { + base.ViewDidLoad(); + + // Get the item[s] we're handling from the extension context. + + // For example, look for an image and place it into an image view. + // Replace this with something appropriate for the type[s] your extension supports. + bool imageFound = false; + + foreach(var item in ExtensionContext.InputItems) + { + foreach(var itemProvider in item.Attachments) + { + if(itemProvider.HasItemConformingTo(UTType.Image)) + { + // This is an image. We'll load it, then place it in our image view. + itemProvider.LoadItem(UTType.Image, null, delegate (NSObject image, NSError error) + { + if(image != null) + { + NSOperationQueue.MainQueue.AddOperation(delegate + { + imageView.Image = (UIImage)image; + }); + } + }); + + imageFound = true; + break; + } + } + + if(imageFound) + { + // We only handle one image, so stop looking for more. + break; + } + } + } + + partial void DoneClicked(NSObject sender) + { + // Return any edited content to the host app. + // This template doesn't do anything, so we just echo the passed-in items. + ExtensionContext.CompleteRequest(ExtensionContext.InputItems, null); + } + } +} diff --git a/src/iOS.Extension/ActionViewController.designer.cs b/src/iOS.Extension/ActionViewController.designer.cs new file mode 100644 index 000000000..1fcdee7e8 --- /dev/null +++ b/src/iOS.Extension/ActionViewController.designer.cs @@ -0,0 +1,24 @@ +// +// This file has been generated automatically to store outlets and +// actions made in the Xcode designer. If it is removed, they will be lost. +// Manual changes to this file may not be handled correctly. +// +using UIKit; +using Foundation; + +namespace iOS.Extension +{ + [Register("ActionViewController")] + partial class ActionViewController + { + [Outlet] + UIImageView imageView { get; set; } + + [Action("DoneClicked:")] + partial void DoneClicked(NSObject sender); + + void ReleaseDesignerOutlets() + { + } + } +} \ No newline at end of file diff --git a/src/iOS.Extension/AppDelegate.cs b/src/iOS.Extension/AppDelegate.cs new file mode 100644 index 000000000..6dc3fa4a5 --- /dev/null +++ b/src/iOS.Extension/AppDelegate.cs @@ -0,0 +1,30 @@ +using Foundation; +using UIKit; + +namespace Bit.iOS.Extension +{ + [Register("AppDelegate")] + public partial class AppDelegate : UIApplicationDelegate + { + public override UIWindow Window + { + get; set; + } + + public override void OnResignActivation(UIApplication application) + { + } + + public override void DidEnterBackground(UIApplication application) + { + } + + public override void WillEnterForeground(UIApplication application) + { + } + + public override void WillTerminate(UIApplication application) + { + } + } +} diff --git a/src/iOS.Extension/Entitlements.plist b/src/iOS.Extension/Entitlements.plist new file mode 100644 index 000000000..b20900dcc --- /dev/null +++ b/src/iOS.Extension/Entitlements.plist @@ -0,0 +1,14 @@ + + + + + com.apple.security.application-groups + + group.com.8bit.bitwarden + + keychain-access-groups + + $(AppIdentifierPrefix)com.8bit.bitwarden + + + diff --git a/src/iOS.Extension/Info.plist b/src/iOS.Extension/Info.plist new file mode 100644 index 000000000..04213d30a --- /dev/null +++ b/src/iOS.Extension/Info.plist @@ -0,0 +1,109 @@ + + + + + MinimumOSVersion + 10.0 + CFBundleDisplayName + Bitwarden + CFBundleName + Bitwarden Extension + CFBundleIdentifier + com.8bit.bitwarden.find-login-action-extension + CFBundleShortVersionString + 2.0.6 + CFBundleVersion + 50 + CFBundleLocalizations + + en + es + zh-Hans + zh-Hant + pt-PT + pt-BR + sv + sk + it + fi + fr + ro + id + hr + hu + nl + tr + uk + de + dk + cz + nb + ja + et + vi + pl + ko + fa + + CFBundleDevelopmentRegion + en + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + XPC! + CFBundleSignature + ???? + UIDeviceFamily + + 1 + 2 + + UISupportedInterfaceOrientations + + UIAppFonts + + FontAwesome.ttf + MaterialIcons_Regular.ttf + + UIRequiredDeviceCapabilities + + arm64 + + + ITSAppUsesNonExemptEncryption + + ITSEncryptionExportComplianceCode + ecf076d3-4824-4d7b-b716-2a9a47d7d296 + NSFaceIDUsageDescription + Use Face ID to unlock your vault. + NSExtension + + NSExtensionAttributes + + NSExtensionJavaScriptPreprocessingFile + extension + NSExtensionActivationRule + SUBQUERY ( + extensionItems, + $extensionItem, + SUBQUERY ( + $extensionItem.attachments, + $attachment, + ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url" + || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text" + || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "org.appextension.find-login-action" + || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "org.appextension.save-login-action" + || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "org.appextension.change-password-action" + || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "org.appextension.fill-webview-action" + || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "org.appextension.fill-browser-action" + || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.8bit.bitwarden.extension-setup" + ).@count == $extensionItem.attachments.@count + ).@count == 1 + + NSExtensionMainStoryboard + MainInterface + NSExtensionPointIdentifier + com.apple.ui-services + + + diff --git a/src/iOS.Extension/Main.cs b/src/iOS.Extension/Main.cs new file mode 100644 index 000000000..d79a88971 --- /dev/null +++ b/src/iOS.Extension/Main.cs @@ -0,0 +1,12 @@ +using UIKit; + +namespace Bit.iOS.Extension +{ + public class Application + { + static void Main(string[] args) + { + UIApplication.Main(args, null, "AppDelegate"); + } + } +} \ No newline at end of file diff --git a/src/iOS.Extension/MainInterface.storyboard b/src/iOS.Extension/MainInterface.storyboard new file mode 100644 index 000000000..76eede89d --- /dev/null +++ b/src/iOS.Extension/MainInterface.storyboard @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/iOS.Extension/Properties/AssemblyInfo.cs b/src/iOS.Extension/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..81d22147a --- /dev/null +++ b/src/iOS.Extension/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// 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("BitwardeniOSExtension")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("8bit Solutions LLC")] +[assembly: AssemblyProduct("Bitwarden")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[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("324be76c-38fa-4f11-8bb1-95c7b3b1b545")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/iOS.Extension/Resources/Icon.png b/src/iOS.Extension/Resources/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b594ad570d200ba1adf9feac9fca7dc3faf1e3 GIT binary patch literal 595 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU3?z3ec*Fy#+W|fyu0Yy&m;w&>@G7A9JW7K6 zf*BZ@m|0laIJkNF_yvVUM8zfK6%>`!H1&*(Eo_{eeZmscvkQuA8k(9r`e)2twRXd% zU5AgJI(Pp1&0F^#J$w23?fcJPzyJLGcje{(-+^Y{_jGX#u{izq%5}ab1BteW@{C9K ze!o}!e(%=r^{&fWy+XOz)#QH8y)fN|vk@5LLDebSa(TAQv~EcgiL%)8Q|evVFP}uF zFMl7(|C5@h`=IIA6n@n^wNbKmJrCAhKJ_V4x_r{KL#=U_K5gDDqv2Cv_LZH*a)axo zvo$Skifblm8S@?asxC51<(ZjS)AK)kZ<&kiG(PP5@KyBK)%ZJ_4DY#PB{Z&HxqOj- z{^wjxpXYtA5?`_`wse!)lX-m}&oN=IH@ok1ADEy2r^H!&hF-l=&V0tzC#Op95^?oz f&kQlz@tZ+o`{Q$G{_ULs^eTg=tDnm{r-UW|fe_5o literal 0 HcmV?d00001 diff --git a/src/iOS.Extension/Resources/Icon@2x.png b/src/iOS.Extension/Resources/Icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..37369f4d30a92c10d97f58da0390d8b205af2cbb GIT binary patch literal 861 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 ZzyRV@&z=+~`uP9=002ovPDHLkV1lt@Ndo`? literal 0 HcmV?d00001 diff --git a/src/iOS.Extension/Resources/ext-icon@2x.png b/src/iOS.Extension/Resources/ext-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ea619de7510aaac92bd9ab3c36925c54d038b9 GIT binary patch literal 2532 zcmcJR`#%%OIWm)wVlI<=#4)BVI`KfxYr*hA-zcMVHZeI=dR)b@bh6ocrZHj z908BPpF1BN-ifyX03^t0d$`B7abEE&S4HPTDU}XjILrZj1}%3Y#0EWktLz65e0}IP z{jW=TCk3_1tNMDjOiv}@&8wdSOZ9;JVG2jZ738u-6FQ%~Xq_;+EEO8%LnfE#jny<0 zr9M=yve$Zf#JBb@U%!5BK`4l9J{Q%kdb6SPxhm;%mG^Q1dCZTqF*M zGul7}?Bx-Q}1DkiME-?(t+#k<~?Hs>U=sPU@~e{CPB32#PCJWDcmq)D1q) zf1~ELTlv%$Uiy_J6OOzhj>(FtZRdb~jPCO0x(hB^q*~~x$MICIPsVs8>PgdKlR0Hq zhfuFR>gst+o3f)-?Fo;}9iuwubmRH4A76__{5^}rN!Gw>yS$H#DI%&p_6I785TprS>7&3X7+t;^7wJ2O)C!1MXUU)oagh0KToh_x&>E>!`YNL@Z`q}B3nfH86P+jtt z$F(DD3X6)&_6nqt9BY@wHANr_ykle;5GB=F&cJ{IVx&tbv=fJ4rHI2qU?G5?_*ec# zs-jWQ2v}EFH)!qI=&zk1hP)~RZ4F?E$f^D-|Hc2w|L>Z;{Xac%_FdKyP@KQ-iyIn1 z?F+%dKt|u~%uHG7bZ^R)urSn@2bT9UjEs$wpu)EqYM|o5w+%V5b^&Ykp0&Q3bKsOr z&sKTe6!vw2AtI%R5t=I5{Hv9f%F^b)By+`YrCiW1YQK=Hrtm8w4bh`8p=+cW(kBg7b zgk)fTdtFWUHBss0LMOJ4VS7?^9X;PZi(2LG?8JTf@1*{ zmN&hkI9+%2Tpz9Hxy;;FIi?kDJlETdBtVje^Dy~2GXb1%<#GC@4-86%RZcvF zHk=B(fA5~-o5%80FKaYHuPv{#Y$<7&= zkUtF3W``BE8(j+O{M#JqgIxt>{GIP7Z>4RawSK#8;dp5-0nLon=VW*Mw$Ocpc4w5~ zGPzXNC8ksrdKXu%X21c(XatU*cX`ln>BM5zuy5+lk7#ooTDerE@iSFzOm&XUd}9|q zgz*FOF523ZW#zfbq$|@Dk2UHw8H$D1-1xE&d-m|s;rtIrBMd3Z;gH4XNW6q!AJfP~ zfd269=HO&75(B}METonWNafEq4s8$1{rP)yhG#K_G4?K1Hzu4khX&I~%0lU39#>aDY+m0H0;w zFM>8K4PK(;6y4GKMl(pYr!Hr=e2qJ6>g9ikQH^jq8Uofe8G$Tymmi~jjVnEl7*S{G zG+td^^99-)WV3yZJfbao%;9q_O)i48Y{C8bkEfiNTZqa7jO7H!;4VK4Vr@*ppjlf# z?G{Ge0M!o7D6xx6vk`L>AhaNDunStG)9*#~$~Esvs&ZD2m=ld@p-)$#00fXCx3#f4-3apH@cCDw8M`~*PfLjy?1#}Q{sLi{fGR@Nn&B-;Fgh8pEcf*) zQ+gE{nws*^ctl8~By}Lrog{nk_*Z9bZEaj=%)6M+3w{E=yD)`(p53*+n!388y|l#11W_mR%Ixf( z%9b4RistQ7=jQM@*&wup)os3V5?SV0#V>{_qHHn1LMB~0Z>gf~i+Xy$79kdB480Z+ zaR*EB0;>SwAr&dmI=xUy1?{OF7K_x6^sv*Fn<)CuK2Q4NU0ef##Ua4$DMOmdr=+~Peh`}_Dv4Hwzcrt_e> z5#v&Kb6d;HInpvRwBBA9ocdC-F2DL-IEmy@&m~B%IL3|Sw|4J7RW{}=FP|o+`hHf( zm#+WRwexr5C$s$LRBeI9TGR~w#3ua>)^K2I%Gq$AMWyn@#6;3yDL36!$$U7vn?wtE4lA-fH-oFuKhJWpN*;*59rF- z%7sLF*NY&uax6M3;dcUt)C;Qw8h-VwEkOs?4#Pxa!;wNaRtF==Bqx~QSD!K!52Pdi k%=hwP=c<1<5~>6OPE2JZMSp2y?|st%XrzmMEg~@CA2a=$xc~qF literal 0 HcmV?d00001 diff --git a/src/iOS.Extension/Resources/ext-icon@3x.png b/src/iOS.Extension/Resources/ext-icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..96e4d1ce05b6f3f6704fe980e3efcf74e8124e97 GIT binary patch literal 3838 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 literal 0 HcmV?d00001 diff --git a/src/iOS.Extension/Resources/logo.png b/src/iOS.Extension/Resources/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..33ced5b12e05df53eb268ec0870e26b07af9ee6f GIT binary patch literal 2593 zcmV++3f}dJP)e6IhGCzS&zeeRdw6)F=`gnN z@2ZzB7n2;X*r2Sn#zSf%neE}>iKgQaPd4A6H!>!l?T~~_ycr*cd3d7nC?uPEylml< z#vbnuJ{jCC1W=sk@$m2-O%J>c9fl-S$)Mdlh$k5jPc%IT-3AaIuiKo7EeJ^@Zto09 zM-bM!;QIv>Z$%JoSr&Z1E+ESk`v2td5IwptpDWpw_=OBI);bpRQU;xF(Z462XDr8IwuG0U+|5sr5i2F}0 zM-c8ei||j@KZE>4xRmpV>B((zEDi>3S)vS7IZROIL4i@=Y6h2G{e4b&y{F|Vn2b|R)9I)H>;^la!{*8hE`>W6Y9=Fi35jF zjw)hYAlJ2~-I-#E11v8VCA8OvC`Mlp&*yMwb$enT3JuQaI(<0*iV>EaS$Il&ROYJXfL- z-pOAmJaK(xDqmECSF<4PSQz|Py%sq{YU+{Gjx9p&^ZxJR$>h} zia6>~e`CWu4Gnu@g{(|Hntjb7uMM`2_0rr`Qqj0@Fs`89)H0NQbewMzpU#PBVx}@4 zN+x4pa3I!*Ly%LVl$kQAIpI?XZ&zZv>fza7K*m0g-&O=1^nV z-1A_Pk~qDO=to6SGA3D#h$ZXdVeBq#qLZ@+k?HZ)S??I!a)hnQ@e-|G z(~XF7ChQ(O>Ik1AhDW1@O=|cg$Y7d7G@-@=;t;lI*KH3&(l#*fyGJ7wW8Gk#MGq{+ zUY{z*9w)S1RmwCZGboXNjEXLPt9xdLv+Y2wbE6oWl#tqsQVuQmsUu!a(^&PLXfkvM zn;N`jjs@F7d-io4DaqXb@IJq&;%akw1979KC+g+(pBkhzeZ5t_ZR$ z2h+C+QMSxo6gGi|gr*vK$)si35^_jLM(&@v15YyV9v8$C)g87_OQzz!0cGPR(#lqq z`Zy`_R*pDf6Q>MddNfNyey00p+5|m6CTOtUUmCBm*F+;Qt8w6qNG5B@o8c@=m+hfR zdpgcLjrYL~n?Uh+0%fvsw;cpTwk~0E8xt$_$!c&X%X6MP$(Aa{CiQ+3IX>8R5>codZSA5u6Sv;*jJ} z@n$$-lj@0tN|>27WH4@9oGXtSf^LE=AC>6f-4Kln*#xNcPX+8N!=-IYeU|6F{(ZcD zuEk}^2nOy=mFt)blq`?jR-8wW4n zlq?e>-#PR&DSS~PSd*0j!L~n27+bD3^zFes(e8%^>WORa1Kq(JTGmNJFm8TE5{)FA z$S@3uaFV6aUY?8|BNBq$le&^DP5VF>YB=6&uZTvn=~t#;%De(m*5{TKC2_2`sf2ai zWEPVUWMCLJ>B1*dvbrOd{fXhBNDp}frz0iXOvvApzOI4)M7_*cM%ezZhV^D7!Wf`I zUmB40fP~ns;F8(NukioZJeXhw?LLrqhXZW-x)o_nl7`wT6>3vc`8yno&?0Q2WOX2N z zV}zb|Ks{dELqag}DK<ARR}l}) z$(||-ZX2q_@b>&%n~6Gyw=e4}@*?Q*t1m6jnFIFW1y0*(<|Rh>pfR>KrzXg#U`@y? zV&0oUdwEg#aCLQMbKeq*4>~@8*=gbn$q>Nl4TGUF7zy5E z+V;Hqfp`xl)>tah7~Z}goaS3nRQTAys}N<1;}~AS?tpC|mRfpAHe{SP2C{EE>{pf} z=RJeuLO3O?>++~0lCK)(^kb_TAK?joacEb7WyrdN9HWvLj!~5|le)IIB^o&qmI{-* zyqL?0XgoYTx(k;#RZ6er0ZuDTTkt!uJv=-V{3E~s8StLF2VlaO00000NkvXXu0mjf DpN-AC literal 0 HcmV?d00001 diff --git a/src/iOS.Extension/Resources/logo@2x.png b/src/iOS.Extension/Resources/logo@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2a0ba60b9b13983200a2c921aa6793b3c1bf09ef GIT binary patch literal 5449 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 literal 0 HcmV?d00001 diff --git a/src/iOS.Extension/Resources/logo@3x.png b/src/iOS.Extension/Resources/logo@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..90473167697b867ede9400b31c6dce93b7e39ebc GIT binary patch literal 8426 zcmXY01zeQR(?10%0S^#q5CKU^fg_F%siV83k&vVF0O>{vsRJaAPLWROZX^Xxq>hqq zc#r?@eV)(f+1c;T%+BoYv$M}Lk!lcm0z67Q002Os@J>bp0KkBt=@1+&^s`XJcNAS< z+DNKM0sxi$f={Bh(RB(pSv@yRCu=uPGZ!m>q@|O&)k_6OGaD-nD>F-P=K(8G0N|yc zf{dh=*TQZlQhTXkHar=8nKh61tN3MN%{5H<2|X#d7O)6_z5{cDl-WA`R$O_tfQ3Ps zTA#^UzubB0_a=b9x><>j35k6M&?>bh?5j34`J5hasy;y*fWDe9W7+cMjW;8mXV=?Q9*AXlL!qDiw|2jkHL`tlRBDWCE?k*bXr#zS3#5~-y@FyGPq_@VZW z5&n`6ujGLQ0FapfD*~baYXbDg&T2gh`CHk3H#rX&lBf@mB{bWB*kZL_9U6d5$h7Fu+LcMA zP655~CJI+&{+Um7&MvMyaf&KYvxCncy6(gU$c4X94#!xs`M4kI^E% zNo!M%!GlL=D=l)oS|E>?be~o;%{)azILrWYjBMUkK{WlKBv&1)rQXDyt;if*PsOu< z$oq3ne|f_r645Q%d23%nfrfz)Z-&!hiV%_*$+sU)9yQsQP@>TSK#mV!%~FmOO#@!S zAD$1a|CQ)&a1=<9d~KQ|Xn>p4MDqzC&#JU@-+cjxWz8?1S0@z*-GCO8cpBUln5!HF zZCaEDwRXy&(GIc)&xag4d`)p#Ry4kVfoKq|xr+HJ1_3OU@~Pc6khm247xn)>N<$q& z;!b=$5NgOy-~)!{C6TTKWfHQu{jfE7%0iZl`ya~9Qrfp8v6muSA#kpT%R0qu!j5i0 zTk+mjK<+~CP}BD&)&wzGs^pWrU7nEGW?1-=%M0-!OEUQdLpi#HKG0e&q(x?rwL+uA zj^sbtmz0LdoAgz?PUuMp+ya(h1B9xz;J+VM2znR-bwJJk-#g&V^C)gG8kPV(0{jTF z{r^b|#Q47bU^RL+zC9WJ_@E{Ka~$<*`zFQq!HTHKGnDS&N0suwS@v(A=sEr;B=PKw zh{vaLxDzM;``XIKVfTBla;i?e&d$5nXie|%a(uW+k@-(1N7hcq)=n=Eg}3R`lZXt5 zdRzC0+nI8Q&iTgOUsU6pYNys@_+zyIUW!{6jHSgl#CUXmKK}P7#*}FW*y5kJz{?Kd z_W0U6!1Y*gX{c`pb=ag+CPlE`VTAVr0jOU1X#@^^MmBc!-8$9zbl2&$J)o#i+vN%o z5Y0g4uI3f@tj^!j7*!N(Fo1`wJ9|GQVDIN{HiQ_ue1B(b!8v*uFi}OH-Bc$~!*gn+ zK34AGuyc0#6_3u4P@@lrnVj8q%`1h7>Z;NCM0KW;TWqT@lBn4tlV~QmLw#s0fSf2x znrhMg<)Ji|<2T2dlk2rw#jS{B8tUbZmAYGB3+f2NV_4k5#@&-oTSJp`J4o7t4ewSv zDxnwSgz?jN>{iEQgSr_W@ZgbdRP(b~nq=Rly#9tPcabXwiEMoVl)IQjhS$JX$9vs9 zS6B4n|H8*$uHjymt-@S{t!3@q><&+{TQcJvoC_Hen^nBy_{&`DD_iw~6OPv>62WA& zIYu2ep3N^vLUMI$L?th8PUpUSbZ?xQ#izLeB;k1$iL$Y#zEJ&iJ=8g!S)2BB#?k2@ zo+wr&TdSe9Zp3H#?LvV}oX3gwBJG&b+ukqZB#6*UxK-Cz-x(fX_)Faqn&5%Wklf

*?lVy@ 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 A`2YX_ literal 0 HcmV?d00001 diff --git a/src/iOS.Extension/Resources/logo_white.png b/src/iOS.Extension/Resources/logo_white.png new file mode 100644 index 0000000000000000000000000000000000000000..b5856a638b285c04852d54579de6412560984673 GIT binary patch literal 2512 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 AQ2+n{ literal 0 HcmV?d00001 diff --git a/src/iOS.Extension/Resources/logo_white@3x.png b/src/iOS.Extension/Resources/logo_white@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..7d76d07d2dbc95d1fb927b1510ace8ac4487048e GIT binary patch literal 8402 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 literal 0 HcmV?d00001 diff --git a/src/iOS.Extension/extension.js b/src/iOS.Extension/extension.js new file mode 100644 index 000000000..6bbad37f2 --- /dev/null +++ b/src/iOS.Extension/extension.js @@ -0,0 +1,101 @@ +var BitwardenExtension = function () { }; + +BitwardenExtension.prototype = { + run: function (arguments) { + console.log('Run'); + console.log(arguments); + + var args = { + 'url_string': document.URL, + pageDetails: this.collect(document) + }; + + console.log(args); + arguments.completionFunction(args); + }, + finalize: function (arguments) { + console.log('Finalize'); + console.log(arguments); + + if (arguments.fillScript) { + this.fill(document, JSON.parse(arguments.fillScript)); + } + }, + + /* + 1Password Extension + + Lovingly handcrafted by Dave Teare, Michael Fey, Rad Azzouz, and Roustem Karimov. + Copyright (c) 2014 AgileBits. All rights reserved. + + ================================================================================ + + Copyright (c) 2014 AgileBits Inc. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + */ + + collect: function(document, undefined) { + var isFirefox = false, isChrome = false, isSafari = true; + document.elementsByOPID={};document.addEventListener('input',function(b){!1!==b.a&&'input'===b.target.tagName.toLowerCase()&&(b.target.dataset['com.agilebits.onepassword.userEdited']='yes')},!0); + function q(b,d){function f(a,e){var c=a[e];if('string'==typeof c)return c;c=a.getAttribute(e);return'string'==typeof c?c:null}function h(a,e){if(-1===['text','password'].indexOf(e.type.toLowerCase())||!(m.test(a.value)||m.test(a.htmlID)||m.test(a.htmlName)||m.test(a.placeholder)||m.test(a['label-tag'])||m.test(a['label-data'])||m.test(a['label-aria'])))return!1;if(!a.visible)return!0;if('password'==e.type.toLowerCase())return!1;var c=e.type;v(e,!0);return c!==e.type}function n(a){switch(p(a.type)){case 'checkbox':return a.checked? + '✓':'';case 'hidden':a=a.value;if(!a||'number'!=typeof a.length)return'';254\\?]/mg,''):null;return[c?c:null,a.value]}),{options:a}):null}function r(a){var e;for(a=a.parentElement||a.parentNode;a&&'td'!=p(a.tagName);)a=a.parentElement||a.parentNode;if(!a|| + void 0===a)return null;e=a.parentElement||a.parentNode;if('tr'!=e.tagName.toLowerCase())return null;e=e.previousElementSibling;if(!e||'tr'!=(e.tagName+'').toLowerCase()||e.cells&&a.cellIndex>=e.cells.length)return null;a=e.cells[a.cellIndex];a=a.textContent||a.innerText;return a=x(a)}function s(a){var e,c=[];if(a.labels&&a.labels.length&&0b.clientWidth||10>b.clientHeight)return!1;var s=b.getClientRects();if(0===s.length)return!1;for(var g=0;gh||0>r.right)return!1;if(0>l||l>h||0>d||d>n)return!1;for(f=b.ownerDocument.elementFromPoint(l+(f.right>window.innerWidth?(window.innerWidth-l)/2:f.width/2),d+(f.bottom>window.innerHeight? + (window.innerHeight-d)/2:f.height/2));f&&f!==b&&f!==document;){if(f.tagName&&'string'===typeof f.tagName&&'label'===f.tagName.toLowerCase()&&b.labels&&0 + + + Debug + iPhoneSimulator + {324BE76C-38FA-4F11-8BB1-95C7B3B1B545} + {EE2C853D-36AF-4FDB-B1AD-8E90477E2198};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Bit.iOS.Extension + BitwardeniOSExtension + Resources + Properties + + + true + full + false + bin\iPhoneSimulator\Debug + DEBUG + prompt + 4 + false + x86_64 + None + true + + + none + true + bin\iPhoneSimulator\Release + prompt + 4 + None + x86_64 + false + Entitlements.plist + + + true + full + false + bin\iPhone\Debug + DEBUG + prompt + 4 + false + ARM64 + Entitlements.plist + iPhone Developer + true + + + none + true + bin\iPhone\Release + prompt + 4 + Entitlements.plist + ARM64 + false + iPhone Developer + + + + + + + + + + + + ActionViewController.cs + + + + + + + + + + + + + {e71f3053-056c-4381-9638-048ed73bdff6} + iOS.Core + false + false + + + + + Always + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/iOS/AppDelegate.cs b/src/iOS/AppDelegate.cs index 08e602334..93c01acda 100644 --- a/src/iOS/AppDelegate.cs +++ b/src/iOS/AppDelegate.cs @@ -6,7 +6,6 @@ using Bit.App.Abstractions; using Bit.App.Resources; using Bit.App.Services; using Bit.App.Utilities; -using Bit.Core; using Bit.Core.Abstractions; using Bit.Core.Services; using Bit.Core.Utilities; @@ -40,7 +39,7 @@ namespace Bit.iOS public override bool FinishedLaunching(UIApplication app, NSDictionary options) { - Xamarin.Forms.Forms.Init(); + Forms.Init(); InitApp(); Bootstrap(); _deviceActionService = ServiceContainer.Resolve("deviceActionService"); diff --git a/src/iOS/iOS.csproj b/src/iOS/iOS.csproj index c53a67c51..6aab5dc7f 100644 --- a/src/iOS/iOS.csproj +++ b/src/iOS/iOS.csproj @@ -140,7 +140,6 @@ - @@ -166,6 +165,12 @@ false false + + {324be76c-38fa-4f11-8bb1-95c7b3b1b545} + iOS.Extension + true + false +