我正在尝试创建一个生成和应用程序(使用Applescript)的应用程序,到目前为止,我已经通过使用(do shell脚本“osacompile ...”)命令生成正常运行的应用程序。现在,我需要的是一个字符串,它将自动更改生成的应用程序的图标,因为我希望我自己的图标是新生成的应用程序的图标而不是默认的Applet图标。
有什么方法可以解决这个问题?
非常感谢。
埃里克
答案 0 :(得分:1)
应用程序的图标基于应用程序包内的info.plist显示。有一个名为CFBundleIconFile
的键,其值是资源文件夹中图标文件的名称。最简单的方法是保存为应用程序的AppleScript具有图标文件applet.icns,然后将其替换。或者,您可以将自己的图标文件添加到资源文件夹,删除osacompile创建的icns文件,并更改bundle中的info.plist文件。因为您没有示例代码(通常在StackOverflow上需要),所以我无法帮助您。
答案 1 :(得分:1)
假设您已创建了应用包,例如通过:
osascript -o Foo.app foo.applescript
然后您可以简单地覆盖现有的图标文件:
cp -f myicon.icns Foo.app/Contents/Resources/applet.icns
或复制新的图标文件,并更新Info.plist:
rm Foo.app/Contents/Resources/applet.icns
cp myicon.icns Foo.app/Contents/Resources/
plutil -replace CFBundleIconFile -string myicon.icns Foo.app/Contents/Info.plist
答案 2 :(得分:0)
使用来自firefox的privealaged javascript,这会创建带有自定义图标的应用程序,唯一的问题是,每当您点击应用程序时,它会抛出“身份不明的作者”并且不会运行。
但这至少告诉您如何设置自定义图标。感谢@djBazzieWazzie解释以上加上目录。
_createShortcutMac : function(target, name, id, icon, location) {
var desktop = dirSvc.get("Desk", Ci.nsIFile);
this._createBundle(target, name, id, icon, desktop);
}
_createBundle : function(target, name, id, icon, location) {
var contents =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n" +
"<plist version=\"1.0\">\n" +
"<dict>\n" +
"<key>CFBundleExecutable</key>\n" +
"<string>" + name + "</string>\n" +
"<key>CFBundleIconFile</key>\n" +
"<string>" + icon.leafName + "</string>\n" +
"</dict>\n" +
"</plist>";
location.append(name + ".app");
if (location.exists())
location.remove(true);
location.create(Ci.nsIFile.DIRECTORY_TYPE, 0755);
location.append("Contents");
location.create(Ci.nsIFile.DIRECTORY_TYPE, 0755);
var info = location.clone();
info.append("Info.plist");
var stream = Cc['@mozilla.org/network/file-output-stream;1'].createInstance(Ci.nsIFileOutputStream);
stream.init(info, PR_WRONLY | PR_CREATE_FILE | PR_TRUNCATE, 0600, 0);
stream.write(contents, contents.length);
stream.close();
var resources = location.clone();
resources.append("Resources");
resources.create(Ci.nsIFile.DIRECTORY_TYPE, 0755);
icon.copyTo(resources, icon.leafName);
var macos = location.clone();
macos.append("MacOS");
macos.create(Ci.nsIFile.DIRECTORY_TYPE, 0755);
var cmd = "#!/bin/sh\nexec " + target.path + " -webapp ID";
var script = macos.clone();
script.append(name);
stream.init(script, PR_WRONLY | PR_CREATE_FILE | PR_TRUNCATE, 0755, 0);
stream.write(cmd, cmd.length);
stream.close();
}