Swift 以编程方式更改墙纸

Swift 以编程方式更改墙纸,swift,macos,Swift,Macos,我正在制作一个以编程方式更改壁纸的应用程序。 这是我的密码: do{ let imgurl = NSURL.fileURL(withPath: self.app_path+self.wallpaper_folder_name+self.file_name); let workspace = NSWorkspace.shared(); if let screen = NSScreen.main(){ try workspace.setDesktopImage

我正在制作一个以编程方式更改壁纸的应用程序。
这是我的密码:

do{
    let imgurl = NSURL.fileURL(withPath: self.app_path+self.wallpaper_folder_name+self.file_name);
    let workspace = NSWorkspace.shared();
    if let screen = NSScreen.main(){
        try workspace.setDesktopImageURL(imgurl, for: screen, options: [:]);
        do{
            print("Awesome !");
        }
    }
}catch{
    print(error);
}
它正在(部分)工作

问题是:

如果我看着桌面,像这样更改墙纸: 它在工作:D

但如果我在全屏应用程序中更改壁纸,如下所示: 壁纸不会改变(没有错误)。
那么,你知道为什么吗?如何解决呢


编辑

试图使用那个密码

let screens = NSScreen.screens()!;
print("SIZE : "+String(screens.count));
for screen in screens{
    print("TRY ...");
    try workspace.setDesktopImageURL(imgurl, for: screen, options: [:]);
    do{
        print("DONE");
    }
}
但它会将我打印为“大小:1”(当我全屏使用应用程序时)…

不要给我换墙纸://

你检查了
NSScreen.main()
的值了吗?当另一个应用程序处于全屏模式时,这可能会干扰它?命令“print(screen)”会返回相同的结果:在所有情况下。只是猜测一下,但它可能会设置全屏窗口桌面的背景–当应用程序全屏运行时,操作系统会将其放入新的桌面。您是对的:NSScreen.main():返回包含具有键盘焦点的窗口的屏幕对象(查看编辑)