11 Commits

Author SHA1 Message Date
michael starke
627d48a74e bumped version 2016-02-22 10:59:05 +01:00
michael starke
0aea2629a0 Merge branch 'fix_broken_keyfile_remembering' 2016-02-22 10:57:00 +01:00
michael starke
dee07d1ecd fixed #426 2016-02-22 10:56:23 +01:00
michael starke
c509dbff99 Removed bottom bar below enty tabel 2016-02-17 17:23:29 +01:00
michael starke
6c22e90860 removed bottom bar in outline view 2016-02-17 15:24:34 +01:00
michael starke
142e020492 Added KeeWeb to Readme 2016-02-16 18:32:49 +01:00
michael starke
3abf1982b1 Removed DSA resources since it cause trouble in the update process 2016-02-15 18:39:43 +01:00
michael starke
2089e7ad8a Updated to current Xcode Version 2016-02-15 17:46:32 +01:00
michael starke
37f7c59976 removed unnecessary interfaces, bumped version 2016-02-15 17:32:56 +01:00
michael starke
2f1b7546aa Updated to current Xcode version 2016-02-15 14:14:06 +01:00
michael starke
9344b974a5 fixed issue with broken sort descriptors afer KeePassKit API change 2016-02-15 14:13:55 +01:00
13 changed files with 66 additions and 178 deletions

View File

