Environment
Identity Manager 4.7.2
Identity Manager 4.7.2 Designer on MacOS
Identity Manager 4.8
Identity Manager 4.8 Designer on MacOS Situation
When starting Designer.app it will give an error, and request to have Java SE 6 runtime installed.
'To open "Designer" you need to install the legacy Java SE 6 runtime.'
Resolution
It is not necessary to install a Java SE 6 runtime, as the message indicates. In order to prevent this message from being displayed, please follow these steps:
1. Download and Install Azul zulu Open JDK 8 8u222-b10 (or newer Java 8 version such as 8u232-b18) from .dmg
2a. To updated Info.plist using the NetIQ script perform the following actions:
I. Open a browser and specify the following URL: https://nu.novell.com/designer/IDM-Designer-MacOSX
II. Download the updateInfoPlistScript.py file. (see Additional Notes)
III. Launch a terminal window and run the following command from the directory where you have downloaded the updateInfoPlistScript.py file:
sudo python updateInfoPlistScript.py
IV. Specify the value corresponding to the Azul Zulu JDK version you installed such as 8u222-b10.
V. From the list of Designer versions displayed, specify the value corresponding to the required Designer version.
The Info.plist file is updated.
See Section 6.0 Installing Designer on macOS 10.14 (Mojave) of the NetIQ Identity Manager Designer 4.8 Release Notes
2b. To update the Info.plist manually perform the following actions.
Edit the file Info.plist under /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/ and change the following section from:
<key>JVMCapabilities</key>
<array>
<string>CommandLine</string>
</array>
To
<key>JVMCapabilities</key>
<array>
<string>JNI</string>
<string>BundledApp</string>
<string>CommandLine</string>
</array>
- Edit the file Info.plist under /Applications/Designer/Designer.app/Contents and change the following section from:
<key>Eclipse</key>
<array>
<!-- to use a specific Java version (instead of the platform's default) uncomment one of the following options,
or add a VM found via $/usr/libexec/java_home -V
<string>-vm</string><string>/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Commands/java</string>
<string>-vm</string><string>/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home/bin/java</string>
-->
<string>-keyring</string><string>~/.eclipse_keyring</string>
<string>-showlocation</string>
<!-- WARNING:
If you try to add a single VM argument (-vmargs) here,
*all* vmargs specified in eclipse.ini will be ignored.
We recommend to add all arguments in eclipse.ini
-->
</array>
To
<key>Eclipse</key>
<array>
<!-- to use a specific Java version (instead of the platform's default) uncomment one of the following options,
or add a VM found via $/usr/libexec/java_home -V
<string>-vm</string><string>/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Commands/java</string>
<string>-vm</string><string>/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home/bin/java</string>
-->
<string>-vm</string><string>/Applications/Designer/jre/bin/java</string>
<string>-keyring</string><string>~/.eclipse_keyring</string>
<string>-showlocation</string>
<!-- WARNING:
If you try to add a single VM argument (-vmargs) here,
*all* vmargs specified in eclipse.ini will be ignored.
We recommend to add all arguments in eclipse.ini
-->
</array>
3. After these changes are made, it should be possible to start Designer.
Additional Information
#------------------contents of updateInfoPlistScript.py file------------------------
#!/usr/bin/python
import plistlib, os.path, os, sys
print(" ================================================================================================================================|| ")
print(" || ")
print(" || This script solves the issue in Mac for Designer which prompts" + ' "To install the legacy Java SE 6 runtime to launch Designer"')
print(" || The script perform the below operations : ")
print(" || 1> Script will update the Azul Zulu OpenJDK info.plist with JNI and BundledApp capabilites ")
print(" || 2> Script updates the selected Designer info.plist -vm attribute with Designer out of box open jre ")
print(" || ")
print(" ================================================================================================================================|| ")
# Based off of https://forums.developer.apple.com/message/6741
# and http://apple.stackexchange.com/a/136976
def jdk_info_plists():
JDK_ROOT = "/Library/Java/JavaVirtualMachines"
#print("---->Script to update the Info.Plist for open Jdk<----")
# It's present, let's look for installs
folderList = []
if os.path.exists(JDK_ROOT) and os.path.isdir(JDK_ROOT):
i = 1
for jdkFol in os.listdir(JDK_ROOT):
if jdkFol.startswith("zulu") or jdkFol.startswith("Zulu"):
print("{}> {}".format(i, jdkFol))
i = i + 1
folderList.append(jdkFol)
if len(folderList) == 0:
print("Please install Azul Zulu OpenJDK to list and rerun the script !!")
sys.exit()
try:
OPEN_JDK = int(input("Enter the Azul Zulu OpenJDK listed from above list:"))
print("Selected Azul Zulu OpenJDK to update Info.plist -> {}".format(folderList[OPEN_JDK - 1]))
except:
print("Invalid entry! Please rerun the script.")
sys.exit()
jdk_dir = os.path.join(JDK_ROOT, str(folderList.pop(OPEN_JDK - 1)))
if os.path.isdir(jdk_dir):
info_plist_fol = os.path.join(jdk_dir, "Contents", "Info.plist")
jdk_dir = os.path.join(jdk_dir, "Contents", "Home", "bin", "java")
return info_plist_fol
else:
return
def designer_info_plist():
des = "/Applications"
folderList = []
if os.path.exists(des) and os.path.isdir(des):
# It's present, let's look for installs
print("Designer Applications")
i = 1
for jdkFol in os.listdir(des):
if jdkFol.startswith("Des"):
print("{}> {}".format(i, jdkFol))
i = i + 1
folderList.append(jdkFol)
if len(folderList)==0:
print("Invalid entry! No Designer instance found to update.")
sys.exit()
#Selected Designer Variable
selected_des=''
try:
designer_dir = int(input("Enter the Designer listed from above list to update: "))
selected_des = folderList[designer_dir-1]
except:
print("Invalid entry! Please rerun the script.")
sys.exit()
path = os.path.join(des, selected_des, "Designer.app", "Contents")
designer_jre_path = os.path.join(des,selected_des, "jre", "bin", "java")
if os.path.exists(path) and os.path.isdir(path):
infolist = os.path.join(path, "Info.plist")
if os.path.isfile(infolist):
try:
dinfo = plistlib.readPlist(infolist)
capabilitiesDesInfoPlist = set(dinfo['Eclipse'])
capabilitiesDesInfoPlist.add("-vm")
capabilitiesDesInfoPlist.add(designer_jre_path)
# Update our changes
dinfo['Eclipse'] = sorted(capabilitiesDesInfoPlist)
plistlib.writePlist(dinfo, infolist)
print(selected_des +" successfully updated.")
except:
print("error found")
if __name__ == '__main__':
info_plist = jdk_info_plists()
try:
if os.path.isfile(info_plist):
info = plistlib.readPlist(info_plist)
capabilities = set(info['JavaVM']['JVMCapabilities'])
capabilities.add('JNI')
capabilities.add('BundledApp')
# Update our changes
info['JavaVM']['JVMCapabilities'] = sorted(capabilities)
plistlib.writePlist(info, info_plist)
# Create a symlink to fix legacy applications
# Find the Contents directory
contents_path = os.path.dirname(info_plist)
# make the bundle/Libraries subpath
bundle_libraries = os.path.join(contents_path, "Home", "bundle", "Libraries")
try:
# Just in case you run this script multiple times, we'll fail if the directory already exists
os.makedirs(os.path.join(bundle_libraries))
except:
pass
# create the symlink between libjvm.dylib and libserver.dylib
libjvm_dylib = os.path.join(contents_path, "Home", "jre", "lib", "server", "libjvm.dylib")
libserver_dylib = os.path.join(bundle_libraries, "libserver.dylib")
try:
#Just in case you run this script multiple times, we'll fail if the file already exists
os.symlink(libjvm_dylib, libserver_dylib)
except:
pass
print("Info.plist successfully Updated !!")
designer_info_plist()
except IOError as io:
print(io.strerror)
pass
except Exception as e:
print(e.message)
print("Script Failed, Please rerun the script !!")
import plistlib, os.path, os, sys
print(" ================================================================================================================================|| ")
print(" || ")
print(" || This script solves the issue in Mac for Designer which prompts" + ' "To install the legacy Java SE 6 runtime to launch Designer"')
print(" || The script perform the below operations : ")
print(" || 1> Script will update the Azul Zulu OpenJDK info.plist with JNI and BundledApp capabilites ")
print(" || 2> Script updates the selected Designer info.plist -vm attribute with Designer out of box open jre ")
print(" || ")
print(" ================================================================================================================================|| ")
# Based off of https://forums.developer.apple.com/message/6741
# and http://apple.stackexchange.com/a/136976
def jdk_info_plists():
JDK_ROOT = "/Library/Java/JavaVirtualMachines"
#print("---->Script to update the Info.Plist for open Jdk<----")
# It's present, let's look for installs
folderList = []
if os.path.exists(JDK_ROOT) and os.path.isdir(JDK_ROOT):
i = 1
for jdkFol in os.listdir(JDK_ROOT):
if jdkFol.startswith("zulu") or jdkFol.startswith("Zulu"):
print("{}> {}".format(i, jdkFol))
i = i + 1
folderList.append(jdkFol)
if len(folderList) == 0:
print("Please install Azul Zulu OpenJDK to list and rerun the script !!")
sys.exit()
try:
OPEN_JDK = int(input("Enter the Azul Zulu OpenJDK listed from above list:"))
print("Selected Azul Zulu OpenJDK to update Info.plist -> {}".format(folderList[OPEN_JDK - 1]))
except:
print("Invalid entry! Please rerun the script.")
sys.exit()
jdk_dir = os.path.join(JDK_ROOT, str(folderList.pop(OPEN_JDK - 1)))
if os.path.isdir(jdk_dir):
info_plist_fol = os.path.join(jdk_dir, "Contents", "Info.plist")
jdk_dir = os.path.join(jdk_dir, "Contents", "Home", "bin", "java")
return info_plist_fol
else:
return
def designer_info_plist():
des = "/Applications"
folderList = []
if os.path.exists(des) and os.path.isdir(des):
# It's present, let's look for installs
print("Designer Applications")
i = 1
for jdkFol in os.listdir(des):
if jdkFol.startswith("Des"):
print("{}> {}".format(i, jdkFol))
i = i + 1
folderList.append(jdkFol)
if len(folderList)==0:
print("Invalid entry! No Designer instance found to update.")
sys.exit()
#Selected Designer Variable
selected_des=''
try:
designer_dir = int(input("Enter the Designer listed from above list to update: "))
selected_des = folderList[designer_dir-1]
except:
print("Invalid entry! Please rerun the script.")
sys.exit()
path = os.path.join(des, selected_des, "Designer.app", "Contents")
designer_jre_path = os.path.join(des,selected_des, "jre", "bin", "java")
if os.path.exists(path) and os.path.isdir(path):
infolist = os.path.join(path, "Info.plist")
if os.path.isfile(infolist):
try:
dinfo = plistlib.readPlist(infolist)
capabilitiesDesInfoPlist = set(dinfo['Eclipse'])
capabilitiesDesInfoPlist.add("-vm")
capabilitiesDesInfoPlist.add(designer_jre_path)
# Update our changes
dinfo['Eclipse'] = sorted(capabilitiesDesInfoPlist)
plistlib.writePlist(dinfo, infolist)
print(selected_des +" successfully updated.")
except:
print("error found")
if __name__ == '__main__':
info_plist = jdk_info_plists()
try:
if os.path.isfile(info_plist):
info = plistlib.readPlist(info_plist)
capabilities = set(info['JavaVM']['JVMCapabilities'])
capabilities.add('JNI')
capabilities.add('BundledApp')
# Update our changes
info['JavaVM']['JVMCapabilities'] = sorted(capabilities)
plistlib.writePlist(info, info_plist)
# Create a symlink to fix legacy applications
# Find the Contents directory
contents_path = os.path.dirname(info_plist)
# make the bundle/Libraries subpath
bundle_libraries = os.path.join(contents_path, "Home", "bundle", "Libraries")
try:
# Just in case you run this script multiple times, we'll fail if the directory already exists
os.makedirs(os.path.join(bundle_libraries))
except:
pass
# create the symlink between libjvm.dylib and libserver.dylib
libjvm_dylib = os.path.join(contents_path, "Home", "jre", "lib", "server", "libjvm.dylib")
libserver_dylib = os.path.join(bundle_libraries, "libserver.dylib")
try:
#Just in case you run this script multiple times, we'll fail if the file already exists
os.symlink(libjvm_dylib, libserver_dylib)
except:
pass
print("Info.plist successfully Updated !!")
designer_info_plist()
except IOError as io:
print(io.strerror)
pass
except Exception as e:
print(e.message)
print("Script Failed, Please rerun the script !!")
#------------------end contents of updateInfoPlistScript.py file------------------------
# Related Technical Information Documents
# TID 7024282 - Designer fails to start on MacOS - The Designer executable launcher was unable to locate its companion shared library.