Files

10 KiB
Raw Permalink Blame History

UUVPN iOS SwiftUI 应用程序

语言: English | 中文

一个专业的 iOS VPN 应用程序,使用 SwiftUI 构建,专为与 V2Board 面板 API 无缝集成而设计。该应用程序为 VPN 管理提供现代化、直观的界面和全面的配置选项。

🚀 功能特性

  • 现代化 SwiftUI 界面:响应式设计,适配不同屏幕尺寸
  • 深色/浅色模式支持:与系统主题自动同步
  • V2Board API 集成:与 V2Board 面板 API 完整集成
  • 网络管理:使用 URLSession 的高级网络功能
  • 后台更新:通过后台任务调度自动更新配置文件
  • 多平台支持iOS 15.0+ 并兼容 macOS

📋 环境要求

在开始之前,请确保您的开发环境满足以下要求:

  • Xcode14.0 或更高版本
  • iOS 部署目标15.0 或更高版本
  • Swift5.7+
  • 网络访问Swift Package Manager 依赖项需要 VPN 连接

🏗️ 项目结构

iOS-SwiftUI-Code/
├── ApplicationLibrary/          # 核心应用程序库
│   ├── Service/                 # API 服务和管理器
│   │   ├── StoreManager.swift   # 配置存储管理器
│   │   └── ProfileUpdateTask.swift # 后台更新任务
│   ├── Views/                   # SwiftUI 视图组件
│   │   ├── Dashboard/           # 仪表板界面
│   │   ├── Profile/             # 配置文件管理
│   │   └── Setting/             # 设置界面
│   └── Assets.xcassets/         # 应用程序资源
├── XiaoXiong/                   # 主应用程序目标
│   ├── DefaultUI/               # 默认 UI 组件
│   └── Info.plist               # 应用程序配置
├── Extension/                   # 网络扩展
├── SystemExtension/             # macOS 系统扩展
├── uuvpn.xcodeproj             # Xcode 项目文件
└── README.md                   # 项目文档

⚙️ 安装与设置

1. 克隆仓库

git clone https://github.com/nicolastinkl/UUVPN/tree/main/iOS-SwiftUI-Code
cd iOS-SwiftUI-Code

2. 安装依赖

项目使用 Swift Package Manager 进行依赖管理。注意:需要 VPN 连接才能解析包。

# 打开项目时会自动解析依赖项

3. 在 Xcode 中打开项目

open uuvpn.xcodeproj

选择目标设备或模拟器,然后点击 运行 按钮。

🔧 V2Board API 配置

基础配置

应用程序通过由 StoreManager.swift 管理的综合 API 配置系统与 V2Board 面板集成。

V2Board API 配置

配置 URL

public let configURL = "https://api.gooapis.com/api/vpnconfig.php"

API 端点配置

在初始化响应中配置以下 API 端点:

{
  "baseURL": "https://api.0008.uk/api/v1/",
  "baseDYURL": "https://api.gooapis.com/api/vpnnodes.php",
  "mainregisterURL": "https://lelian.app/#/register?code=",
  "paymentURL": "xxxxx",
  "telegramurl": "https://t.me/fastlink",
  "kefuurl": "https://gooapis.com/fastlink/",
  "websiteURL": "https://gooapis.com/fastlink/",
  "crisptoken": "5546c6ea-4b1e-41bc-80e4-4b6648cbca76",
  "banners": [
    "https://image.gooapis.com/api/images/12-11-56.png",
    "https://image.gooapis.com/api/images/12-44-57.png",
    "https://image.gooapis.com/api/images/12-47-03.png"
  ],
  "message": "OK",
  "code": 1
}

API 字段说明

字段 描述 用途
baseURL V2Board 面板的主要 API 端点 所有主要 API 请求
baseDYURL 默认 VPN 节点测试端点 节点连接测试
mainregisterURL 带推荐码的用户注册页面 用户引导
paymentURL 支付网关 URL App Store 合规性关键
telegramurl Telegram 支持频道 客户支持
kefuurl 客服页面 在线支持
websiteURL 官方网站 URL 一般信息
crisptoken Crisp 聊天认证令牌 实时聊天集成
banners 推广横幅图片 URL 营销内容
message 响应状态消息 API 响应验证
code 响应状态码 成功/错误处理

API 请求头

所有 API 请求都包含以下用于身份验证和跟踪的请求头:

request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue(Bundle.main.bundleIdentifier ?? "", forHTTPHeaderField: "bid")
request.addValue(UserManager.shared.appversion, forHTTPHeaderField: "appver")

🆔 Bundle Identifier (BID) 配置

理解 Bundle Identifier

Bundle Identifier (BID) 对于应用程序识别和 API 身份验证至关重要。它在整个代码库中被引用为 Bundle.main.bundleIdentifier

当前 BID 配置

基于 Info.plist 分析,当前 BID 模式为:

com.uuvpn.appleaman

修改 Bundle Identifier

要为您的部署更改 Bundle Identifier

Bundle Identifier 配置

