OSX开发调起浏览器,App Store等外部资源

NSWorkspace继承自NSObject,属于AppKit.framework。一个NSWorkspace对象可以启动其他应用程序和执行各种文件处理服务。

概述

每一个App中有个一个共享的 NSWorkspace
对象,可以使用类方法[sharedWorkspace
],例如, 下边的语句使用 NSWorkspace
对象请求一个可以被TextEdit App打开的文件:

[[NSWorkspace sharedWorkspace] openFile:@"/Myfiles/README"
withApplication:@"TextEdit"];

你可以使用workspace对象做这样几件事:
1.打开, 操作, 获取关于files与devices的信息
2.跟踪文件系统的改变,设备和用户数据库
3.获取或者设置文件Finder信息
4.启动APP

遗留的常量

表1,描述了包含关于应用程序的信息的NSDictionary对象所有的 keys 。NSDictionary被activeApplication和launchedApplications返回,也是NSWorkspace通知应用程序启动和终止提供的用户信息。注意,这些常量被认为是遗留的。

注意

强烈建议您在应用target macOS 10.6和以后,使用NSWorkspace类的runningApplications方法和NSRunningApplication类方法去检索这些信息,而不是使用activeApplication和launchedApplications方法。

表 1
用户信息字典的keys,通知应用启动与终端方法activeApplication 和 launchedApplications的用户信息字典的keys

@"NSApplicationPath"

app的全路径,一个NSString对象

@"NSApplicationName"

app的名称,一个NSString对象

@"NSApplicationBundleIdentifier"

app的bundle identifier,一个NSString对象

@"NSApplicationProcessIdentifier"

object. app的进程id,一个NSNumber对象

@"NSApplicationProcessSerialNumberHigh"

高长度的进程序列号(PSN),一个NSNumber对象

@"NSApplicationProcessSerialNumberLow"

低长度的进程序列号(PSN), 一个NSNumber对象

符号
访问共享NSWorkspace实例

  • sharedWorkspace
    访问NSWorkspace通知中心
    @property(readonly, strong) NSNotificationCenter *notificationCenter;

