标签: nsworkspace

Cocoa:Sandbox有权发布另一个应用程序

我在打电话

[[NSWorkspace sharedWorkspace] launchApplication:path];
Run Code Online (Sandbox Code Playgroud)

从我的沙盒应用程序,我在控制台中收到此错误:

9/5/11 12:23:12.462 PM lsboxd:拒绝为21383产生<PATH删除> - 原因-10826

9/5/11 12:23:12.463 PM App:spawn_via_launchd()失败,错误= 54 label = [0x0-0x1994993] .MYApp path = <PATH REDACTED> flags = 0

9/5/11 12:23:12.464 PM应用程序:LSOpenFromURLSpec()为应用程序<PATH REDACTED>(null)返回-10810.

换句话说,我显然被"启动服务沙箱守护进程"(lsboxd)阻止,它不认为应用程序1应该启动应用程序2.

对于记录10826是"用户没有启动应用程序的权限"然后10810是"发生未知错误"

有没有人知道这个案子的权利?

如何从沙盒应用程序启动其他应用程序(请不要说AppleScript - 这是一个无法运作的噩梦,尤其是从沙盒应用程序或XPC服务调用时).理想的方法是在沙箱中使用(严重残缺的)NSWorkspace.

cocoa sandbox nsworkspace

13
推荐指数
1
解决办法
3594
查看次数

无论系统浏览器设置为何,都可以使用Safari打开URL

在我的objective-c程序中,无论系统的默认浏览器是什么,我都需要在Safari中打开一个URL.这意味着这不起作用,因为它可以启动Firefox或其他任何浏览器:

NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURL: url];
Run Code Online (Sandbox Code Playgroud)

我想我很接近这个:

[ws launchAppWithBundleIdentifier: @"com.apple.Safari"
                          options: NSWorkspaceLaunchWithoutActivation
   additionalEventParamDescriptor: NULL
                 launchIdentifier: nil];
Run Code Online (Sandbox Code Playgroud)

只需要弄清楚如何传递URL作为参数......有更简单的方法吗?

谢谢!

更新:以下代码使用我想要的URL启动Safari,但Safari立即终止!任何想法为什么会这样?

NSWorkspace * ws = [NSWorkspace sharedWorkspace];
[ws openURLs: urls withAppBundleIdentifier:@"com.apple.Safari" 
     options: NSWorkspaceLaunchDefault
additionalEventParamDescriptor: NULL
launchIdentifiers: NULL];
Run Code Online (Sandbox Code Playgroud)

我观察到了同样的行为LSOpenFromURLSpec.如果Safari实例正在运行,它可以正常工作.如果没有运行Safari实例,它将启动一个新实例并立即终止它.

更新2: Safari仅在嵌入了Flash的网站崩溃.根据上面的代码,我可以很好地打开google.com,例如,Safari会崩溃为YouTube视频.

safari nsworkspace launch-services

12
推荐指数
1
解决办法
1万
查看次数

如何使用捆绑标识符将系统首选项启动到特定的首选项窗格?

我正在尝试直接从我的应用程序打开系统日期和时间首选项。我似乎可以毫无问题地打开系统偏好设置:

let settingsBundleIdentifier = "com.apple.systempreferences"

NSWorkspace.shared.launchApplication(withBundleIdentifier: settingsBundleIdentifier, options: [], additionalEventParamDescriptor: nil, launchIdentifier: nil)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何直接进入日期和时间窗格。

我尝试将捆绑标识符更改为com.apple.systempreferences:com.apple.datetimeprefcom.apple.systempreferences:com.apple.preference.datetime但无济于事。

我应该在这里做什么?不能直接通过捆绑标识符打开窗格吗?

我知道我可以使用文件路径直接打开首选项窗格DateTime.prefPane。但我希望使用捆绑标识符打开它。

macos cocoa nsworkspace bundle-identifier swift

11
推荐指数
2
解决办法
2337
查看次数

使用Swift在finder中显示文件夹的内容

我希望能够选择一个文件夹并在Finder中显示其内容.我已设法选择文件夹本身并选择文件夹中的文件.但我不知道如何显示空文件夹的内容.

例如

文件夹A /文件夹B.

我想显示文件夹B的内容(可能是空的).

我写了以下代码:

func showFolder(fileName : String)
{
    var dataPath = homeDirectory.stringByAppendingPathComponent(fileName)
    var urlPath = NSURL(fileURLWithPath: dataPath)
    var selectedURLs = [urlPath!]
    NSWorkspace.sharedWorkspace().activateFileViewerSelectingURLs(selectedURLs)
}
Run Code Online (Sandbox Code Playgroud)

这仅打开文件夹A突出显示文件夹B. 这非常接近,但并不完全正确.

我需要能够打开文件夹B,没有任何突出显示.我显然使用了错误的命令.

directory finder nsworkspace swift

