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: