# dylib.verify.oc — VerifyHost 操作说明

`VerifyHost` 是 **iOS 测试宿主 App**：启动后在运行时 **`dlopen` 同包内的 `verify.dylib`**，用于在 Xcode 里调试动态库里的 **constructor、网络请求、弹窗** 等逻辑，无需第三方注入环境。

> 说明：`dylib.verify.oc` 的代码依赖 **UIKit**（如 `UIAlertView`），因此宿主必须是 **iOS 应用**（模拟器或真机），与 macOS 工程里基于 `NSApplication` 的 VerifyHost 不同。

## 目录与工程

| 路径 | 说明 |
| --- | --- |
| `VerifyHost/` | 宿主源码：`main.m`、`AppDelegate`、`Info.plist`、`LaunchScreen.storyboard` |
| `verify/` | 动态库源码；`entry.mm` 中 `__attribute__((constructor))` 在 `dlopen` 成功后执行 |
| `verify.xcodeproj` | Xcode 工程；共享 Scheme：**`verify`**、**`VerifyHost`** |

## Xcode 目标关系

1. **verify**  
   - 产物：`verify.dylib`  
2. **VerifyHost**  
   - 产物：`VerifyHost.app`  
   - **依赖** `verify`：先编出 `verify.dylib`，再通过 **Copy Files** 复制到 `VerifyHost.app` 内与可执行文件**同一目录**（供 `dlopen` 使用）。

## 推荐操作：本地调试验证流程

1. 用 Xcode 打开 **`verify.xcodeproj`**。  
2. 顶部 Scheme 选择 **`VerifyHost`**。  
3. 运行目标选 **任意 iOS 模拟器**（或已配置签名的真机）。  
4. 按 **⌘R** 运行。  
5. 在 Xcode **控制台** 中查看日志：  
   - 成功：会出现 `[VerifyHost] 已 dlopen ...（constructor 将拉起验证流程）`；  
   - 失败：应用内会弹出说明对话框，并打印 `dlopen` 错误详情（多为 dylib 未复制进包或路径不对）。

## 只编译 dylib

Scheme 选 **`verify`**，Build 即可；产物在 Xcode **Product → Show Build Folder in Finder** 对应配置目录下的 **`verify.dylib`**。

## 修改后台地址 / 密钥

与工程内其它目标一致，编辑 **`verify/NetTool/Config.h`** 中的 `BSPHP_HOST`、`BSPHP_MUTUALKEY` 及 RSA 相关宏。

## 常见问题

- **选错 Scheme**：若选 `verify` 只会生成 dylib，不会自动启动带界面的宿主；调试弹窗请选 **`VerifyHost`**。  
- **模拟器架构**：本工程 `verify` 目标为 **arm64**；在 Apple 芯片 Mac 的模拟器上一般可直接运行；若遇架构不匹配，请在 Xcode 中检查 **Excluded Architectures** 与所选模拟器是否一致。  
- **真机**：需在 **Signing & Capabilities** 中为 `VerifyHost` 配置有效开发团队与描述文件；`verify.dylib` 会随 App 一并签名/拷贝，以当前 Xcode 行为为准。


可以拖进模拟器运行测试的