icons and splash screen

This commit is contained in:
Kyle Spearrin 2019-06-11 22:20:59 -04:00
parent e05708979d
commit c45b62fa6e
74 changed files with 355 additions and 103 deletions

View File

@ -9,6 +9,7 @@ using Bit.Core.Services;
using Bit.Core.Utilities;
using Bit.iOS.Core.Services;
using Bit.iOS.Services;
using CoreNFC;
using Foundation;
using UIKit;
@ -21,7 +22,9 @@ namespace Bit.iOS
private const string AppGroupId = "group.com.8bit.bitwarden";
private const string AccessGroup = "LTZ2PFU5D6.com.8bit.bitwarden";
private iOSPushNotificationHandler _pushHandler;
private NFCNdefReaderSession _nfcSession = null;
private iOSPushNotificationHandler _pushHandler = null;
private NFCReaderDelegate _nfcDelegate = null;
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
@ -72,6 +75,7 @@ namespace Bit.iOS
ServiceContainer.Init();
_pushHandler = new iOSPushNotificationHandler(
ServiceContainer.Resolve<IPushNotificationListenerService>("pushNotificationListenerService"));
_nfcDelegate = new NFCReaderDelegate((success, message) => { }); // TODO: process YubiKey
// TODO: HockeyApp Init
}
@ -147,5 +151,11 @@ namespace Bit.iOS
disableFavicon);
await ServiceContainer.Resolve<IEnvironmentService>("environmentService").SetUrlsFromStorageAsync();
}
private void AppearanceAdjustments()
{
UINavigationBar.Appearance.ShadowImage = new UIImage();
UINavigationBar.Appearance.SetBackgroundImage(new UIImage(), UIBarMetrics.Default);
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 845 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -82,6 +82,8 @@
</array>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile~ipad</key>
<string>LaunchScreen</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
@ -103,7 +105,7 @@
<true/>
</dict>
<key>XSAppIconAssets</key>
<string>Assets.xcassets/AppIcon.appiconset</string>
<string>Resources/Assets.xcassets/AppIcons.appiconset</string>
<key>ITSAppUsesNonExemptEncryption</key>
<true/>
<key>ITSEncryptionExportComplianceCode</key>

View File

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6211" systemVersion="14A298i" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="5">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6204"/>
</dependencies>
<scenes>
<scene sceneID="4">
<objects>
<viewController id="5" sceneMemberID="viewController" customClass="LaunchScreenViewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="2"/>
<viewControllerLayoutGuide type="bottom" id="3"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="6">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" customColorSpace="calibratedWhite" colorSpace="calibratedRGB" red="0.92549019607843142" green="0.94117647058823528" blue="0.96078431372549022" alpha="1"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" id="16" translatesAutoresizingMaskIntoConstraints="NO" image="logo.png">
<rect key="frame" x="159" y="248" width="282" height="44"/>
</imageView>
</subviews>
<constraints>
<constraint id="19" firstItem="16" firstAttribute="centerY" secondItem="6" secondAttribute="centerY" constant="-30"/>
<constraint id="20" firstItem="6" firstAttribute="centerX" secondItem="16" secondAttribute="centerX"/>
</constraints>
</view>
<connections/>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="7" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-54" y="0.0"/>
</scene>
</scenes>
<resources>
<image name="Default.png" width="320" height="480"/>
<image name="fa-cogs.png" width="22" height="22"/>
<image name="fa-lock.png" width="22" height="22"/>
<image name="fa-refresh.png" width="22" height="22"/>
<image name="fa_folder_open.png" width="14" height="14"/>
<image name="Icon-120.png" width="120" height="120"/>
<image name="Icon-152.png" width="152" height="152"/>
<image name="Icon-16.png" width="16" height="16"/>
<image name="Icon-24.png" width="24" height="24"/>
<image name="Icon-32.png" width="32" height="32"/>
<image name="Icon-40.png" width="40" height="40"/>
<image name="Icon-60.png" width="60" height="60"/>
<image name="Icon-64.png" width="64" height="64"/>
<image name="Icon-72.png" width="72" height="72"/>
<image name="Icon-76.png" width="76" height="76"/>
<image name="Icon-Small-40.png" width="40" height="40"/>
<image name="Icon-Small-50.png" width="50" height="50"/>
<image name="Icon-Small.png" width="29" height="29"/>
<image name="Icon.png" width="57" height="57"/>
<image name="ion_chevron_right.png" width="14" height="14"/>
<image name="ion_plus.png" width="22" height="22"/>
<image name="logo.png" width="282" height="44"/>
<image name="cogs.png" width="29" height="29"/>
<image name="eye.png" width="22" height="22"/>
<image name="eye_slash.png" width="22" height="22"/>
<image name="more.png" width="28" height="28"/>
<image name="more_selected.png" width="28" height="28"/>
<image name="plus.png" width="18" height="18"/>
<image name="star.png" width="25" height="25"/>
<image name="cloudup.png" width="44" height="44"/>
<image name="envelope.png" width="18" height="18"/>
<image name="globe.png" width="44" height="44"/>
<image name="lightbulb-o.png" width="18" height="18"/>
<image name="lock.png" width="18" height="18"/>
<image name="refresh.png" width="44" height="44"/>
<image name="upload.png" width="44" height="44"/>
<image name="user.png" width="18" height="18"/>
<image name="wrench.png" width="22" height="22"/>
<image name="camera.png" width="22" height="22"/>
<image name="download.png" width="18" height="18"/>
<image name="ext-act.png" width="290" height="252"/>
<image name="ext-more.png" width="290" height="252"/>
<image name="ext-use.png" width="290" height="252"/>
<image name="fa_lock.png" width="25" height="25"/>
<image name="fingerprint.png" width="91" height="92"/>
<image name="folder.png" width="18" height="18"/>
<image name="Icon-83.5.png" width="83.5" height="83.5"/>
<image name="lightbulb.png" width="18" height="18"/>
<image name="paperclip.png" width="14" height="14"/>
<image name="photo.png" width="22" height="22"/>
<image name="share.png" width="14" height="14"/>
<image name="share_tools.png" width="44" height="44"/>
<image name="tools.png" width="26" height="26"/>
<image name="trash.png" width="18" height="18"/>
<image name="yubikey.png" width="266" height="160"/>
</resources>
</document>

View File

@ -0,0 +1,53 @@
using CoreNFC;
using Foundation;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace Bit.iOS
{
public class NFCReaderDelegate : NFCNdefReaderSessionDelegate
{
private Regex _otpPattern = new Regex("^.*?([cbdefghijklnrtuv]{32,64})$");
private Action<bool, string> _callback;
public NFCReaderDelegate(Action<bool, string> callback)
{
_callback = callback;
}
public override void DidDetect(NFCNdefReaderSession session, NFCNdefMessage[] messages)
{
var results = new List<string>();
foreach(var message in messages)
{
foreach(var record in message.Records)
{
try
{
results.Add(new NSString(record.Payload, NSStringEncoding.UTF8));
}
catch { }
}
}
foreach(var result in results)
{
var matches = _otpPattern.Matches(result);
if(matches.Count > 0 && matches[0].Groups.Count > 1)
{
var otp = matches[0].Groups[1].ToString();
_callback.Invoke(true, otp);
return;
}
}
_callback.Invoke(false, "No tags were read.");
}
public override void DidInvalidate(NFCNdefReaderSession session, NSError error)
{
_callback.Invoke(false, error?.LocalizedDescription);
}
}
}

View File

@ -4,109 +4,109 @@
"scale": "2x",
"size": "20x20",
"idiom": "iphone",
"filename": "Icon40.png"
"filename": "Icon-40.png"
},
{
"scale": "3x",
"size": "20x20",
"idiom": "iphone",
"filename": "Icon60.png"
"filename": "Icon-60.png"
},
{
"scale": "2x",
"size": "29x29",
"idiom": "iphone",
"filename": "Icon58.png"
"filename": "Icon-58.png"
},
{
"scale": "3x",
"size": "29x29",
"idiom": "iphone",
"filename": "Icon87.png"
"filename": "Icon-87.png"
},
{
"scale": "2x",
"size": "40x40",
"idiom": "iphone",
"filename": "Icon80.png"
"filename": "Icon-80.png"
},
{
"scale": "3x",
"size": "40x40",
"idiom": "iphone",
"filename": "Icon120.png"
"filename": "Icon-120.png"
},
{
"scale": "2x",
"size": "60x60",
"idiom": "iphone",
"filename": "Icon120.png"
"filename": "Icon-120.png"
},
{
"scale": "3x",
"size": "60x60",
"idiom": "iphone",
"filename": "Icon180.png"
"filename": "Icon-180.png"
},
{
"scale": "1x",
"size": "20x20",
"idiom": "ipad",
"filename": "Icon20.png"
"filename": "Icon-20.png"
},
{
"scale": "2x",
"size": "20x20",
"idiom": "ipad",
"filename": "Icon40.png"
"filename": "Icon-40.png"
},
{
"scale": "1x",
"size": "29x29",
"idiom": "ipad",
"filename": "Icon29.png"
"filename": "Icon-29.png"
},
{
"scale": "2x",
"size": "29x29",
"idiom": "ipad",
"filename": "Icon58.png"
"filename": "Icon-58.png"
},
{
"scale": "1x",
"size": "40x40",
"idiom": "ipad",
"filename": "Icon40.png"
"filename": "Icon-40.png"
},
{
"scale": "2x",
"size": "40x40",
"idiom": "ipad",
"filename": "Icon80.png"
"filename": "Icon-80.png"
},
{
"scale": "1x",
"size": "76x76",
"idiom": "ipad",
"filename": "Icon76.png"
"filename": "Icon-76.png"
},
{
"scale": "2x",
"size": "76x76",
"idiom": "ipad",
"filename": "Icon152.png"
"filename": "Icon-152.png"
},
{
"scale": "2x",
"size": "83.5x83.5",
"idiom": "ipad",
"filename": "Icon167.png"
"filename": "Icon-167.png"
},
{
"scale": "1x",
"size": "1024x1024",
"idiom": "ios-marketing",
"filename": "Icon1024.png"
"filename": "Icon-1024.png"
}
],
"properties": {},

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 800 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 863 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

