diff --git a/External/RHStatusItemView b/External/RHStatusItemView
index 83406995..a8811be0 160000
--- a/External/RHStatusItemView
+++ b/External/RHStatusItemView
@@ -1 +1 @@
-Subproject commit 834069955051f2f822832771bd4572577b2ec3f6
+Subproject commit a8811be0bd4d2b510ea7d4d42e8057dd6b5c639f
diff --git a/MasterPassword/ObjC/Mac/MasterPassword-Info.plist b/MasterPassword/ObjC/Mac/MasterPassword-Info.plist
index 8d7d0c3b..5c181209 100644
--- a/MasterPassword/ObjC/Mac/MasterPassword-Info.plist
+++ b/MasterPassword/ObjC/Mac/MasterPassword-Info.plist
@@ -39,8 +39,6 @@
CFBundleExecutable
${EXECUTABLE_NAME}
- CFBundleIconFile
- MasterPassword
CFBundleIdentifier
com.lyndir.lhunath.MasterPassword.Mac
CFBundleInfoDictionaryVersion
diff --git a/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj b/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj
index 2a5abbe6..27f10711 100644
--- a/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj
+++ b/MasterPassword/ObjC/Mac/MasterPassword-Mac.xcodeproj/project.pbxproj
@@ -806,6 +806,17 @@
DACA29721705E1A8002C6C22 /* dictionary.lst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dictionary.lst; sourceTree = ""; };
DACA29771705E2BD002C6C22 /* JRSwizzle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JRSwizzle.h; sourceTree = ""; };
DACA298C1705E2BD002C6C22 /* JRSwizzle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JRSwizzle.m; sourceTree = ""; };
+ DAD0C5F619FD6034009CB08D /* icon_128x128.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_128x128.png; sourceTree = ""; };
+ DAD0C5F719FD6034009CB08D /* icon_128x128@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_128x128@2x.png"; sourceTree = ""; };
+ DAD0C5F819FD6034009CB08D /* icon_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_16x16.png; sourceTree = ""; };
+ DAD0C5F919FD6034009CB08D /* icon_16x16@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_16x16@2x.png"; sourceTree = ""; };
+ DAD0C5FA19FD6034009CB08D /* icon_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_256x256.png; sourceTree = ""; };
+ DAD0C5FB19FD6034009CB08D /* icon_256x256@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_256x256@2x.png"; sourceTree = ""; };
+ DAD0C5FC19FD6034009CB08D /* icon_32x32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_32x32.png; sourceTree = ""; };
+ DAD0C5FD19FD6034009CB08D /* icon_32x32@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_32x32@2x.png"; sourceTree = ""; };
+ DAD0C5FE19FD6034009CB08D /* icon_512x512.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_512x512.png; sourceTree = ""; };
+ DAD0C5FF19FD6034009CB08D /* icon_512x512@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_512x512@2x.png"; sourceTree = ""; };
+ DAD0C60019FD6034009CB08D /* icon.sketch */ = {isa = PBXFileReference; lastKnownFileType = file; path = icon.sketch; sourceTree = ""; };
DAD312C01552A20800A3F9ED /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
DAD9B5E1176299B9001835F9 /* MasterPassword-Mac-LoginHelper.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "MasterPassword-Mac-LoginHelper.xcodeproj"; path = "MasterPassword-Mac-LoginHelper/MasterPassword-Mac-LoginHelper.xcodeproj"; sourceTree = ""; };
DAD9B5EF1762CAA4001835F9 /* ServiceManagement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ServiceManagement.framework; path = System/Library/Frameworks/ServiceManagement.framework; sourceTree = SDKROOT; };
@@ -1546,6 +1557,7 @@
DACA23B51705DF7D002C6C22 /* Media */ = {
isa = PBXGroup;
children = (
+ DAD0C5F419FD6034009CB08D /* mac */,
DA6558A319A99609009A0BEB /* Images.xcassets */,
DA606FE9195D03E200CA98B5 /* Insignia */,
DAAA81AF195A8D1300FA30D9 /* gradient.png */,
@@ -1646,6 +1658,32 @@
path = jrswizzle;
sourceTree = "";
};
+ DAD0C5F419FD6034009CB08D /* mac */ = {
+ isa = PBXGroup;
+ children = (
+ DAD0C5F519FD6034009CB08D /* icon */,
+ DAD0C60019FD6034009CB08D /* icon.sketch */,
+ );
+ path = mac;
+ sourceTree = "";
+ };
+ DAD0C5F519FD6034009CB08D /* icon */ = {
+ isa = PBXGroup;
+ children = (
+ DAD0C5F619FD6034009CB08D /* icon_128x128.png */,
+ DAD0C5F719FD6034009CB08D /* icon_128x128@2x.png */,
+ DAD0C5F819FD6034009CB08D /* icon_16x16.png */,
+ DAD0C5F919FD6034009CB08D /* icon_16x16@2x.png */,
+ DAD0C5FA19FD6034009CB08D /* icon_256x256.png */,
+ DAD0C5FB19FD6034009CB08D /* icon_256x256@2x.png */,
+ DAD0C5FC19FD6034009CB08D /* icon_32x32.png */,
+ DAD0C5FD19FD6034009CB08D /* icon_32x32@2x.png */,
+ DAD0C5FE19FD6034009CB08D /* icon_512x512.png */,
+ DAD0C5FF19FD6034009CB08D /* icon_512x512@2x.png */,
+ );
+ path = icon;
+ sourceTree = "";
+ };
DAD9B5E2176299B9001835F9 /* Products */ = {
isa = PBXGroup;
children = (
@@ -2450,7 +2488,7 @@
DA5BFA6E147E415C00F98B1E /* Debug-Mac */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon";
CLANG_ENABLE_OBJC_ARC = YES;
CODE_SIGN_ENTITLEMENTS = MasterPassword.entitlements;
CODE_SIGN_IDENTITY = "Mac Developer";
@@ -2474,7 +2512,7 @@
DA5BFA6F147E415C00F98B1E /* AdHoc-Mac */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon";
CLANG_ENABLE_OBJC_ARC = YES;
CODE_SIGN_ENTITLEMENTS = MasterPassword.entitlements;
CODE_SIGN_IDENTITY = "Developer ID Application";
@@ -2574,7 +2612,7 @@
DA95D60A14DF3F3B008D1B94 /* AppStore-Mac */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon";
CLANG_ENABLE_OBJC_ARC = YES;
CODE_SIGN_ENTITLEMENTS = MasterPassword.entitlements;
CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application";
diff --git a/MasterPassword/Resources/Media/mac/icon.sketch b/MasterPassword/Resources/Media/mac/icon.sketch
new file mode 100644
index 00000000..bfc5207d
Binary files /dev/null and b/MasterPassword/Resources/Media/mac/icon.sketch differ
diff --git a/MasterPassword/Resources/Media/mac/icon/icon_128x128.png b/MasterPassword/Resources/Media/mac/icon/icon_128x128.png
new file mode 100644
index 00000000..3c90e6b1
Binary files /dev/null and b/MasterPassword/Resources/Media/mac/icon/icon_128x128.png differ
diff --git a/MasterPassword/Resources/Media/mac/icon/icon_128x128@2x.png b/MasterPassword/Resources/Media/mac/icon/icon_128x128@2x.png
new file mode 100644
index 00000000..4c9618d1
Binary files /dev/null and b/MasterPassword/Resources/Media/mac/icon/icon_128x128@2x.png differ
diff --git a/MasterPassword/Resources/Media/mac/icon/icon_16x16.png b/MasterPassword/Resources/Media/mac/icon/icon_16x16.png
new file mode 100644
index 00000000..4acc8ae9
Binary files /dev/null and b/MasterPassword/Resources/Media/mac/icon/icon_16x16.png differ
diff --git a/MasterPassword/Resources/Media/mac/icon/icon_16x16@2x.png b/MasterPassword/Resources/Media/mac/icon/icon_16x16@2x.png
new file mode 100644
index 00000000..ba5af566
Binary files /dev/null and b/MasterPassword/Resources/Media/mac/icon/icon_16x16@2x.png differ
diff --git a/MasterPassword/Resources/Media/mac/icon/icon_256x256.png b/MasterPassword/Resources/Media/mac/icon/icon_256x256.png
new file mode 100644
index 00000000..4c9618d1
Binary files /dev/null and b/MasterPassword/Resources/Media/mac/icon/icon_256x256.png differ
diff --git a/MasterPassword/Resources/Media/mac/icon/icon_256x256@2x.png b/MasterPassword/Resources/Media/mac/icon/icon_256x256@2x.png
new file mode 100644
index 00000000..e05f1bac
Binary files /dev/null and b/MasterPassword/Resources/Media/mac/icon/icon_256x256@2x.png differ
diff --git a/MasterPassword/Resources/Media/mac/icon/icon_32x32.png b/MasterPassword/Resources/Media/mac/icon/icon_32x32.png
new file mode 100644
index 00000000..ba5af566
Binary files /dev/null and b/MasterPassword/Resources/Media/mac/icon/icon_32x32.png differ
diff --git a/MasterPassword/Resources/Media/mac/icon/icon_32x32@2x.png b/MasterPassword/Resources/Media/mac/icon/icon_32x32@2x.png
new file mode 100644
index 00000000..1f6a437d
Binary files /dev/null and b/MasterPassword/Resources/Media/mac/icon/icon_32x32@2x.png differ
diff --git a/MasterPassword/Resources/Media/mac/icon/icon_512x512.png b/MasterPassword/Resources/Media/mac/icon/icon_512x512.png
new file mode 100644
index 00000000..e05f1bac
Binary files /dev/null and b/MasterPassword/Resources/Media/mac/icon/icon_512x512.png differ
diff --git a/MasterPassword/Resources/Media/mac/icon/icon_512x512@2x.png b/MasterPassword/Resources/Media/mac/icon/icon_512x512@2x.png
new file mode 100644
index 00000000..73560c0a
Binary files /dev/null and b/MasterPassword/Resources/Media/mac/icon/icon_512x512@2x.png differ
diff --git a/Scripts/genassets b/Scripts/genassets
index 9e383532..53638fbf 100755
--- a/Scripts/genassets
+++ b/Scripts/genassets
@@ -8,6 +8,18 @@ export PATH+=/usr/local/bin
# icons format: [pixel size]@[scale]@[idiom]@[os]:[filename] -- if os is "anything lower", omit it
icons=(
+# Mac
+ 16@1@mac@:
+ 32@2@mac@:
+ 32@1@mac@:
+ 64@2@mac@:
+ 128@1@mac@:
+ 256@2@mac@:
+ 256@1@mac@:
+ 512@2@mac@:
+ 512@1@mac@:
+ 1024@2@mac@:
+# iPhone
180@3@iphone@8.0:Icon-60@3x.png
120@3@iphone@8.0:Icon-Small-40@3x.png
120@2@iphone@7.0:Icon-60@2x.png
@@ -17,7 +29,7 @@ icons=(
58@2@iphone@:Icon-Small@2x.png
# 57@1@iphone@:Icon.png
# 29@1@iphone@:Icon-Small.png
-#
+# iPad
76@1@ipad@7.0:Icon-76.png
152@2@ipad@7.0:Icon-76@2x.png
40@1@ipad@7.0:Icon-Small-40.png
@@ -66,8 +78,10 @@ appiconset="$xcassets/AppIcon.appiconset"
launchimage="$xcassets/LaunchImage.launchimage"
ios_icon=MasterPassword/Resources/Media/ios/icon
ios_launch=MasterPassword/Resources/Media/ios/launch
+mac_icon=MasterPassword/Resources/Media/mac/icon
-if [[ "$(latest "$ios_icon"/*)" -nt "$appiconset/Contents.json" ]]; then
+if [[ "$(latest "$ios_icon"/*)" -nt "$appiconset/Contents.json" ]] ||
+ [[ "$(latest "$mac_icon"/*)" -nt "$appiconset/Contents.json" ]]; then
rm -rf "$appiconset"; mkdir -p "$appiconset"
{
comma=
@@ -77,7 +91,19 @@ if [[ "$(latest "$ios_icon"/*)" -nt "$appiconset/Contents.json" ]]; then
IFS=@ read px scale idiom os <<< "$icon"
pt=$(( px / scale ))
- if imageProps=$(copyImage "$ios_icon/$filename" "$appiconset/$filename"); then
+ suffix=
+ [[ $scale != 1 ]] && suffix=@${scale}x
+ [[ $filename ]] || filename="icon_${pt}x${pt}${suffix}.png"
+ source=$ios_icon/$filename
+ if [[ ! -e $source ]]; then
+ source=$mac_icon/$filename
+ if [[ ! -e $source ]]; then
+ err 'No icon for: %s' "$filename"
+ exit 1
+ fi
+ fi
+
+ if imageProps=$(copyImage "$source" "$appiconset/$filename"); then
printf '%s{"size":"%dx%d","filename":"%s","scale":"%sx"' \
"$comma" "$pt" "$pt" "$filename" "$scale"
[[ $idiom ]] && printf ',"idiom":"%s"' "$idiom"