# dylib.verify.macos — 说明

macOS 动态库工程：BSPHP 卡密协议（与 `dylib.verify.oc` / `bsphp.app.demo.card` 一致），可用于 `**dlopen` 测试** 或自行注入到宿主 App。

## 目录结构


| 路径                         | 说明                                                             |
| -------------------------- | -------------------------------------------------------------- |
| `verify.macos/NetTool/`    | `Config`、`BSPHPCryptoObjC`、`BSPHPClientObjC`、`UserInfoManager` |
| `verify.macos/entry.{h,m}` | 注入入口：`constructor` 里排队弹 `NSAlert`，走 `login.ic`                 |
| `VerifyHost/`              | 测试用小宿主 App：启动后 `dlopen` 同包内的 `verify.macos.dylib`              |
| `verify.macos.xcodeproj/`  | Xcode 工程（含 Scheme：`verify.macos`、`VerifyHost`）                 |


## Xcode 目标

1. **verify.macos**
  - 产物：`verify.macos.dylib`  
  - 链接：Foundation、Security、AppKit、IOKit
2. **VerifyHost**
  - 产物：`VerifyHost.app`  
  - 依赖 `verify.macos`，构建时把 `verify.macos.dylib` **复制到** `VerifyHost.app/Contents/MacOS/`  
  - 用于在 Xcode 里 **⌘R 直接验证弹窗与网络**，不依赖第三方注入工具

## 使用方式

### 本地调试弹窗（推荐）

1. 打开 `verify.macos.xcodeproj`
2. Scheme 选 **VerifyHost**
3. Run；若 `dlopen` 失败，会弹出 VerifyHost 自带的错误说明

### 只编 dylib

Scheme 选 **verify.macos**，Build 后在 Xcode **Product → Show Build Folder in Finder** 查看 `verify.macos.dylib`。

### 改后台地址 / 密钥

编辑 `verify.macos/NetTool/Config.h` 中的 `BSPHP_HOST`、`BSPHP_MUTUALKEY`、RSA 相关宏（与 Swift 演示保持一致）。

### 弹窗文案标识

`verify.macos/entry.m` 中函数 `**VerifyEntryAlertTag()`** 返回的字符串会出现在各 `NSAlert` 标题，可按产品名修改。

**输入授权码** 的弹窗会先请求 `**gg.in`（软件公告）**，把后台返回的 `response.data` 写在说明区，再显示输入框（与 Swift 演示里的 `getNotice()` 同源接口）。

## 注意事项

- **已保存有效卡密**（`NSUserDefaults` 的 `activationDeviceID`）且服务器仍返回成功时，与 iOS 一致 **静默不弹窗**（正常体验）。若要再次输入卡密，删除 `activationDeviceID` 后重启即可。  
- 注入到 **非标准 Cocoa**（如部分 Electron）时，`NSAlert` 可能异常；可先用 **VerifyHost** 确认 dylib 本身正常。  
- 控制台可过滤 `**verify.macos`**、`**VerifyHost**` 查看日志。

## 与仓库其它目录的关系

- `**dylib.verify.oc**`：同协议，iOS 动态库 + UIKit 弹窗。  
- `**VerifyHost**`：演示调用场景


####
如果需要在次激活去后台删除充值卡或者冻结卡，记住是在软件配置->软件用户里