打开文件

  • openURL:,打开指定的ULR ,例如使用默认浏览器打开一个网址 [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://www.skyfox.org"]]

  • openFile: ,根据文件类型使用默认的app打开指定的文件

  • openFile:withApplication: ,使用指定的app打开文件

  • openFile:withApplication:andDeactivate: 使用指定的app打开文件, andDeactivate传入YES,如果发送请求前app在后台禁用,允许已经打开的app到前台。
    - openFile:fromImage:at:inView: 已废弃

操作应用程序

  • launchApplication: 运行指定的app
  • launchApplication:showIcon:autolaunch: ·使用附加的属性运行指定的app
  • launchApplicationAtURL:options:configuration:error: 指定的url运行app
  • hideOtherApplications 隐藏其他发送者的所有应用程序

操作文件

  • duplicateURLs:completionHandler: 以 Finder 操作的相同方式异步复制指定的 URL。
  • recycleURLs:completionHandler: 以 Finder 操作的相同方式,移动指定的url到废纸篓
    - performFileOperation:source:destination:files:tag: 在一个特定的目录中执行对一组文件的文件操作
  • activateFileViewerSelectingURLs: 激活Finder,根据指定的多个文件,打开一个或者多个windows并且选中他们。
  • selectFile:inFileViewerRootedAtPath: 根据文件夹全路径选择文件

操纵统一类型标识符信息 Uniform Type Identifier

  • typeOfFile:error: 返回指定文件的统一类型标识符,如果他能被探测到的话。
  • localizedDescriptionForType: 返回指定统一类型标识符的本地化描述
  • preferredFilenameExtensionForType: 返回指定统一类型标识符的文件后缀名
  • filenameExtension:isValidForType: 返回是否指定文件后缀是否适合统一类型标识符
  • type:conformsToType: 返回一个布尔值表示第一个统一类型标识符是否符合第二个统一类型标识符。
  • URLForApplicationWithBundleIdentifier: 返回相对于app指定标识符的url

请求的信息

  • getInfoForFile:application:type: 检索指定的文件的信息。
  • URLForApplicationToOpenURL: 返回将用于打开给定的URL的默认的app的URL。
  • fullPathForApplication: 返回指定app的全路径
  • getFileSystemInfoForPath:isRemovable:isWritable:isUnmountable:description:type: 用fullPath描述文件系统。
  • isFilePackageAtPath: 确定指定的路径是不是一个文件包。
    @property(readonly, strong) NSRunningApplication *frontmostApplication; 返回最前面的应用程序,接收事件的app。
    @property(readonly, copy) NSArray<NSRunningApplication *> *runningApplications; , 返回正在运行的app
    @property(readonly, strong) NSRunningApplication *menuBarOwningApplication; 返回属于当前显示的menubar的app

管理图标

  • iconForFile: 返回指定文件包含的图标图片
  • iconForFileType: 返回指定类型指定文件包含的图标文件
  • iconForFiles: 返回指定多个文件包含的图标文件
  • setIcon:forFile:options: 带着附加的选项,为指定的路径文件或者目录 设置图标

卸载设备

  • unmountAndEjectDeviceAtPath: 在指定的路径卸载和弹出设备。
  • unmountAndEjectDeviceAtURL:error: 尝试弹出安装在指定的路径的卷。

管理Bundles

  • absolutePathForAppBundleWithIdentifier: 返回一个app bundle在文件系统的绝对路径
  • launchAppWithBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifier: 指定 bundleIdentifier启动该应用程序。
  • openURLs:withAppBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifiers: 从一个url数组打开一个或者多个文件

管理桌面图片

  • desktopImageURLForScreen: 返回给定屏幕的桌面图片
  • setDesktopImageURL:forScreen:options:error: 指定给定的屏幕与图片url,为桌面设置图片
  • desktopImageOptionsForScreen: 返回给定屏幕的桌面图片选项

执行Finder Spotlight搜索

  • showSearchResultsForQueryString: 显示 Spotlight 搜索结果窗口

Finder文件标签

@property(readonly, copy) NSArray<NSColor *> *fileLabelColors; 返回相应文件在颜色数组中的文件标签

fileLabels 返回标签的数组

跟踪文件系统的改变

  • noteFileSystemChanged: 通知workspace对象,文件系统在指定的路径发生变化。

注销前请求额外的时间

  • extendPowerOffBy: 当关闭电源注销用户的时候,请求系统等待自定数量的时间

支持可访问性

@property(readonly) BOOL accessibilityDisplayShouldDifferentiateWithoutColor; 一个布尔值,该值指示应用程序是否应避免通过单独的颜色展示信息。
@property(readonly) BOOL accessibilityDisplayShouldIncreaseContrast; 一个布尔值,该值指示应用程序是否应该显示高对比度的用户界面。
@property(readonly) BOOL accessibilityDisplayShouldReduceTransparency; 一个布尔值,该值指示应用程序是否该避免使用半透明的背景。

废弃的方法

  • openTempFile:- findApplications- noteUserDefaultsChanged- slideImage:from:to:- checkForRemovableMedia- noteFileSystemChanged- fileSystemChanged- userDefaultsChanged- mountNewRemovableMedia- mountedRemovableMedia- mountedLocalVolumePaths- activeApplication- launchedApplications

Notifications

所有的NSWorkspace
通知 都是被 NSWorkspace
对象自己的通知中心POST, 不是app的默认notification center. 通过NSWorkspace
对象的 notificationCenter
属性访问通知中心.
NSWorkspaceWillLaunchApplicationNotification 当Finder将要启动一个app时发送
NSWorkspaceDidLaunchApplicationNotification 当一个新app已经启动时发送
NSWorkspaceDidTerminateApplicationNotification 当app停止运行时发送
NSWorkspaceSessionDidBecomeActiveNotification 切换用户会话时候发送
NSWorkspaceSessionDidResignActiveNotification 切换出用户会话前发送
NSWorkspaceDidHideApplicationNotification 当Finder隐藏一个app时发送
NSWorkspaceDidUnhideApplicationNotification 当Finder显示隐藏app时发送
NSWorkspaceDidActivateApplicationNotification 当Finder将要激活app时发送
NSWorkspaceDidDeactivateApplicationNotification 当Finder停止app时发送
NSWorkspaceDidRenameVolumeNotification 当卷改变名称 或者更改挂载路径时发送,这些通常会同时更改,只发送一次通知
NSWorkspaceDidMountNotification 当新设备挂在时发送
NSWorkspaceWillUnmountNotification 当Finder将要卸载设备时发送
NSWorkspaceDidUnmountNotification 当Finder已经卸载设备时发送
NSWorkspaceDidPerformFileOperationNotification 当文件操作已经被接收app执行时发送
NSWorkspaceDidChangeFileLabelsNotification 当Finder文件标签或者颜色改变时发送
NSWorkspaceActiveSpaceDidChangeNotification 当发生空间变化时发送
NSWorkspaceDidWakeNotification 当机器从睡眠中唤醒后发送
NSWorkspaceWillPowerOffNotification 当用户请求注销或者机器已经断电时发送
NSWorkspaceWillSleepNotification 机器休眠前发送
NSWorkspaceScreensDidSleepNotification 机器锁屏前发送
NSWorkspaceScreensDidWakeNotification 机器解锁屏幕后发送
NSWorkspaceAccessibilityDisplayOptionsDidChangeNotification 当任何辅助功能显示选项更改时发送

实例属性

@property(readonly) BOOL accessibilityDisplayShouldInvertColors;
@property(readonly) BOOL accessibilityDisplayShouldReduceMotion;

实例方法

  • openURL:options:configuration:error:
  • openURLs:withApplicationAtURL:options:configuration:error:

原文:NSWorkspace - AppKit | Apple Developer Documentation

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容