Macos 更改应用程序图标
我正在尝试创建一个生成和应用程序的应用程序(使用Applescript),到目前为止,我已经使用(do shell script“osacomile…”)命令生成了正常运行的应用程序。现在,我所需要的是一个字符串,它将自动更改生成的应用程序的图标,因为我希望我自己的图标是新生成的应用程序的图标,而不是默认的小程序图标 有哪些方法可以做到这一点 非常感谢Macos 更改应用程序图标,macos,applescript,Macos,Applescript,我正在尝试创建一个生成和应用程序的应用程序(使用Applescript),到目前为止,我已经使用(do shell script“osacomile…”)命令生成了正常运行的应用程序。现在,我所需要的是一个字符串,它将自动更改生成的应用程序的图标,因为我希望我自己的图标是新生成的应用程序的图标,而不是默认的小程序图标 有哪些方法可以做到这一点 非常感谢 Eric应用程序图标基于应用程序包中的info.plist显示。有一个名为CFBundleIconFile的键,其值是资源文件夹中图标文件的名称
Eric应用程序图标基于应用程序包中的info.plist显示。有一个名为
CFBundleIconFile
的键,其值是资源文件夹中图标文件的名称。最简单的方法是,保存为应用程序的AppleScript具有图标文件applet.icns,然后替换它。或者,您可以将自己的图标文件添加到资源文件夹,删除OSAComile创建的icns文件,并更改捆绑包中的info.plist文件。因为您没有通常在StackOverflow上需要的示例代码,所以我无法为您提供更多帮助 使用firefox中的私有javascript这会创建带有自定义图标的应用程序,唯一的问题是,每当你点击应用程序时,它会抛出“身份不明的作者”,并且不会运行
但这至少向您展示了如何设置自定义图标。感谢@djbaziwazzie对上述目录的解释
_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();
}
\u createShortcutMac:函数(目标、名称、id、图标、位置){
var desktop=dirSvc.get(“Desk”,Ci.nsi文件);
此._createBundle(目标、名称、id、图标、桌面);
}
_createBundle:函数(目标、名称、id、图标、位置){
var含量=
“\n”+
“\n”+
“\n”+
“\n”+
“CbundleExecutable\n”+
“+name+”\n”+
“CbundleConfire\n”+
“”+icon.leafName+“\n”+
“\n”+
"";
location.append(name+“.app”);
if(location.exists())
位置。删除(true);
创建(Ci.nsIFile.DIRECTORY_TYPE,0755);
位置。附加(“内容”);
创建(Ci.nsIFile.DIRECTORY_TYPE,0755);
var info=location.clone();
信息附加(“信息列表”);
var stream=Cc['@mozilla.org/network/file output stream;1'].createInstance(Ci.nsIFileOutputStream);
init(info,PR_WRONLY | PR_CREATE|u FILE | PR_TRUNCATE,0600,0);
stream.write(内容、内容、长度);
stream.close();
var resources=location.clone();
资源。追加(“资源”);
创建(Ci.nsIFile.DIRECTORY_TYPE,0755);
copyTo(参考资料,icon.leafName);
var macos=location.clone();
macos.追加(“macos”);
创建(Ci.nsIFile.DIRECTORY_TYPE,0755);
var cmd=“#!/bin/sh\nexec”+target.path+“-webapp ID”;
var script=macos.clone();
script.append(名称);
init(脚本,PR_WRONLY | PR_CREATE|u FILE | PR_TRUNCATE,0755,0);
stream.write(cmd,cmd.length);
stream.close();
}
假设您已创建应用程序包,例如通过:
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
你能分享你的代码吗?plzI不会给出确切的代码,但它是这样做的:将ScriptToCompile设置为“display dialog\”Hello,world.\“do shell script”osacile-x-o~/Desktop/AppName.app-e”&ScriptToCompile的引用形式对于mac os x>=10.7,支持我更喜欢这种方式如何,我一直在使用这种方法:(在底部,他链接到
SetFileIcon
)你能告诉我们如何用我在这里给出的代码更改图标吗:(应用程序的行为是否像目录一样?我能像平常一样迭代文件吗?)是的,你可以右键单击应用程序并显示程序包内容以查看应用程序内部。在UNIX中,当您执行OSAComile时,底层系统就是一个普通目录,而不是Mac OS X中的一个包。谢谢,伙计,我放了一些代码给这个家伙看。我会以solutin的身份发布。根据系统的不同,该图标不必在Finder中立即更改。使用quicklook查看应用程序时,您将看到新图标。需要刷新的是Finder,所以只需重新启动它(在Dock中单击并按住Finder图标上的鼠标时按住alt键,然后从上下文菜单中选择restart Finder)。哦,实际上,该图标在我的桌面上,是否通过applescript引用桌面?或者只是刷新该.app图标?要消除“身份不明的作者”错误,您必须在创建后对其使用xattr
,然后它才能工作:)