# MacCatalystUse
**Repository Path**: xiaoyigegespec/mac-catalyst-use
## Basic Information
- **Project Name**: MacCatalystUse
- **Description**: MacCatalyst 的冷门使用方法
- **Primary Language**: Swift
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-11-27
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Mac Catalyst 项目调用和屏保功能
[TOC]
# Mac Catalyst中使用 AppKit框架
> UIKit是用来开发iOS的应用的,AppKit是用来开发Mac应用的。
>
>UIKit和AppKit都有一个Application类,每个应用都只创建一个Application对象,分别是UIAplication和NSApplication的实例
这种情况下就需要有一个动态的映射转换工具(Dynamic)了:
[https://github.com/mhdhejazi/Dynamic](https://github.com/mhdhejazi/Dynamic)

## 转化为 mac 的 window
```swift
extension UIWindow {
var nsWindow: NSObject? {
var nsWindow = Dynamic.NSApplication.sharedApplication.delegate.hostWindowForUIWindow(self)
if #available(macOS 11, *) {
nsWindow = nsWindow.attachedWindow
}
return nsWindow.asObject
}
}
```
## 单独使用
```swift
let app = Dynamic.NSApplication.sharedApplication()
// Swift:
let formatter = Dynamic.NSDateFormatter()
// Getting the property value:
let format = formatter.dateFormat // `format` is now a Dynamic object
// Setting the property value:
formatter.dateFormat = "yyyy-MM-dd"
// Or the longer version:
formatter.dateFormat = NSString("yyyy-MM-dd")
```
***********
# 使用linux 操作命令
## 定义脚本方法
```swift
@discardableResult
func shell(_ args: [String]) -> String {
let task = Dynamic.NSTask() //Process()
task.launchPath = "/usr/bin/env"
task.arguments = args
let pipe = Pipe()
task.standardOutput = pipe
task.launch()
task.waitUntilExit()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String
return output;
}
```
## 使用命令
```swift
// 以空格来区分参数,依次填写
// print(shell(["ls", "-al"]))
shell(["open", saverPath]) //saverPath是文件的具体路径
```
****************
# Mac屏保
>Mac Catalyst项目不能制作屏保程序,会报:'ScreenSaverView' is unavailable: not available on macCatalyst 的错误
>要用原生的 Mac 开发才可以 ([原生Mac参考示例](https://github.com/wangweicheng7/Sundial))
把屏保程序包放在项目里面

```swift
// 获取屏保程序资源
guard let path = Bundle.main.path(forResource: "MySaver",ofType:"saver") else {
print("Unable to locate BuildScript.command")
return
}
// 脚本运行安装
shell(["open", path])
```
[代码地址](https://gitee.com/xiaoyigegespec/mac-catalyst-use)