1. 更新 Xcode 项目设置

  1. 在 Xcode 中打开 uuvpn.xcodeproj
  2. 在导航器中选择项目根目录
  3. 选择您的目标(例如 "SFI"、"SFM"、"SFT"
  4. 导航到 GeneralIdentity
  5. 更新 Bundle Identifier 字段

2. 更新 Info.plist 引用

在配置文件中搜索并替换所有 BID 引用:

# 搜索当前 BID 引用
grep -r "com.uuvpn.appleaman" .

# 更新以下文件:
# - XiaoXiong/Info.plist
# - Extension/Info.plist  
# - SystemExtension/Info.plist
# - IntentsExtension/Info.plist

3. 更新代码引用

BID 通过以下文件中的 Bundle.main.bundleIdentifier 自动获取:

由于使用系统 bundle identifier,无需更改代码。

API 中的 BID 验证

服务器可以使用 BID 头验证请求,确保 API 调用来自授权应用程序。

💳 支付 URL 逻辑与 App Store 合规性

支付 URL 长度检测

应用程序基于 paymentURL 字段长度实现智能支付处理:

// Apple 审核模式检测
if (paymentURLKey.count > 3) {
    // 正常支付模式 - 显示外部支付选项
    // 启用订阅功能
    // 显示支付按钮和价格
} else {
    // Apple 审核模式 - 隐藏外部支付
    // 符合 App Store 指南
    // 隐藏敏感支付信息
}

实现详情

正常模式 (paymentURL.length > 3)

  • 外部支付:引导用户到基于网页的支付系统
  • 完整功能访问:所有订阅功能可用
  • 支付集成:与外部提供商的完整支付流程

Apple 审核模式 (paymentURL.length ≤ 3)

  • 合规模式:隐藏外部支付选项
  • 功能限制:审核期间功能受限
  • App Store 指南:符合 Apple 的支付政策

代码实现

该逻辑在多个视图文件中实现:

服务器端配置

配置您的初始化端点返回:

{
  "paymentURL": "https://your-payment-gateway.com/pay",  // 正常模式
  // 或者
  "paymentURL": "xx",  // Apple 审核模式
}

🔄 初始化端点配置

端点设置

应用程序在启动时从远程端点获取配置。这允许动态配置而无需应用程序更新。

初始化配置

推荐托管

  • 阿里云 OSS:在中国响应时间更快
  • CDN 集成:全球内容分发
  • 需要 HTTPS:安全配置传输

配置响应格式

{
  "baseURL": "https://your-v2board-panel.com/api/v1/",
  "baseDYURL": "https://your-node-test-endpoint.com/api/vpnnodes.php",
  "mainregisterURL": "https://your-panel.com/#/register?code=",
  "paymentURL": "https://your-payment-gateway.com/",
  "telegramurl": "https://t.me/your-support-channel",
  "kefuurl": "https://your-support-site.com/",
  "websiteURL": "https://your-website.com/",
  "crisptoken": "your-crisp-chat-token",
  "banners": [
    "https://your-cdn.com/banner1.png",
    "https://your-cdn.com/banner2.png"
  ],
  "message": "OK",
  "code": 1
}

错误处理

{
  "message": "Configuration Error",
  "code": 0,
  "error": "Invalid request"
}

缓存策略

StoreManager 实现本地缓存:

// 配置使用 UserDefaults 本地缓存
func storebaseURLData(data: String) {
    defaults.set(data, forKey: "baseURLKey")
    defaults.synchronize()
}

🔐 安全考虑

API 安全

  • 仅 HTTPS:所有 API 端点必须使用 HTTPS
  • 令牌验证:实现适当的令牌验证
  • 速率限制:防止 API 滥用

Bundle Identifier 安全

  • 唯一 BID:为您的部署使用唯一的 bundle identifier
  • 服务器验证:在服务器端验证 API 请求的 BID
  • 证书固定:考虑实现证书固定

🚀 部署指南

部署前检查清单

  1. 更新 Bundle Identifier:从默认 BID 更改
  2. 配置 API 端点:设置您的 V2Board 面板 URL
  3. 测试支付逻辑:验证正常和审核模式
  4. 更新应用图标:用您的品牌替换默认图标
  5. 配置推送通知:设置通知证书

构建配置

# 清理构建文件夹
rm -rf ~/Library/Developer/Xcode/DerivedData

# 归档用于分发
xcodebuild archive \
  -project uuvpn.xcodeproj \
  -scheme YourSchemeName \
  -archivePath YourApp.xcarchive

🤝 贡献

我们欢迎贡献来改进应用程序。请遵循以下指南:

  1. Fork 仓库
  2. 创建功能分支
  3. 进行更改
  4. 提交 pull request

📄 许可证

该项目基于 MIT 许可证。详细信息请查看 LICENSE 文件。

📞 支持

技术支持和问题:

  • GitHub Issues创建问题
  • 文档:参考项目中的部署文档
  • 社区:加入我们的开发者社区获取帮助

注意:此应用程序需要正确的 V2Board 面板设置和有效的 API 端点才能正常运行。请确保在部署前正确配置您的后端基础设施。