Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 更改应用程序图标_Macos_Applescript - Fatal编程技术网

Macos 更改应用程序图标

Macos 更改应用程序图标,macos,applescript,Macos,Applescript,我正在尝试创建一个生成和应用程序的应用程序(使用Applescript),到目前为止,我已经使用(do shell script“osacomile…”)命令生成了正常运行的应用程序。现在,我所需要的是一个字符串,它将自动更改生成的应用程序的图标,因为我希望我自己的图标是新生成的应用程序的图标,而不是默认的小程序图标 有哪些方法可以做到这一点 非常感谢 Eric应用程序图标基于应用程序包中的info.plist显示。有一个名为CFBundleIconFile的键,其值是资源文件夹中图标文件的名称

我正在尝试创建一个生成和应用程序的应用程序(使用Applescript),到目前为止,我已经使用(do shell script“osacomile…”)命令生成了正常运行的应用程序。现在,我所需要的是一个字符串,它将自动更改生成的应用程序的图标,因为我希望我自己的图标是新生成的应用程序的图标,而不是默认的小程序图标

有哪些方法可以做到这一点

非常感谢


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
,然后它才能工作:)