diff --git a/src/java/davmail/ui/OSXInfoPlist.java b/src/java/davmail/ui/OSXInfoPlist.java index 932e28a8..b7d43d1f 100644 --- a/src/java/davmail/ui/OSXInfoPlist.java +++ b/src/java/davmail/ui/OSXInfoPlist.java @@ -21,6 +21,7 @@ package davmail.ui; import davmail.util.IOUtil; import org.apache.log4j.Logger; +import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; @@ -37,7 +38,7 @@ public class OSXInfoPlist { } protected static String getInfoPlistContent() throws IOException { - FileInputStream fileInputStream = new FileInputStream(INFO_PLIST_PATH); + FileInputStream fileInputStream = new FileInputStream(getInfoPlistPath()); return new String(IOUtil.readFully(fileInputStream)); } @@ -67,7 +68,7 @@ public class OSXInfoPlist { boolean currentHideFromDock = isHideFromDock(); if (currentHideFromDock != hideFromDock) { String content = getInfoPlistContent(); - FileOutputStream fileOutputStream = new FileOutputStream(INFO_PLIST_PATH); + FileOutputStream fileOutputStream = new FileOutputStream(getInfoPlistPath()); try { fileOutputStream.write(content.replaceFirst( "LSUIElement" + (currentHideFromDock ? "1" : "0") + "", @@ -82,4 +83,20 @@ public class OSXInfoPlist { LOGGER.warn("Unable to update Info.plist", e); } } + + private static String getInfoPlistPath() throws IOException { + File file = new File(INFO_PLIST_PATH); + if (file.exists()) { + return INFO_PLIST_PATH; + } + // failover for Java7 + String libraryPath = System.getProperty("java.library.path"); + if (libraryPath != null && libraryPath.endsWith("Contents/MacOS")) { + file = new File(libraryPath.replace("Contents/MacOS", INFO_PLIST_PATH)); + if (file.exists()) { + return INFO_PLIST_PATH; + } + } + throw new IOException("Info.plist file not found"); + } }