# bsphp.app.demo.card 与 bsphp.mac.demo.card 功能对照与配置说明

本文说明 iPhone 演示工程与 Mac 演示工程在能力上是否对齐，以及运行所需的工程配置。

## 功能对照表

| 能力 | Mac（bsphp.mac.demo.card） | iPhone（bsphp.app.demo.card） | 说明 |
|------|---------------------------|------------------------------|------|
| BSPHP 配置 | `BSPHPCardConfig`（url / mutualKey / RSA） | 同左，常量与 Mac 一致 | 同一套演示站参数 |
| 加密与请求 | `BSPHPCrypto` + `BSPHPClient` | 源码与 Mac 目录下同路径文件一致（复制） | 协议与 Mac 相同 |
| 启动流程 | `.task` 内 `bootstrap()` + `getNotice()` | 同左 | `internet.in` + `BSphpSeSsL.in` |
| Tab：卡密登录 | `login.ic`、网络测试、版本、售卡链接 | 同左 | 售卡链接见下 |
| Tab：机器码 | `AddCardFeatures.key.ic` → `login.ic`；`chong.ic` 充值 | 同左 | 字段绑定与 Mac 一致 |
| 登录成功 UI | 新建 `NSWindow` 承载主控制面板 | `fullScreenCover` 全屏呈现同一套面板能力 | **呈现方式不同，能力对齐** |
| 主控制面板 API | 到期、登录态、心跳、公告、时间、版本、软信息、URL、自定义配置、全局/逻辑、激活查询、卡信息、绑定/解绑、`logout` | 同左 | 按钮使用 `LazyVGrid` 适配窄屏 |
| 售卡 / 续费 | `NSWorkspace.open` 打开浏览器 | `OpenURLAction` / 系统浏览器 | **系统 API 差异**，效果一致 |
| 机器码 | `IOPlatformUUID` 或 UserDefaults 兜底 UUID | iOS 上多为 **UserDefaults 持久化 UUID**（与 Mac 同一 `BSPHPClient.machineCode` 逻辑；硬件 UUID 在 iOS 通常不可用） | **设备标识来源可能不同**，不影响协议演示 |
| 多窗口前置 | 已打开则 `makeKeyAndOrderFront` | 不适用（单全屏层） | 差异 |

**结论：** 业务接口与卡模式闭环与 Mac 版对齐；差异集中在 **窗口形态、打开外链方式、机器码取值路径**。

## 依赖与第三方

- **系统框架：** `Foundation`、`CryptoKit`、`Security`、`CommonCrypto`；网络使用 `URLSession`。
- **无 CocoaPods / SPM 外部依赖。**

## Info.plist / 工程配置说明

工程使用 **自动生成 Info.plist**（`GENERATE_INFOPLIST_FILE = YES`），在 Xcode 目标 **Build Settings** 中通过 `INFOPLIST_KEY_*` 注入常用键：

| 键（构建设置名） | 作用 |
|------------------|------|
| `INFOPLIST_KEY_UIApplicationSceneManifest_Generation` | 使用场景声明（SwiftUI 生命周期） |
| `INFOPLIST_KEY_UILaunchScreen_Generation` | 启动屏由系统自动生成 |
| `INFOPLIST_KEY_CFBundleDisplayName` | 桌面显示名：`BSPHP卡演示` |
| `INFOPLIST_KEY_UISupportedInterfaceOrientations` | 竖屏为主（iPhone） |

### 网络与 ATS

- 演示地址为 **HTTPS**（`https://demo.bsphp.com`），默认 **App Transport Security 无需额外例外**。
- 若你改为 **HTTP** 或自签名证书，需在 Info.plist 中配置 `NSAppTransportSecurity`（可在 Xcode 以「原始键」添加，或改用自定义 `Info.plist`）。

### 后台能力

- 本演示为 **前台即时请求**，未使用后台刷新、推送等，无需 Background Modes。

## 本地修改要点

1. **改后台 / 应用：** 仅改 `ContentView.swift` 内 `BSPHPCardConfig`（与 Mac 相同位置语义）。
2. **图标：** `Assets.xcassets/AppIcon.appiconset` 当前为 **单尺寸 1024×1024 占位**；上架或真机分发时请补全各尺寸图标（或使用 Xcode 资产目录模板）。
3. **Bundle ID：** 默认 `zez.bsphp-app-demo-card`，可在目标 **Signing & Capabilities** 中修改。

## 构建验证

在仓库内已用如下命令通过模拟器编译（Debug）：

`xcodebuild -scheme bsphp.app.demo.card -destination 'platform=iOS Simulator,name=iPhone 16' -configuration Debug build`