@@ -191,7 +191,6 @@
4CA2335A176DBFE100F0B6AC /* MPLockDaemon.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA23359176DBFE100F0B6AC /* MPLockDaemon.m */; }; 4CA2335A176DBFE100F0B6AC /* MPLockDaemon.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA23359176DBFE100F0B6AC /* MPLockDaemon.m */; };
4CA334CA18AD60D1008A3322 /* MPWindowAssociationsTableViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA334C918AD60D1008A3322 /* MPWindowAssociationsTableViewDelegate.m */; }; 4CA334CA18AD60D1008A3322 /* MPWindowAssociationsTableViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA334C918AD60D1008A3322 /* MPWindowAssociationsTableViewDelegate.m */; };
4CA3530B18A53CB800839B0F /* MPKeyMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA3530A18A53CB800839B0F /* MPKeyMapper.m */; }; 4CA3530B18A53CB800839B0F /* MPKeyMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA3530A18A53CB800839B0F /* MPKeyMapper.m */; };
4CA3531218A5577300839B0F /* dsa_sparkle_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 4CA3531118A5577300839B0F /* dsa_sparkle_pub.pem */; };
4CAD748C15B889B700104512 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CAD748B15B889B700104512 /* Security.framework */; }; 4CAD748C15B889B700104512 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CAD748B15B889B700104512 /* Security.framework */; };
4CAD748E15B88AC100104512 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CAD748D15B88AC100104512 /* libz.dylib */; }; 4CAD748E15B88AC100104512 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CAD748D15B88AC100104512 /* libz.dylib */; };
4CB915941A0159A20089CE5B /* DuplicateEntryOptionsWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CB915931A0159A20089CE5B /* DuplicateEntryOptionsWindow.xib */; }; 4CB915941A0159A20089CE5B /* DuplicateEntryOptionsWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CB915931A0159A20089CE5B /* DuplicateEntryOptionsWindow.xib */; };
@@ -582,7 +581,6 @@
4CA334C918AD60D1008A3322 /* MPWindowAssociationsTableViewDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPWindowAssociationsTableViewDelegate.m; sourceTree = "<group>"; }; 4CA334C918AD60D1008A3322 /* MPWindowAssociationsTableViewDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPWindowAssociationsTableViewDelegate.m; sourceTree = "<group>"; };
4CA3530918A53CB800839B0F /* MPKeyMapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPKeyMapper.h; sourceTree = "<group>"; }; 4CA3530918A53CB800839B0F /* MPKeyMapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPKeyMapper.h; sourceTree = "<group>"; };
4CA3530A18A53CB800839B0F /* MPKeyMapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPKeyMapper.m; sourceTree = "<group>"; }; 4CA3530A18A53CB800839B0F /* MPKeyMapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPKeyMapper.m; sourceTree = "<group>"; };
4CA3531118A5577300839B0F /* dsa_sparkle_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_sparkle_pub.pem; sourceTree = "<group>"; };
4CAD748B15B889B700104512 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; 4CAD748B15B889B700104512 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
4CAD748D15B88AC100104512 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; 4CAD748D15B88AC100104512 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
4CB63A6018986530002DEC4C /* MPFlagsHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPFlagsHelper.h; sourceTree = "<group>"; }; 4CB63A6018986530002DEC4C /* MPFlagsHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPFlagsHelper.h; sourceTree = "<group>"; };
@@ -1185,7 +1183,6 @@
4C77E36D15B84A240093A587 /* Supporting Files */ = { 4C77E36D15B84A240093A587 /* Supporting Files */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
4CA3531118A5577300839B0F /* dsa_sparkle_pub.pem */,
4C888C8E16EB6C91003D34A1 /* Localizable.strings */, 4C888C8E16EB6C91003D34A1 /* Localizable.strings */,
4CB9339716D3A0DD00A13B5D /* Credits.rtf */, 4CB9339716D3A0DD00A13B5D /* Credits.rtf */,
4C77E36E15B84A240093A587 /* MacPass-Info.plist */, 4C77E36E15B84A240093A587 /* MacPass-Info.plist */,
@@ -1586,7 +1583,6 @@
6021FE5618E1429500C3BC51 /* IntegrationSettings.xib in Resources */, 6021FE5618E1429500C3BC51 /* IntegrationSettings.xib in Resources */,
4C3826B81AD04D8E007D7D67 /* 44_NotesTemplate.pdf in Resources */, 4C3826B81AD04D8E007D7D67 /* 44_NotesTemplate.pdf in Resources */,
4C3826C41AD04D8E007D7D67 /* 57_TextViewTemplate.pdf in Resources */, 4C3826C41AD04D8E007D7D67 /* 57_TextViewTemplate.pdf in Resources */,
4CA3531218A5577300839B0F /* dsa_sparkle_pub.pem in Resources */,
6021FE9818E1650F00C3BC51 /* DatabaseSettingsWindow.xib in Resources */, 6021FE9818E1650F00C3BC51 /* DatabaseSettingsWindow.xib in Resources */,
4C6D1D25178579570014C5A5 /* 48_FolderTemplate.pdf in Resources */, 4C6D1D25178579570014C5A5 /* 48_FolderTemplate.pdf in Resources */,
4C701CBC178618A000581B88 /* 12_RemoteTemplate.pdf in Resources */, 4C701CBC178618A000581B88 /* 12_RemoteTemplate.pdf in Resources */,

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9531"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9532"/>
<capability name="box content view" minToolsVersion="7.0"/> <capability name="box content view" minToolsVersion="7.0"/>
</dependencies> </dependencies>
<objects> <objects>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9059" systemVersion="15B42" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9059"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9532"/>
</dependencies> </dependencies>
<objects> <objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPContextBarViewController"> <customObject id="-2" userLabel="File's Owner" customClass="MPContextBarViewController">
@@ -26,7 +26,6 @@
<customObject id="-3" userLabel="Application" customClass="NSObject"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/>
<tabView type="noTabsNoBorder" translatesAutoresizingMaskIntoConstraints="NO" id="8MB-fC-M2Q"> <tabView type="noTabsNoBorder" translatesAutoresizingMaskIntoConstraints="NO" id="8MB-fC-M2Q">
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/> <rect key="frame" x="0.0" y="0.0" width="576" height="30"/>
<animations/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<tabViewItems> <tabViewItems>
<tabViewItem label="Filter" identifier="1" id="Ud6-Nz-6PS"> <tabViewItem label="Filter" identifier="1" id="Ud6-Nz-6PS">
@@ -39,7 +38,6 @@
<subviews> <subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6">
<rect key="frame" x="6" y="8" width="47" height="14"/> <rect key="frame" x="6" y="8" width="47" height="14"/>
<animations/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Search:" id="7"> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Search:" id="7">
<font key="font" metaFont="smallSystemBold"/> <font key="font" metaFont="smallSystemBold"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
@@ -48,7 +46,6 @@
</textField> </textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="O7W-cn-eUP"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="O7W-cn-eUP">
<rect key="frame" x="59" y="6" width="42" height="17"/> <rect key="frame" x="59" y="6" width="42" height="17"/>
<animations/>
<buttonCell key="cell" type="recessed" title="Title" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="53D-ne-nv6"> <buttonCell key="cell" type="recessed" title="Title" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="53D-ne-nv6">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/> <font key="font" metaFont="systemBold" size="12"/>
@@ -59,7 +56,6 @@
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0R1-PX-dgn"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0R1-PX-dgn">
<rect key="frame" x="109" y="6" width="76" height="17"/> <rect key="frame" x="109" y="6" width="76" height="17"/>
<animations/>
<buttonCell key="cell" type="recessed" title="Username" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="jfQ-Jh-2gl"> <buttonCell key="cell" type="recessed" title="Username" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="jfQ-Jh-2gl">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/> <font key="font" metaFont="systemBold" size="12"/>
@@ -70,7 +66,6 @@
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Uhl-ck-vVQ"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Uhl-ck-vVQ">
<rect key="frame" x="193" y="6" width="73" height="17"/> <rect key="frame" x="193" y="6" width="73" height="17"/>
<animations/>
<buttonCell key="cell" type="recessed" title="Password" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="rvQ-4V-SsS"> <buttonCell key="cell" type="recessed" title="Password" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="rvQ-4V-SsS">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/> <font key="font" metaFont="systemBold" size="12"/>
@@ -81,7 +76,6 @@
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Bn2-iY-mQ3"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Bn2-iY-mQ3">
<rect key="frame" x="274" y="6" width="39" height="17"/> <rect key="frame" x="274" y="6" width="39" height="17"/>
<animations/>
<buttonCell key="cell" type="recessed" title="URL" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="92o-gN-Psj"> <buttonCell key="cell" type="recessed" title="URL" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="92o-gN-Psj">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/> <font key="font" metaFont="systemBold" size="12"/>
@@ -92,7 +86,6 @@
</button> </button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SaV-5p-jIX"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SaV-5p-jIX">
<rect key="frame" x="321" y="6" width="50" height="17"/> <rect key="frame" x="321" y="6" width="50" height="17"/>
<animations/>
<buttonCell key="cell" type="recessed" title="Notes" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="iDN-2E-hwt"> <buttonCell key="cell" type="recessed" title="Notes" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="iDN-2E-hwt">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/> <font key="font" metaFont="systemBold" size="12"/>
@@ -103,7 +96,6 @@
</button> </button>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aPQ-t2-bgz"> <popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aPQ-t2-bgz">
<rect key="frame" x="492" y="5" width="64" height="19"/> <rect key="frame" x="492" y="5" width="64" height="19"/>
<animations/>
<popUpButtonCell key="cell" type="recessed" title="Item 1" bezelStyle="recessed" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" selectedItem="LRm-iZ-XrA" id="faz-pC-uGX"> <popUpButtonCell key="cell" type="recessed" title="Item 1" bezelStyle="recessed" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" selectedItem="LRm-iZ-XrA" id="faz-pC-uGX">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/> <font key="font" metaFont="systemBold" size="12"/>
@@ -134,7 +126,6 @@
<constraint firstAttribute="centerY" secondItem="Uhl-ck-vVQ" secondAttribute="centerY" id="uvE-ch-ysK"/> <constraint firstAttribute="centerY" secondItem="Uhl-ck-vVQ" secondAttribute="centerY" id="uvE-ch-ysK"/>
<constraint firstAttribute="centerY" secondItem="Bn2-iY-mQ3" secondAttribute="centerY" id="xZJ-EZ-Nic"/> <constraint firstAttribute="centerY" secondItem="Bn2-iY-mQ3" secondAttribute="centerY" id="xZJ-EZ-Nic"/>
</constraints> </constraints>
<animations/>
</customView> </customView>
</subviews> </subviews>
<constraints> <constraints>
@@ -145,7 +136,6 @@
<constraint firstAttribute="trailing" secondItem="1" secondAttribute="trailing" id="mos-cv-3fn"/> <constraint firstAttribute="trailing" secondItem="1" secondAttribute="trailing" id="mos-cv-3fn"/>
<constraint firstAttribute="trailing" secondItem="1" secondAttribute="trailing" id="rO8-g6-lT3"/> <constraint firstAttribute="trailing" secondItem="1" secondAttribute="trailing" id="rO8-g6-lT3"/>
</constraints> </constraints>
<animations/>
</view> </view>
</tabViewItem> </tabViewItem>
<tabViewItem label="Trash" identifier="2" id="na6-h9-r9q"> <tabViewItem label="Trash" identifier="2" id="na6-h9-r9q">
@@ -158,7 +148,6 @@
<subviews> <subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="szx-Hx-OrV"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="szx-Hx-OrV">
<rect key="frame" x="478" y="5" width="78" height="19"/> <rect key="frame" x="478" y="5" width="78" height="19"/>
<animations/>
<buttonCell key="cell" type="roundTextured" title="Empty Trash" bezelStyle="texturedRounded" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="8Ok-oe-6AB"> <buttonCell key="cell" type="roundTextured" title="Empty Trash" bezelStyle="texturedRounded" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="8Ok-oe-6AB">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystem"/> <font key="font" metaFont="smallSystem"/>
@@ -173,7 +162,6 @@
<constraint firstItem="szx-Hx-OrV" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="DXf-SC-gVG" secondAttribute="leading" constant="20" symbolic="YES" id="s8f-1l-4Yy"/> <constraint firstItem="szx-Hx-OrV" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="DXf-SC-gVG" secondAttribute="leading" constant="20" symbolic="YES" id="s8f-1l-4Yy"/>
<constraint firstAttribute="centerY" secondItem="szx-Hx-OrV" secondAttribute="centerY" id="sG5-pc-EzQ"/> <constraint firstAttribute="centerY" secondItem="szx-Hx-OrV" secondAttribute="centerY" id="sG5-pc-EzQ"/>
</constraints> </constraints>
<animations/>
</customView> </customView>
</subviews> </subviews>
<constraints> <constraints>
@@ -182,7 +170,6 @@
<constraint firstItem="DXf-SC-gVG" firstAttribute="top" secondItem="F6S-GS-AwI" secondAttribute="top" id="j4h-gk-JVJ"/> <constraint firstItem="DXf-SC-gVG" firstAttribute="top" secondItem="F6S-GS-AwI" secondAttribute="top" id="j4h-gk-JVJ"/>
<constraint firstAttribute="trailing" secondItem="DXf-SC-gVG" secondAttribute="trailing" id="wap-ZJ-5Rw"/> <constraint firstAttribute="trailing" secondItem="DXf-SC-gVG" secondAttribute="trailing" id="wap-ZJ-5Rw"/>
</constraints> </constraints>
<animations/>
</view> </view>
<connections> <connections>
<outlet property="initialFirstResponder" destination="szx-Hx-OrV" id="Cqa-Po-xMe"/> <outlet property="initialFirstResponder" destination="szx-Hx-OrV" id="Cqa-Po-xMe"/>
@@ -198,7 +185,6 @@
<subviews> <subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gGR-f0-dcr"> <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gGR-f0-dcr">
<rect key="frame" x="18" y="6" width="37" height="17"/> <rect key="frame" x="18" y="6" width="37" height="17"/>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Label" id="8LU-cT-rsU"> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Label" id="8LU-cT-rsU">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -207,7 +193,6 @@
</textField> </textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pqx-su-vAh"> <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pqx-su-vAh">
<rect key="frame" x="483" y="5" width="73" height="19"/> <rect key="frame" x="483" y="5" width="73" height="19"/>
<animations/>
<buttonCell key="cell" type="roundTextured" title="Exit History" bezelStyle="texturedRounded" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ewQ-8F-e1E"> <buttonCell key="cell" type="roundTextured" title="Exit History" bezelStyle="texturedRounded" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ewQ-8F-e1E">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystem"/> <font key="font" metaFont="smallSystem"/>
@@ -224,7 +209,6 @@
<constraint firstItem="gGR-f0-dcr" firstAttribute="leading" secondItem="S8L-rB-h0h" secondAttribute="leading" constant="20" symbolic="YES" id="gFm-N8-pwn"/> <constraint firstItem="gGR-f0-dcr" firstAttribute="leading" secondItem="S8L-rB-h0h" secondAttribute="leading" constant="20" symbolic="YES" id="gFm-N8-pwn"/>
<constraint firstAttribute="trailing" secondItem="pqx-su-vAh" secondAttribute="trailing" constant="20" symbolic="YES" id="mao-02-HsJ"/> <constraint firstAttribute="trailing" secondItem="pqx-su-vAh" secondAttribute="trailing" constant="20" symbolic="YES" id="mao-02-HsJ"/>
</constraints> </constraints>
<animations/>
</customView> </customView>
</subviews> </subviews>
<constraints> <constraints>
@@ -233,7 +217,6 @@
<constraint firstAttribute="bottom" secondItem="S8L-rB-h0h" secondAttribute="bottom" id="bz5-FS-Gg2"/> <constraint firstAttribute="bottom" secondItem="S8L-rB-h0h" secondAttribute="bottom" id="bz5-FS-Gg2"/>
<constraint firstItem="S8L-rB-h0h" firstAttribute="top" secondItem="iPb-SZ-Lfm" secondAttribute="top" id="mW1-xp-CdF"/> <constraint firstItem="S8L-rB-h0h" firstAttribute="top" secondItem="iPb-SZ-Lfm" secondAttribute="top" id="mW1-xp-CdF"/>
</constraints> </constraints>
<animations/>
</view> </view>
<connections> <connections>
<outlet property="initialFirstResponder" destination="pqx-su-vAh" id="bi5-CA-b4P"/> <outlet property="initialFirstResponder" destination="pqx-su-vAh" id="bi5-CA-b4P"/>

View File

@@ -1,16 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9531"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9532"/>
</dependencies> </dependencies>
<objects> <objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPEntryViewController"> <customObject id="-2" userLabel="File's Owner" customClass="MPEntryViewController">
<connections> <connections>
<outlet property="addEntryButton" destination="732" id="745"/>
<outlet property="bottomBar" destination="690" id="744"/>
<outlet property="entryTable" destination="55" id="111"/> <outlet property="entryTable" destination="55" id="111"/>
<outlet property="footerInfoText" destination="uCV-75-BFs" id="Qb3-SD-vFM"/>
<outlet property="tableToTopConstraint" destination="683" id="844"/> <outlet property="tableToTopConstraint" destination="683" id="844"/>
<outlet property="view" destination="336" id="395"/> <outlet property="view" destination="336" id="395"/>
</connections> </connections>
@@ -21,13 +18,13 @@
<rect key="frame" x="0.0" y="0.0" width="694" height="594"/> <rect key="frame" x="0.0" y="0.0" width="694" height="594"/>
<subviews> <subviews>
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="54"> <scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="54">
<rect key="frame" x="0.0" y="30" width="694" height="565"/> <rect key="frame" x="0.0" y="0.0" width="694" height="595"/>
<clipView key="contentView" id="4tt-2K-SPF"> <clipView key="contentView" id="4tt-2K-SPF">
<rect key="frame" x="0.0" y="0.0" width="694" height="565"/> <rect key="frame" x="0.0" y="0.0" width="694" height="595"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" multipleSelection="NO" rowSizeStyle="automatic" headerView="676" viewBased="YES" id="55" customClass="MPTableView"> <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" multipleSelection="NO" rowSizeStyle="automatic" headerView="676" viewBased="YES" id="55" customClass="MPTableView">
<rect key="frame" x="0.0" y="0.0" width="694" height="542"/> <rect key="frame" x="0.0" y="0.0" width="694" height="572"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<size key="intercellSpacing" width="3" height="2"/> <size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -50,8 +47,8 @@
<rect key="frame" x="1" y="1" width="105" height="17"/> <rect key="frame" x="1" y="1" width="105" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="270"> <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="270">
<rect key="frame" x="1" y="0.0" width="102" height="17"/> <rect key="frame" x="1" y="0.0" width="103" height="17"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="271"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="271">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -133,11 +130,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView identifier="PasswordCell" id="428"> <tableCellView identifier="PasswordCell" id="428">
<rect key="frame" x="255.5" y="1" width="119" height="17"/> <rect key="frame" x="256" y="1" width="119" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="429" customClass="NSSecureTextField"> <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="429" customClass="NSSecureTextField">
<rect key="frame" x="1" y="0.0" width="116" height="17"/> <rect key="frame" x="1" y="0.0" width="117" height="17"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="430"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="430">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -193,7 +190,7 @@
</tableCellView> </tableCellView>
</prototypeCellViews> </prototypeCellViews>
</tableColumn> </tableColumn>
<tableColumn width="199" minWidth="10" maxWidth="3.4028234663852886e+38" id="614"> <tableColumn width="198" minWidth="10" maxWidth="3.4028234663852886e+38" id="614">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
<font key="font" metaFont="smallSystem"/> <font key="font" metaFont="smallSystem"/>
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
@@ -207,10 +204,10 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="616"> <tableCellView id="616">
<rect key="frame" x="494" y="1" width="199" height="17"/> <rect key="frame" x="494" y="1" width="198" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="617"> <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="617">
<rect key="frame" x="1" y="0.0" width="196" height="17"/> <rect key="frame" x="1" y="0.0" width="196" height="17"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="618"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="618">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
@@ -244,54 +241,21 @@
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
<tableHeaderView key="headerView" id="676"> <tableHeaderView key="headerView" id="676">
<rect key="frame" x="0.0" y="0.0" width="695" height="23"/> <rect key="frame" x="0.0" y="0.0" width="694" height="23"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</tableHeaderView> </tableHeaderView>
</scrollView> </scrollView>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="690" customClass="HNHUIGradientView">
<rect key="frame" x="0.0" y="0.0" width="694" height="30"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="732">
<rect key="frame" x="7" y="5" width="32" height="19"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="743"/>
</constraints>
<buttonCell key="cell" type="roundRect" title="Round Rect Button" bezelStyle="roundedRect" image="NSAddTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="733">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="cellTitle"/>
</buttonCell>
</button>
<textField hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="uCV-75-BFs">
<rect key="frame" x="324" y="8" width="46" height="14"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="infotext" id="GLC-co-PAD">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="height" constant="30" id="697"/>
<constraint firstItem="732" firstAttribute="leading" secondItem="690" secondAttribute="leading" constant="7" id="741"/>
<constraint firstItem="732" firstAttribute="centerY" secondItem="690" secondAttribute="centerY" id="878"/>
<constraint firstAttribute="centerX" secondItem="uCV-75-BFs" secondAttribute="centerX" id="bRK-AN-dLs"/>
<constraint firstAttribute="centerY" secondItem="uCV-75-BFs" secondAttribute="centerY" id="sH1-mf-Ryt"/>
</constraints>
</customView>
</subviews> </subviews>
<constraints> <constraints>
<constraint firstItem="54" firstAttribute="leading" secondItem="336" secondAttribute="leading" id="346"/> <constraint firstItem="54" firstAttribute="leading" secondItem="336" secondAttribute="leading" id="346"/>
<constraint firstItem="54" firstAttribute="trailing" secondItem="336" secondAttribute="trailing" id="348"/> <constraint firstItem="54" firstAttribute="trailing" secondItem="336" secondAttribute="trailing" id="348"/>
<constraint firstItem="54" firstAttribute="top" secondItem="336" secondAttribute="top" constant="-1" id="683"/> <constraint firstItem="54" firstAttribute="top" secondItem="336" secondAttribute="top" constant="-1" id="683"/>
<constraint firstItem="690" firstAttribute="leading" secondItem="336" secondAttribute="leading" id="694"/> <constraint firstAttribute="bottom" secondItem="54" secondAttribute="bottom" id="vfw-Ff-Ip8"/>
<constraint firstItem="690" firstAttribute="trailing" secondItem="336" secondAttribute="trailing" id="695"/>
<constraint firstItem="690" firstAttribute="top" secondItem="54" secondAttribute="bottom" id="705"/>
<constraint firstAttribute="bottom" secondItem="690" secondAttribute="bottom" id="708"/>
</constraints> </constraints>
<point key="canvasLocation" x="256" y="530"/>
</customView> </customView>
</objects> </objects>
<resources> <resources>
<image name="NSActionTemplate" width="14" height="14"/> <image name="NSActionTemplate" width="14" height="14"/>
<image name="NSAddTemplate" width="11" height="11"/>
</resources> </resources>
</document> </document>

View File

@@ -47,8 +47,5 @@ typedef NS_ENUM( NSUInteger, MPCopyContentTypeTag) {
- (void)copyURL:(id)sender; - (void)copyURL:(id)sender;
- (void)openURL:(id)sender; - (void)openURL:(id)sender;
/* Settings migration */
+ (NSString *)timeInfoModificationTimeKeyPath;
@end @end

View File

@@ -75,25 +75,12 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
@property (strong) IBOutlet NSLayoutConstraint *tableToTopConstraint; @property (strong) IBOutlet NSLayoutConstraint *tableToTopConstraint;
@property (strong) NSLayoutConstraint *contextBarTopConstraint; @property (strong) NSLayoutConstraint *contextBarTopConstraint;
@property (weak) IBOutlet HNHUIGradientView *bottomBar;
@property (weak) IBOutlet NSButton *addEntryButton;
@property (weak) IBOutlet NSTextField *footerInfoText;
@property (nonatomic, strong) MPEntryTableDataSource *dataSource; @property (nonatomic, strong) MPEntryTableDataSource *dataSource;
@end @end
@implementation MPEntryViewController @implementation MPEntryViewController
+ (NSString *)timeInfoModificationTimeKeyPath {
static NSString *timeInfoModificationTimeKeyPath;
if(nil == timeInfoModificationTimeKeyPath) {
timeInfoModificationTimeKeyPath = [[NSString alloc] initWithFormat:@"%@.%@", NSStringFromSelector(@selector(timeInfo)), NSStringFromSelector(@selector(modificationDate))];
}
return timeInfoModificationTimeKeyPath;
}
- (NSString *)nibName { - (NSString *)nibName {
return @"EntryView"; return @"EntryView";
} }
@@ -118,10 +105,8 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
} }
- (void)didLoadView { - (void)didLoadView {
[[self view] setWantsLayer:YES];
[_bottomBar setBorderType:HNHBorderTop|HNHBorderHighlight]; [self.view setWantsLayer:YES];
[self.addEntryButton setAction:[MPActionHelper actionOfType:MPActionAddEntry]];
self.entryTable.delegate = self; self.entryTable.delegate = self;
self.entryTable.doubleAction = @selector(_columnDoubleClick:); self.entryTable.doubleAction = @selector(_columnDoubleClick:);
@@ -159,14 +144,14 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
self.entryTable.autosaveName = @"EntryTable"; self.entryTable.autosaveName = @"EntryTable";
self.entryTable.autosaveTableColumns = YES; self.entryTable.autosaveTableColumns = YES;
NSString *parentTitleKeyPath = [[NSString alloc] initWithFormat:@"%@.%@", NSStringFromSelector(@selector(parent)), NSStringFromSelector(@selector(title))]; NSString *parentTitleKeyPath = [[NSString alloc] initWithFormat:@"%@.%@", NSStringFromSelector(@selector(parent)), NSStringFromSelector(@selector(title))];
NSString *timeInfoModificationTimeKeyPath = [[NSString alloc] initWithFormat:@"%@.%@", NSStringFromSelector(@selector(timeInfo)), NSStringFromSelector(@selector(modificationDate))];
titleColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:NSStringFromSelector(@selector(title))ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; titleColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:NSStringFromSelector(@selector(title))ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
userNameColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:NSStringFromSelector(@selector(username)) ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; userNameColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:NSStringFromSelector(@selector(username)) ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
urlColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:NSStringFromSelector(@selector(url)) ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; urlColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:NSStringFromSelector(@selector(url)) ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
parentColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:parentTitleKeyPath ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; parentColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:parentTitleKeyPath ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
modifiedColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:[MPEntryViewController timeInfoModificationTimeKeyPath] ascending:YES selector:@selector(compare:)]; modifiedColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:timeInfoModificationTimeKeyPath ascending:YES selector:@selector(compare:)];
[parentColumn.headerCell setStringValue:NSLocalizedString(@"GROUP", "")]; [parentColumn.headerCell setStringValue:NSLocalizedString(@"GROUP", "")];
[titleColumn.headerCell setStringValue:NSLocalizedString(@"TITLE", "")]; [titleColumn.headerCell setStringValue:NSLocalizedString(@"TITLE", "")];
@@ -473,8 +458,10 @@ NSString *const _MPTableSecurCellView = @"PasswordCell";
MPDocument *document = [[self windowController] document]; MPDocument *document = [[self windowController] document];
/* If the document was locked and unlocked we do not need to recheck */ /* If the document was locked and unlocked we do not need to recheck */
if(document.unlockCount != 1) { if(document.unlockCount != 1) {
/* TODO add another method to display this!
[self.footerInfoText setHidden:![document hasMalformedAutotypeItems]]; [self.footerInfoText setHidden:![document hasMalformedAutotypeItems]];
[self.footerInfoText setStringValue:NSLocalizedString(@"DOCUMENT_AUTOTYPE_CORRUPTION_WARNING", "")]; [self.footerInfoText setStringValue:NSLocalizedString(@"DOCUMENT_AUTOTYPE_CORRUPTION_WARNING", "")];
*/
} }
} }