View File

@ -1,39 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6245" systemVersion="13F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="X5k-f2-b5h">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6238"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="gAE-YM-kbH">
<objects>
<viewController id="X5k-f2-b5h" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Y8P-hJ-Z43"/>
<viewControllerLayoutGuide type="bottom" id="9ZL-r4-8FZ"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="yd7-JS-zBw">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" misplaced="YES" image="Icon-60.png" translatesAutoresizingMaskIntoConstraints="NO" id="23">
<rect key="frame" x="270" y="270" width="60" height="60"/>
<rect key="contentStretch" x="0.0" y="0.0" width="0.0" height="0.0"/>
</imageView>
</subviews>
<color key="backgroundColor" red="0.20392156862745098" green="0.59607843137254901" blue="0.85882352941176465" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstItem="23" firstAttribute="centerY" secondItem="yd7-JS-zBw" secondAttribute="centerY" priority="1" id="39"/>
<constraint firstItem="23" firstAttribute="centerX" secondItem="yd7-JS-zBw" secondAttribute="centerX" priority="1" id="41"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="XAI-xm-WK6" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="349" y="339"/>
</scene>
</scenes>
<resources>
<image name="Icon-60.png" width="180" height="180"/>
</resources>
</document>

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

BIN
src/iOS/Resources/cog.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
src/iOS/Resources/lock.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 663 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 877 B