10
推荐指数
3
解决办法
4761
查看次数

OSX/Swift:屏幕可用时调用功能

我希望我的OSX应用程序在用户的屏幕可用时调用一个函数,例如:他们的计算机从睡眠状态唤醒或者用户打开他们的屏幕.基本上每当用户从没有活动屏幕变为活动时,我希望我的功能被调用.

我不确定这样做的最佳方法是:

其中哪一个似乎是最好的方法,或者我应该完全做其他事情?某种示例Swift代码非常有用,因为实现其中任何一个的代码片段似乎很少.谢谢.

macos cocoa core-graphics nsworkspace swift

9
推荐指数
1
解决办法
971
查看次数

如何获取NSRunningApplication的窗口

我想获取正在运行的应用程序的窗口列表.我可以从中获取正在运行的应用程序列表[[NSWorkspace sharedWorkspace] runningApplications],但窗口列表仅可用于NSApplication.有没有办法转换NSRunningApplicationNSApplication,或某种方式更直接地获取窗口列表?

cocoa nsapplication nsworkspace nsrunningapplication

8
推荐指数
1
解决办法
3794
查看次数

XCode 单元测试 - 在范围内找不到视图控制器

在我的应用程序开发的某个时刻,我的单元测试和 UI 测试无法访问我的应用程序的主模块:

在范围内找不到类型“FileVacuumViewController”

在范围内找不到类型“FileVacuumViewController”

他们之前使用过 xctestplan。我不知道它是在什么时候发生的。我尝试不导入@testable,包括tests.swift主模块的“目标成员资格”中的 。

也许我需要打开工作区而不是 xcproject?当我尝试打开工作区时,出现一条错误消息,树中没有显示任何文件: 在此处输入图片说明


这是我的 xctestplan 配置:

xctestplan 配置

当我点击单独运行一个 UI 测试时,大约有 20 个这样的代码签名对话框显示:

代码符号弹出窗口

macos xcode unit-testing nsworkspace xctestplan

7
推荐指数
2
解决办法
7148
查看次数

打开用户的浏览器,或者如果网站已经打开,则切换到相应的选项卡

在我的Objective-C应用程序中,我使用此代码在用户的浏览器中打开一个网站:

        [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"https://blah.com/"]];
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,有一个小问题; 如果用户已经在他的webbrowser中打开了"blah.com",则不必要地调用它会创建一个新选项卡.

如果在这些情况下简单地切换到现有选项卡,那将是更好的用户体验.

有没有办法做到这一点?请注意,如果选项卡位于"blah.com"的子页面上,我还想切换到现有选项卡,例如"blah.com/some/page.html".

url macos objective-c nsworkspace

6
推荐指数
1
解决办法
1089
查看次数

在Finder中显示不在10.8中工作

这适用于10.7但不是10.8.我如何在Mountain Lion中使用它?

-(IBAction)showTargetInFinder:(id)sender
{

     NSString *linkPath = [targetField stringValue];
     NSWorkspace *ws = [NSWorkspace sharedWorkspace];
     [ws selectFile:linkPath inFileViewerRootedAtPath:nil];

}
Run Code Online (Sandbox Code Playgroud)

cocoa nsworkspace

6
推荐指数
1
解决办法
1385
查看次数

NSWorkspaceWillPowerOffNotification 从未被调用

我正在尝试在后台进程中运行一个程序,该程序将注册系统中的每个关闭事件。

通过注册 NSWorkspaceWillPowerOffNotification 来实现此目的,如下所示:

#import <AppKit/AppKit.h>

@interface ShutDownHandler : NSObject <NSApplicationDelegate>

- (void)computerWillShutDownNotification:(NSNotification *)notification;

@end


int main(int argc, char* argv[]) {
    NSNotificationCenter *notCenter;

    notCenter = [[NSWorkspace sharedWorkspace] notificationCenter];

    ShutDownHandler* sdh = [ShutDownHandler new];

    [NSApplication sharedApplication].delegate = sdh;

    [notCenter addObserver:sdh
                  selector:@selector(computerWillShutDownNotification:)
                      name:NSWorkspaceWillPowerOffNotification
                    object:nil];

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        [[NSFileManager defaultManager] createFileAtPath:@"./output.txt" contents:nil attributes:nil];
    });

    [[NSRunLoop currentRunLoop] run];

    return 0;
}


@implementation ShutDownHandler

- (void)computerWillShutDownNotification:(NSNotification *)notification {
    NSFileHandle* file = [NSFileHandle fileHandleForUpdatingAtPath: @"./output.txt"];
    [file seekToEndOfFile];

    NSDateFormatter* fmt = [NSDateFormatter new];
    [fmt setDateFormat:@"yyyy-MM-dd …
Run Code Online (Sandbox Code Playgroud)

macos nsnotifications nsworkspace macos-sierra

5
推荐指数
1
解决办法
927
查看次数