View File

@@ -16,9 +16,6 @@ APPKIT_EXTERN NSString *const MPOutlineViewDidChangeGroupSelection;
@interface MPOutlineViewController : MPViewController <MPTargetNodeResolving, NSOutlineViewDelegate, NSMenuDelegate> @interface MPOutlineViewController : MPViewController <MPTargetNodeResolving, NSOutlineViewDelegate, NSMenuDelegate>
@property (weak) IBOutlet HNHUIGradientView *bottomBar;
- (void)clearSelection; - (void)clearSelection;
- (void)showOutline; - (void)showOutline;
- (void)regsiterNotificationsForDocument:(MPDocument *)document; - (void)regsiterNotificationsForDocument:(MPDocument *)document;

View File

@@ -35,7 +35,6 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
} }
@property (weak) IBOutlet NSOutlineView *outlineView; @property (weak) IBOutlet NSOutlineView *outlineView;
@property (weak) IBOutlet NSButton *addGroupButton;
@property (strong) NSTreeController *treeController; @property (strong) NSTreeController *treeController;
@property (strong) MPOutlineDataSource *datasource; @property (strong) MPOutlineDataSource *datasource;
@@ -79,8 +78,6 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
[self.outlineView registerForDraggedTypes:@[ KPKGroupUTI, KPKEntryUTI ]]; [self.outlineView registerForDraggedTypes:@[ KPKGroupUTI, KPKEntryUTI ]];
[self.outlineView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES]; [self.outlineView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES];
[self.outlineView setDoubleAction:@selector(_doubleClickedGroup:)]; [self.outlineView setDoubleAction:@selector(_doubleClickedGroup:)];
[self.bottomBar setBorderType:HNHBorderTop|HNHBorderHighlight];
[self.addGroupButton setAction:[MPActionHelper actionOfType:MPActionAddGroup]];
[[NSNotificationCenter defaultCenter] addObserver:self [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(_didBecomeFirstResponder:) selector:@selector(_didBecomeFirstResponder:)

View File

@@ -9,7 +9,7 @@
#import "MPSettingsHelper.h" #import "MPSettingsHelper.h"
#import "NSString+MPPasswordCreation.h" #import "NSString+MPPasswordCreation.h"
#import "NSString+MPHash.h" #import "NSString+MPHash.h"
#import "MPEntryViewController.h" // Sort descriptors #import "MPEntrySearchContext.h"
#import "DDHotKey+MacPassAdditions.h" // Default hotkey; #import "DDHotKey+MacPassAdditions.h" // Default hotkey;
NSString *const kMPSettingsKeyPasteboardClearTimeout = @"ClipboardClearTimeout"; NSString *const kMPSettingsKeyPasteboardClearTimeout = @"ClipboardClearTimeout";
@@ -160,6 +160,10 @@ NSString *const kMPDeprecatedSettingsKeyShowMenuItem = @"Sh
/* /*
MacPass < 0.4 did use compare: for the entry table view, MacPass < 0.4 did use compare: for the entry table view,
this was changed in 0.4 to localizedCaseInsensitiveCompare: this was changed in 0.4 to localizedCaseInsensitiveCompare:
MacPass < 0.5.2 did use parent.name for group names,
this was changed in 0.6. to parent.title
*/ */
NSData *descriptorData = [[NSUserDefaults standardUserDefaults] dataForKey:kMPSettingsKeyEntryTableSortDescriptors]; NSData *descriptorData = [[NSUserDefaults standardUserDefaults] dataForKey:kMPSettingsKeyEntryTableSortDescriptors];
if(!descriptorData) { if(!descriptorData) {
@@ -168,7 +172,10 @@ NSString *const kMPDeprecatedSettingsKeyShowMenuItem = @"Sh
NSArray *sortDescriptors = [NSUnarchiver unarchiveObjectWithData:descriptorData]; NSArray *sortDescriptors = [NSUnarchiver unarchiveObjectWithData:descriptorData];
for(NSSortDescriptor *descriptor in sortDescriptors) { for(NSSortDescriptor *descriptor in sortDescriptors) {
if([descriptor selector] == @selector(compare:) || [[descriptor key] isEqualToString:[MPEntryViewController timeInfoModificationTimeKeyPath]] ) { /* Brute force, just kill the settings if they might cause trouble */
if(descriptor.selector == @selector(compare:)
|| [descriptor.key isEqualToString:@"timeInfo.modificationDate"]
|| [descriptor.key isEqualToString:@"parent.name"] ) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kMPSettingsKeyEntryTableSortDescriptors]; [[NSUserDefaults standardUserDefaults] removeObjectForKey:kMPSettingsKeyEntryTableSortDescriptors];
break; break;
} }
@@ -198,18 +205,30 @@ NSString *const kMPDeprecatedSettingsKeyShowMenuItem = @"Sh
Database file paths was stored as plain text in keyfile mapping. Database file paths was stored as plain text in keyfile mapping.
We only need to store the key file ulr in plain text, thus hashing the path is sufficent We only need to store the key file ulr in plain text, thus hashing the path is sufficent
*/ */
NSDictionary<NSString *, NSString *> *plainTextDict = [[NSUserDefaults standardUserDefaults] dictionaryForKey:kMPSettingsKeyRememeberdKeysForDatabases]; NSDictionary<NSString *, NSString *> *currentMapping = [[NSUserDefaults standardUserDefaults] dictionaryForKey:kMPSettingsKeyRememeberdKeysForDatabases];
if(!plainTextDict) { if(!currentMapping) {
return; return;
} }
NSMutableDictionary *hashedDict = [[NSMutableDictionary alloc] initWithCapacity:plainTextDict.count]; NSMutableDictionary *hashedDict = [[NSMutableDictionary alloc] initWithCapacity:MAX(1,currentMapping.count)];
for(NSString *key in plainTextDict) { BOOL didHash = NO;
NSString *digest = key.sha1HexDigest; for(NSString *key in currentMapping) {
if(digest) { NSURL *fileURL = [NSURL URLWithString:key];
hashedDict[key.sha1HexDigest] = plainTextDict[key]; /* Only hash file paths */
if(fileURL.isFileURL) {
NSString *digest = key.sha1HexDigest;
if(digest) {
hashedDict[key.sha1HexDigest] = currentMapping[key];
didHash = YES;
}
}
/* keep all hasehd or unknown data */
else {
hashedDict[key] = currentMapping[key];
} }
} }
[[NSUserDefaults standardUserDefaults] setObject:hashedDict forKey:kMPSettingsKeyRememeberdKeysForDatabases]; if(didHash) {
[[NSUserDefaults standardUserDefaults] setObject:hashedDict forKey:kMPSettingsKeyRememeberdKeysForDatabases];
}
} }
@end @end

View File

@@ -58,7 +58,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>0.6</string> <string>0.6.2</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
@@ -75,8 +75,6 @@
<true/> <true/>
<key>SUFeedURL</key> <key>SUFeedURL</key>
<string>https://raw.githubusercontent.com/MacPass/MacPassUpdates/master/appcast_macpass.xml</string> <string>https://raw.githubusercontent.com/MacPass/MacPassUpdates/master/appcast_macpass.xml</string>
<key>SUPublicDSAKeyFile</key>
<string>dsa_sparkle_pub.pem</string>
<key>UTExportedTypeDeclarations</key> <key>UTExportedTypeDeclarations</key>
<array> <array>
<dict> <dict>

View File

@@ -1,14 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9059" systemVersion="15B42" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9059"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9532"/>
</dependencies> </dependencies>
<objects> <objects>
<customObject id="-2" userLabel="File's Owner" customClass="MPOutlineViewController"> <customObject id="-2" userLabel="File's Owner" customClass="MPOutlineViewController">
<connections> <connections>
<outlet property="addGroupButton" destination="425" id="434"/>
<outlet property="bottomBar" destination="394" id="433"/>
<outlet property="outlineView" destination="228" id="271"/> <outlet property="outlineView" destination="228" id="271"/>
<outlet property="view" destination="196" id="273"/> <outlet property="view" destination="196" id="273"/>
</connections> </connections>
@@ -19,15 +17,14 @@
<rect key="frame" x="0.0" y="0.0" width="272" height="449"/> <rect key="frame" x="0.0" y="0.0" width="272" height="449"/>
<subviews> <subviews>
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="24" horizontalPageScroll="10" verticalLineScroll="24" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="227"> <scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="24" horizontalPageScroll="10" verticalLineScroll="24" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="227">
<rect key="frame" x="0.0" y="30" width="272" height="419"/> <rect key="frame" x="0.0" y="0.0" width="272" height="449"/>
<clipView key="contentView" drawsBackground="NO" id="WAU-Bu-ack"> <clipView key="contentView" drawsBackground="NO" id="WAU-Bu-ack">
<rect key="frame" x="0.0" y="0.0" width="272" height="419"/> <rect key="frame" x="0.0" y="0.0" width="272" height="449"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<outlineView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="sourceList" multipleSelection="NO" autosaveColumns="NO" rowHeight="24" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="16" outlineTableColumn="231" id="228" customClass="MPOutlineView"> <outlineView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="sourceList" multipleSelection="NO" autosaveColumns="NO" rowHeight="24" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="16" outlineTableColumn="231" id="228" customClass="MPOutlineView">
<rect key="frame" x="0.0" y="0.0" width="272" height="0.0"/> <rect key="frame" x="0.0" y="0.0" width="272" height="449"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<animations/>
<size key="intercellSpacing" width="3" height="0.0"/> <size key="intercellSpacing" width="3" height="0.0"/>
<color key="backgroundColor" name="_sourceListBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="_sourceListBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/> <color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
@@ -51,7 +48,6 @@
<subviews> <subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="238"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="238">
<rect key="frame" x="1" y="1" width="267" height="14"/> <rect key="frame" x="1" y="1" width="267" height="14"/>
<animations/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="HEADER CELL" id="239"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="HEADER CELL" id="239">
<font key="font" metaFont="smallSystemBold"/> <font key="font" metaFont="smallSystemBold"/>
<color key="textColor" red="0.43921568630000002" green="0.4941176471" blue="0.54901960780000003" alpha="1" colorSpace="calibratedRGB"/> <color key="textColor" red="0.43921568630000002" green="0.4941176471" blue="0.54901960780000003" alpha="1" colorSpace="calibratedRGB"/>
@@ -64,7 +60,6 @@
<constraint firstAttribute="trailing" secondItem="238" secondAttribute="trailing" constant="3" id="253"/> <constraint firstAttribute="trailing" secondItem="238" secondAttribute="trailing" constant="3" id="253"/>
<constraint firstItem="238" firstAttribute="centerY" secondItem="237" secondAttribute="centerY" id="254"/> <constraint firstItem="238" firstAttribute="centerY" secondItem="237" secondAttribute="centerY" id="254"/>
</constraints> </constraints>
<animations/>
<connections> <connections>
<outlet property="textField" destination="238" id="245"/> <outlet property="textField" destination="238" id="245"/>
</connections> </connections>
@@ -79,12 +74,10 @@
<constraint firstAttribute="width" constant="17" id="385"/> <constraint firstAttribute="width" constant="17" id="385"/>
<constraint firstAttribute="height" constant="17" id="bah-Ng-60T"/> <constraint firstAttribute="height" constant="17" id="bah-Ng-60T"/>
</constraints> </constraints>
<animations/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSActionTemplate" id="242"/> <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSActionTemplate" id="242"/>
</imageView> </imageView>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="243" customClass="HNHUIBadgedTextField"> <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="243" customClass="HNHUIBadgedTextField">
<rect key="frame" x="26" y="4" width="242" height="17"/> <rect key="frame" x="26" y="4" width="242" height="17"/>
<animations/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="244" customClass="HNHUIBadgedTextFieldCell"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="244" customClass="HNHUIBadgedTextFieldCell">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -100,7 +93,6 @@
<constraint firstItem="243" firstAttribute="bottom" secondItem="241" secondAttribute="bottom" id="388"/> <constraint firstItem="243" firstAttribute="bottom" secondItem="241" secondAttribute="bottom" id="388"/>
<constraint firstAttribute="trailing" secondItem="243" secondAttribute="trailing" constant="3" id="389"/> <constraint firstAttribute="trailing" secondItem="243" secondAttribute="trailing" constant="3" id="389"/>
</constraints> </constraints>
<animations/>
<connections> <connections>
<outlet property="imageView" destination="241" id="247"/> <outlet property="imageView" destination="241" id="247"/>
<outlet property="textField" destination="243" id="246"/> <outlet property="textField" destination="243" id="246"/>
@@ -111,58 +103,27 @@
</tableColumns> </tableColumns>
</outlineView> </outlineView>
</subviews> </subviews>
<animations/>
<nil key="backgroundColor"/> <nil key="backgroundColor"/>
</clipView> </clipView>
<animations/>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="229"> <scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="229">
<rect key="frame" x="1" y="119" width="238" height="15"/> <rect key="frame" x="1" y="119" width="238" height="15"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<animations/>
</scroller> </scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="230"> <scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="230">
<rect key="frame" x="224" y="17" width="15" height="102"/> <rect key="frame" x="224" y="17" width="15" height="102"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<animations/>
</scroller> </scroller>
</scrollView> </scrollView>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="394" customClass="HNHUIGradientView">
<rect key="frame" x="0.0" y="0.0" width="272" height="30"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="425">
<rect key="frame" x="7" y="5" width="32" height="19"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="432"/>
</constraints>
<animations/>
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSAddTemplate" imagePosition="overlaps" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="426">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="cellTitle"/>
</buttonCell>
</button>
</subviews>
<constraints>
<constraint firstAttribute="height" constant="30" id="402"/>
<constraint firstItem="425" firstAttribute="centerY" secondItem="394" secondAttribute="centerY" id="428"/>
<constraint firstItem="425" firstAttribute="leading" secondItem="394" secondAttribute="leading" constant="7" id="429"/>
</constraints>
<animations/>
</customView>
</subviews> </subviews>
<constraints> <constraints>
<constraint firstItem="227" firstAttribute="leading" secondItem="196" secondAttribute="leading" id="263"/> <constraint firstItem="227" firstAttribute="leading" secondItem="196" secondAttribute="leading" id="263"/>
<constraint firstItem="227" firstAttribute="top" secondItem="196" secondAttribute="top" id="267"/> <constraint firstItem="227" firstAttribute="top" secondItem="196" secondAttribute="top" id="267"/>
<constraint firstItem="227" firstAttribute="trailing" secondItem="196" secondAttribute="trailing" id="269"/> <constraint firstItem="227" firstAttribute="trailing" secondItem="196" secondAttribute="trailing" id="269"/>
<constraint firstItem="394" firstAttribute="leading" secondItem="196" secondAttribute="leading" id="397"/> <constraint firstAttribute="bottom" secondItem="227" secondAttribute="bottom" id="NQ5-NK-jdK"/>
<constraint firstItem="394" firstAttribute="trailing" secondItem="196" secondAttribute="trailing" id="400"/>
<constraint firstItem="394" firstAttribute="bottom" secondItem="196" secondAttribute="bottom" id="408"/>
<constraint firstItem="394" firstAttribute="top" secondItem="227" secondAttribute="bottom" id="409"/>
</constraints> </constraints>
<animations/>
</customView> </customView>
</objects> </objects>
<resources> <resources>
<image name="NSActionTemplate" width="14" height="14"/> <image name="NSActionTemplate" width="14" height="14"/>
<image name="NSAddTemplate" width="11" height="11"/>
</resources> </resources>
</document> </document>

View File

@@ -1,12 +0,0 @@
-----BEGIN PUBLIC KEY-----
MIIBuDCCASwGByqGSM44BAEwggEfAoGBAM9fddIHTDtY5tw1Ew78fRI0fBMkpHN8
d4h++WynbyS59tUQ7uJLkGQAtnLhA3orU1ycghvNuFnNe6sANuzPCOjvay0oSZP0
MeGj3cn1vzN61WbZL6wjBmJVkiptLuviTT7tMZOuJM6I1NQZb8AiUXt6E9F0BtT5
FUsLI3vK3w4ZAhUA08MnyUlVf8teUxZ+SJKstKNc28kCgYEAxaKVkiKzWhF81QdB
ugIc1ccx4lgWR/8xFtY/svlN4UjWBj+KyZ6AWfMBXeTJxYWYiTvwyx3NxxdI7mus
ACtL60EFVNACDo8WhFuYQ0X47dQqfcemDd8NylnXuOgwS+/whgtONgC8INswCnt7
N+eFEcbPb1e8KwOjEsxguHycKD4DgYUAAoGBAKBgyULSfUTZeigrw4g8/YtjsHiH
nbqBgYTetL/JcZosx3F/kccdJ18u5y1Xd2ec7WopJpl5Ywc0CvEzGkuHznVlKoyV
wi1MdfqHJEAW1tA442knwO7ydO+9S2d7twfZyN53ncSksZskJGeev1fALgCz1VrF
j6hC6zq/VyhMwybK
-----END PUBLIC KEY-----

View File

@@ -63,11 +63,12 @@ More Screenshots in the [Wiki](https://github.com/mstarke/MacPass/wiki/Screensho
##Alternatives ##Alternatives
[KeePassX](http://www.keepassx.org) is a Qt based KeePass port. The stable 0.4.3 release only supports the version 1 format. The Beta can read database version 1 and 2 and write version 2 containers rather nicely. [KeePassX](http://www.keepassx.org) is a Qt based KeePass port. It's in active development and open source. It fully supports all KDBX features and can import KDB into a KDBX file but is unable to safe as KDB. There's an older release just that handles only KDB files.
It's in active development and open source. The Beta fully supports all database 2 features and should be stable enough for daily usage. It can import version 1 into a version 2 file but is unable to natively write version 1 files.
[KyPass Companion](http://www.kyuran.be/logiciels/kypass4mac/) is a native Cocoa port and offers KeePassHttp compatiblity. [KyPass Companion](http://www.kyuran.be/logiciels/kypass4mac/) is a native Cocoa port and offers KeePassHttp compatiblity.
Should be able to read and write database version 1 and 2. It is closed source and currently available in the Mac App Store. It's rather expensive considering the bugs and missing features. Based on the user reviews it should work. Not all version 2 features are supported. It is unable to convert between database versions. Should be able to read and write KDB and KDBX files. It is closed source and currently available in the Mac App Store. It's rather expensive considering the bugs and missing features. Based on the user reviews it should work. Not all KDBX features are supported. It is unable to convert between database versions.
[KeeWeb](https://keeweb.info) is a cross plattform web client in active development based on [electron](http://electron.atom.io) and thus also is available as an offline version for all mayor plattforms. The project is open source. It supports all features of KDBX files but has no KDB support. Because of the technology it's look is customizeable, but the native one is quite pretty.
##License ##License