BIN
src/iOS/Resources/login.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 657 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
src/iOS/Resources/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

BIN
src/iOS/Resources/plus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 686 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 693 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 957 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 KiB

View File

@ -112,6 +112,7 @@
<Compile Include="Main.cs" />
<Compile Include="AppDelegate.cs" />
<Compile Include="Migration\KeyChainStorageService.cs" />
<Compile Include="NFCReaderDelegate.cs" />
<Compile Include="Renderers\CustomContentPageRenderer.cs" />
<Compile Include="Renderers\HybridWebViewRenderer.cs" />
<Compile Include="Services\DeviceActionService.cs" />
@ -122,51 +123,12 @@
<Compile Include="Properties\AssemblyInfo.cs" />
<BundleResource Include="Resources\FontAwesome.ttf" />
<BundleResource Include="Resources\MaterialIcons_Regular.ttf" />
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Contents.json">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup>
<ItemGroup>
<InterfaceDefinition Include="Resources\LaunchScreen.storyboard" />
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Contents.json">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon1024.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon180.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon167.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon152.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon120.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon87.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon80.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon76.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon60.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon58.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon40.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon29.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon20.png">
<Visible>false</Visible>
</ImageAsset>
<InterfaceDefinition Include="LaunchScreen.storyboard" />
</ItemGroup>
<ItemGroup>
<Reference Include="System" />
@ -197,5 +159,177 @@
<IsWatchApp>false</IsWatchApp>
</ProjectReference>
</ItemGroup>
<ItemGroup />
<ItemGroup>
<BundleResource Include="Resources\autofill-kb.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\autofill-kb%402x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\autofill-kb%403x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\cog.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\cog%402x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\cog%403x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\ext-act.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\ext-act%402x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\ext-act%403x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\ext-more.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\ext-more%402x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\ext-more%403x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\ext-use.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\ext-use%402x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\ext-use%403x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\lock.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\lock%402x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\lock%403x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\login.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\login%402x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\login%403x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\logo.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\logo%402x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\logo%403x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\plus.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\plus%402x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\plus%403x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\refresh.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\refresh%402x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\refresh%403x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\search.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\search%402x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\search%403x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\yubikey.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\yubikey%402x.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\yubikey%403x.png" />
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-1024.png">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-120.png">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-152.png">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-167.png">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-180.png">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-20.png">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-29.png">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-40.png">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-58.png">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-60.png">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-76.png">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-80.png">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Assets.xcassets\AppIcons.appiconset\Icon-87.png">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup>
</Project>