## App 需要记录的信息汇总

- 页签窗口控制器 KMBrowserWindowController
- 页签窗口 KMBrowserWindowController
- 文档 KMMainDocument
- 首页页签内容控制器 KMHomeViewController
- 阅读页签内容控制器 KMMainViewController
- 页签操作可查看 KMBrowser


## App 架构 
- MVC
- MVC 目前存在 C 比较臃肿的弊端,但是也是可以使用的,比较臃肿的问题待后续优化.

## 多页签

- 页签操作 KMBrowser [CTTabStripModel 实际操作对象]
- 窗口控制器 KMBrowserWindowController
- 窗口 KMBrowserWindow
- 页签区域控制器 KMTabStripController
- 页签区域 KMTabStripView
- 页签控制器 CTTabController
- 页签视图 CTTabView
- 页签内容控制器 CTTabContentsController [KMHomeViewController + KMMainViewController 都是显示在其上]
- 页签内容提供者 CTTabContents(文档 当前App对应的是 KMMainDocument)

- 页签拖拽 CTTabStripDragController

* 内存管理 
1. KMBrowser [-> CTTabStripModel -> KMMainDocument] -> KMMainDocument -> KMBrowser
2. 环形内存引用 让内存不释放。在适当的时机断环来释放内存,避免循环引用.
3. KMBrowser -> KMBrowserWindowController 强引用 页签窗口控制器.

* 事件传递
1. target-action [KMTabStripController -> CTTabController, CTTabController --> KMTabStripController(target)]
2. 响应者链 [NewTabButton]
3. 通知 [CTTabStripModel]
4. 代理 [KMBrowser -> CTTabStripModel, CTTabStripModel --> KMBrowser(delegate)]

* 维护建议
1. 新增功能或修复bug,尽量通过重写类来处理,保证三方库内部尽可能少的改动.

## Apple Event 开发注意项

- NSAppleScript 开发注意项 [脚本开发]

1. Apple Events 设置项 开启
2. info.plist 新增一项 [Privacy - AppleEvents Sending Usage Description] 授权提示语,在请求系统授权时弹起的授权窗口里提示语.缺失会引起crash,App Store 版本也可能会被拒.
3. 开启其他程序授权 xx.entitlements 新增一项 [com.apple.security.temporary-exception.apple-events]
- Office Word       [com.microsoft.word]
- Office Excel      [com.microsoft.excel]
- Office PPT        [com.microsoft.powerpoint]
- ...
4. 编码脚本执行 [可见: KMConvertPDFManager] 

- Office 转 PDF 
1. 创建空白 PDF 文件
2. 开启 Office 程序,并把原文件路径和需要存储的路径 [空白PDF文件的路径] 传递给 Office 程序. [脚本执行]

* 脚本执行时会有两处授权 

1. 开启 Office 程序需要授权,只授权一次. [授权后可以在 偏好设置->安全性与隐私->隐私->自动化 里查看授权情况]
2 Office 程序将数据保存为PDF文件时需要授权 [因空白PDF文件是 App的私有路径]

* 脚本执行错误

1. 没有授权 [可以在 偏好设置->安全性与隐私->隐私->自动化 里查看授权情况]
2. Office 程序没有运行 [检查 NSAppleScript 开发注意项里的 1. 2. 3.]
... 

## KMDrawViewSDK_Mac.framework
    drawView?.clear() 
    drawView?.resetUndoManager()
    操作时留意先后顺序,避免undo操作还可以点击
            
## 代码注释

//TODO: 标示有功能代码待编写 -
//MARK: mark -
//FIXME: 标示代码需要修正 -
//!!!: 标示代码需要注意 -
//???: 标示代码有疑问 -

## App 主要模块的入口

## 首页

- 打开文件 & 创建PDF KMCreatPDFView
- 最近列表 KMHomeHistoryListView


## 页面编辑

- 页面编辑【阅读页】
* KMPDFEditViewController
- 页面编辑【阅读页】自定义页面范围
* KMPDFEditPageRangeWindowController
- 页面编辑【阅读页】插入文件
* KMPDFEditInsertPageWindow
- 页面编辑【阅读页】提取
* KMPDFEditExtractWindow
- 页面编辑【阅读页】拆分
* SplitWindowController

- 插入 【首页快捷工具】
* KMPDFInsertWindowController

- 拆分 【首页快捷工具】
* SplitWindowController

- 页面编辑 【首页快捷工具】
* KMPDFEditWindowController

## OCR

- 【首页快捷工具】
* KMOCRPDFWindowController

## AI
- 概括 & 重写 & 校对 & 翻译
* AIConfigWindowController 
- AI 购买窗口 AIPurchaseWindowController

## 合并

* KMMergeWindowController

## 转档

* KMConvertWindowController

## 批量

* KMBatchOperateWindowController

## 图片转PDF

* KMBatchOperateBaseWindowController

## 属性面板

* KMGeneralAnnotationViewController

- 【页面设置】
* KMPageDisplayPropertiesViewController

* 分割视图 KMSecondaryViewController
* 入口 toggleSplitPDF

- 【注释】
* KMAnnotationPropertiesViewController

* 图章 KMAnnotationStampViewController

* 签名 KMSignatureAnnotationViewController

* 水印
* 水印模板 KMBatchOperateAddWatermarkViewController
* 水印模板编辑 KMWatermarkWindowController

* 背景
* 背景模板 KMBatchOperateAddWatermarkViewController
* 背景模板编辑 KMBackgroundWindowController

- 填写与签名
* 日期 KMFillSignTextPanel
* KMAnnotationSelfSignViewController

- 编辑PDF
* 文本 KMEditPDFTextPropertyViewController
* 图片 KMEditImagePropertyViewController

## What's New

* KMFunctionGuideWindowController

## 信息

* KMProfileInfoWindowController

## 幻灯片

* 选项设置 SKPresentationOptionsSheetController

## 注释工具

* 笔记 CPDFListAnnotationNoteWindowController
* 便签 CPDFListEditAnnotationViewController

* 自定义注释工具 KMToolbarCustomWindowController

## 填写与签名

* ✅、叉、矩形、线段、圆点注释 CSelfSignAnnotation
* 日期注释 CSelfSignAnnotationFreeText
* 签名注释:CPDFListSignatureAnnotation

## 数字签名

* KMPDFDigitalSignViewController
* 查看证书 DSignatureDetailsViewController

## 导入 [扫描仪 & 相册]

* KMDeviceBrowserWindowController

## 线条设置窗口

* KMLineInspector
* KMAnnotationLineWindowController

## 笔记类型窗口

* KMNotesPanelController

## 字体设置窗口

* KMAnnotationFontWindowController

## 文件对比

* 下方工具bar KMCompareToolbar

## xxx

[sign in](https://www.baidu.com) the [dashboard](https://www.baidu.com). to [sign up](https://www.baidu.com) 

- the **API ** 

- the **API ** 

## xxx

See ***"Samples"*** folder in this folder.

## xxx
* 
*