diff --git a/iOS-SwiftUI-Code/Extension/Extension.entitlements b/iOS-SwiftUI-Code/Extension/Extension.entitlements index 1093b95..76b1752 100644 --- a/iOS-SwiftUI-Code/Extension/Extension.entitlements +++ b/iOS-SwiftUI-Code/Extension/Extension.entitlements @@ -4,7 +4,7 @@ com.apple.developer.icloud-container-identifiers - iCloud.com.uuvpn.apple + iCloud.com.uuvpn.appleaman com.apple.developer.icloud-services @@ -18,13 +18,13 @@ com.apple.developer.ubiquity-container-identifiers - iCloud.com.uuvpn.apple + iCloud.com.uuvpn.appleaman com.apple.security.app-sandbox com.apple.security.application-groups - group.com.uuvpn.apple + group.com.uuvpn.appleaman com.apple.security.network.client diff --git a/iOS-SwiftUI-Code/IntentsExtension/IntentsExtension.entitlements b/iOS-SwiftUI-Code/IntentsExtension/IntentsExtension.entitlements index a4bf651..08fab9b 100644 --- a/iOS-SwiftUI-Code/IntentsExtension/IntentsExtension.entitlements +++ b/iOS-SwiftUI-Code/IntentsExtension/IntentsExtension.entitlements @@ -6,7 +6,7 @@ com.apple.security.application-groups - group.com.uuvpn.apple + group.com.uuvpn.appleaman com.apple.security.network.client diff --git a/iOS-SwiftUI-Code/Library/Database/Profile+Transferable.swift b/iOS-SwiftUI-Code/Library/Database/Profile+Transferable.swift index ec91b6d..9b3a0a3 100644 --- a/iOS-SwiftUI-Code/Library/Database/Profile+Transferable.swift +++ b/iOS-SwiftUI-Code/Library/Database/Profile+Transferable.swift @@ -102,5 +102,5 @@ public struct TypedProfile: Transferable, Codable { } public extension UTType { - static var profile: UTType { .init(exportedAs: "com.uuvpn.apple.profile") } + static var profile: UTType { .init(exportedAs: "com.uuvpn.appleaman.profile") } } diff --git a/iOS-SwiftUI-Code/Library/Shared/FilePath.swift b/iOS-SwiftUI-Code/Library/Shared/FilePath.swift index 7deada2..ff8e74f 100644 --- a/iOS-SwiftUI-Code/Library/Shared/FilePath.swift +++ b/iOS-SwiftUI-Code/Library/Shared/FilePath.swift @@ -1,7 +1,7 @@ import Foundation public enum FilePath { - public static let packageName = "com.uuvpn.apple" + public static let packageName = "com.uuvpn.appleaman" } public extension FilePath { diff --git a/iOS-SwiftUI-Code/README.md b/iOS-SwiftUI-Code/README.md index 764b6e6..038aa73 100644 --- a/iOS-SwiftUI-Code/README.md +++ b/iOS-SwiftUI-Code/README.md @@ -1,63 +1,343 @@ +# UUVPN iOS SwiftUI Application +A professional iOS VPN application built with SwiftUI, designed to integrate seamlessly with V2Board panel APIs. This application provides a modern, intuitive interface for VPN management with comprehensive configuration options. -## 项目简介 -本项目是基于 SwiftUI 开发的 iOS 应用,旨在提供直观的用户界面和流畅的交互体验。该应用支持多种功能,包括但不限于: +## 🚀 Features -- **响应式 UI 设计**:适配不同屏幕尺寸。 -- **深色/浅色模式切换**:支持系统主题同步。 -- **网络请求**:基于 `URLSession` 进行 API 交互。 +- **Modern SwiftUI Interface**: Responsive design that adapts to different screen sizes +- **Dark/Light Mode Support**: Automatic theme synchronization with system preferences +- **V2Board API Integration**: Complete integration with V2Board panel APIs +- **Network Management**: Advanced networking capabilities using `URLSession` +- **Background Updates**: Automatic profile updates with background task scheduling +- **Multi-platform Support**: iOS 15.0+ with macOS compatibility -## 项目结构 +## 📋 Requirements - ├── iOS-SwiftUI-App/ - │ ├── Sources/ - │ │ ├── Views/ # 界面视图 - │ │ ├── Models/ # 数据模型 - │ │ ├── ViewModels/ # 业务逻辑 - │ │ ├── Resources/ # 静态资源 - │ ├── Tests/ # 单元测试 - │ ├── iOS-SwiftUI部署文档教程.docx # 必须阅读的部署文档 - │ ├── README.md # 项目说明文件 - │ └── Info.plist # 配置文件 +Before getting started, ensure your development environment meets the following requirements: -## 环境要求 -在开始使用该项目之前,请确保您的开发环境满足以下要求: +- **Xcode**: 14.0 or later +- **iOS Deployment Target**: 15.0 or later +- **Swift**: 5.7+ +- **Network Access**: VPN required for Swift Package Manager dependencies -- Xcode 14.0 及以上版本 -- iOS 15.0 及以上 -- Swift 5.7+ +## 🏗️ Project Structure -## 安装与运行 -请按照以下步骤完成项目的安装与运行: +``` +iOS-SwiftUI-Code/ +├── ApplicationLibrary/ # Core application library +│ ├── Service/ # API services and managers +│ │ ├── StoreManager.swift # Configuration storage manager +│ │ └── ProfileUpdateTask.swift # Background update tasks +│ ├── Views/ # SwiftUI view components +│ │ ├── Dashboard/ # Dashboard interface +│ │ ├── Profile/ # Profile management +│ │ └── Setting/ # Settings interface +│ └── Assets.xcassets/ # Application assets +├── XiaoXiong/ # Main application target +│ ├── DefaultUI/ # Default UI components +│ └── Info.plist # Application configuration +├── Extension/ # Network extension +├── SystemExtension/ # System extension for macOS +├── uuvpn.xcodeproj # Xcode project file +└── README.md # Project documentation +``` -1. **克隆项目** - ```bash - git clone https://github.com/nicolastinkl/UUVPN/tree/main/iOS-SwiftUI-Code - cd iOS-SwiftUI-App +## ⚙️ Installation & Setup -2. **安装依赖** +### 1. Clone the Repository - swfit package manager (必须翻墙) +```bash +git clone https://github.com/nicolastinkl/UUVPN/tree/main/iOS-SwiftUI-Code +cd iOS-SwiftUI-Code +``` +### 2. Install Dependencies -3. **打开 Xcode 并运行** +The project uses Swift Package Manager for dependency management. **Note: VPN connection required for package resolution.** - • 使用 uuvpn.xcodeproj 打开项目。 - • 选择目标设备或模拟器,点击 Run 按钮。 +```bash +# Dependencies will be automatically resolved when opening the project +``` -## 重要说明 +### 3. Open Project in Xcode -在使用该项目之前,必须阅读部署文档 iOS-SwiftUI部署文档教程.docx,文档内容包括: - • 应用的完整部署流程 - • 关键技术实现说明 - • 可能遇到的问题及解决方案 +```bash +open uuvpn.xcodeproj +``` -## 贡献指南 +Select your target device or simulator and click the **Run** button. -欢迎大家贡献代码,您可以通过提交 Pull Request 或 Issues 的方式提出改进建议。 +## 🔧 V2Board API Configuration -## 许可证 +### Base Configuration -本项目基于 MIT 开源许可证,详细信息请查看 LICENSE 文件。 +The application integrates with V2Board panels through a comprehensive API configuration system managed by [`StoreManager.swift`](ApplicationLibrary/Service/StoreManager.swift:17). -如有任何疑问,请联系开发团队或查阅项目文档。 +#### Configuration URL +```swift +public let configURL = "https://api.gooapis.com/api/vpnconfig.php" +``` + +### API Endpoints Configuration + +Configure the following API endpoints in your initialization response: + +```json +{ + "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 Field Descriptions + +| Field | Description | Usage | +|-------|-------------|-------| +| `baseURL` | Primary API endpoint for V2Board panel | All main API requests | +| `baseDYURL` | Default VPN node testing endpoint | Node connectivity testing | +| `mainregisterURL` | User registration page with referral code | User onboarding | +| `paymentURL` | Payment gateway URL | **Critical for App Store compliance** | +| `telegramurl` | Telegram support channel | Customer support | +| `kefuurl` | Customer service page | Online support | +| `websiteURL` | Official website URL | General information | +| `crisptoken` | Crisp chat authentication token | Live chat integration | +| `banners` | Promotional banner image URLs | Marketing content | +| `message` | Response status message | API response validation | +| `code` | Response status code | Success/error handling | + +### API Request Headers + +All API requests include the following headers for authentication and tracking: + +```swift +request.addValue("application/json", forHTTPHeaderField: "Content-Type") +request.addValue(Bundle.main.bundleIdentifier ?? "", forHTTPHeaderField: "bid") +request.addValue(UserManager.shared.appversion, forHTTPHeaderField: "appver") +``` + +## 🆔 Bundle Identifier (BID) Configuration + +### Understanding Bundle Identifier + +The Bundle Identifier (BID) is crucial for app identification and API authentication. It's referenced throughout the codebase as `Bundle.main.bundleIdentifier`. + +### Current BID Configuration + +Based on the [`Info.plist`](XiaoXiong/Info.plist:7) analysis, the current BID pattern is: +``` +com.uuvpn.appleaman +``` + +### Modifying Bundle Identifier + +To change the Bundle Identifier for your deployment: + +#### 1. Update Xcode Project Settings +1. Open `uuvpn.xcodeproj` in Xcode +2. Select the project root in the navigator +3. Choose your target (e.g., "SFI", "SFM", "SFT") +4. Navigate to **General** → **Identity** +5. Update the **Bundle Identifier** field + +#### 2. Update Info.plist References +Search and replace all BID references in configuration files: + +```bash +# Search for current BID references +grep -r "com.uuvpn.appleaman" . + +# Update the following files: +# - XiaoXiong/Info.plist +# - Extension/Info.plist +# - SystemExtension/Info.plist +# - IntentsExtension/Info.plist +``` + +#### 3. Update Code References +The BID is automatically retrieved via `Bundle.main.bundleIdentifier` in: +- [`Login.swift`](XiaoXiong/DefaultUI/View/LoginView/Login.swift:494) +- [`HomeView.swift`](XiaoXiong/DefaultUI/View/HomeView.swift:984) + +No code changes required as it uses the system bundle identifier. + +### BID Validation in API + +The server can validate requests using the BID header to ensure API calls come from authorized applications. + +## 💳 Payment URL Logic & App Store Compliance + +### Payment URL Length Detection + +The application implements intelligent payment handling based on the `paymentURL` field length: + +```swift +// Apple Review Mode Detection +if (paymentURLKey.count > 3) { + // Normal payment mode - show external payment options + // Enable subscription features + // Show payment buttons and pricing +} else { + // Apple Review Mode - hide external payments + // Comply with App Store guidelines + // Hide sensitive payment information +} +``` + +### Implementation Details + +#### Normal Mode (paymentURL.length > 3) +- **External Payment**: Direct users to web-based payment systems +- **Full Feature Access**: All subscription features available +- **Payment Integration**: Complete payment flow with external providers + +#### Apple Review Mode (paymentURL.length ≤ 3) +- **Compliance Mode**: Hides external payment options +- **Limited Features**: Restricted functionality during review +- **App Store Guidelines**: Complies with Apple's payment policies + +### Code Implementation + +The logic is implemented across multiple view files: + +- [`HomeView.swift`](XiaoXiong/DefaultUI/View/HomeView.swift:125): Main payment UI logic +- [`SideMenuView.swift`](XiaoXiong/DefaultUI/View/SideMenuView.swift:119): Menu payment options +- [`ActiveDashboardViewNewUI.swift`](XiaoXiong/DefaultUI/View/ActiveDashboardViewNewUI.swift:217): Dashboard payment handling + +### Server-Side Configuration + +Configure your initialization endpoint to return: + +```json +{ + "paymentURL": "https://your-payment-gateway.com/pay", // Normal mode + // OR + "paymentURL": "xx", // Apple review mode +} +``` + +## 🔄 Initialization Endpoint Configuration + +### Endpoint Setup + +The application fetches configuration from a remote endpoint on startup. This allows dynamic configuration without app updates. + +#### Recommended Hosting +- **Alibaba Cloud OSS**: Faster response times in China +- **CDN Integration**: Global content delivery +- **HTTPS Required**: Secure configuration delivery + +### Configuration Response Format + +```json +{ + "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 +} +``` + +### Error Handling + +```json +{ + "message": "Configuration Error", + "code": 0, + "error": "Invalid request" +} +``` + +### Caching Strategy + +The [`StoreManager`](ApplicationLibrary/Service/StoreManager.swift) implements local caching: + +```swift +// Configuration is cached locally using UserDefaults +func storebaseURLData(data: String) { + defaults.set(data, forKey: "baseURLKey") + defaults.synchronize() +} +``` + +## 🔐 Security Considerations + +### API Security +- **HTTPS Only**: All API endpoints must use HTTPS +- **Token Validation**: Implement proper token validation +- **Rate Limiting**: Protect against API abuse + +### Bundle Identifier Security +- **Unique BID**: Use a unique bundle identifier for your deployment +- **Server Validation**: Validate BID on server-side for API requests +- **Certificate Pinning**: Consider implementing certificate pinning + +## 🚀 Deployment Guide + +### Pre-Deployment Checklist + +1. **Update Bundle Identifier**: Change from default BID +2. **Configure API Endpoints**: Set up your V2Board panel URLs +3. **Test Payment Logic**: Verify both normal and review modes +4. **Update App Icons**: Replace default icons with your branding +5. **Configure Push Notifications**: Set up notification certificates + +### Build Configuration + +```bash +# Clean build folder +rm -rf ~/Library/Developer/Xcode/DerivedData + +# Archive for distribution +xcodebuild archive \ + -project uuvpn.xcodeproj \ + -scheme YourSchemeName \ + -archivePath YourApp.xcarchive +``` + +## 🤝 Contributing + +We welcome contributions to improve the application. Please follow these guidelines: + +1. Fork the repository +2. Create a feature branch +3. Make your changes +4. Submit a pull request + +## 📄 License + +This project is licensed under the MIT License. See the LICENSE file for details. + +## 📞 Support + +For technical support and questions: + +- **GitHub Issues**: [Create an issue](https://github.com/nicolastinkl/UUVPN/issues) +- **Documentation**: Refer to the deployment documentation in the project +- **Community**: Join our developer community for assistance + +--- + +**Note**: This application requires proper V2Board panel setup and valid API endpoints to function correctly. Ensure your backend infrastructure is properly configured before deployment. diff --git a/iOS-SwiftUI-Code/README_CN.md b/iOS-SwiftUI-Code/README_CN.md new file mode 100644 index 0000000..bde66b4 --- /dev/null +++ b/iOS-SwiftUI-Code/README_CN.md @@ -0,0 +1,343 @@ +# UUVPN iOS SwiftUI 应用程序 + +一个专业的 iOS VPN 应用程序,使用 SwiftUI 构建,专为与 V2Board 面板 API 无缝集成而设计。该应用程序为 VPN 管理提供现代化、直观的界面和全面的配置选项。 + +## 🚀 功能特性 + +- **现代化 SwiftUI 界面**:响应式设计,适配不同屏幕尺寸 +- **深色/浅色模式支持**:与系统主题自动同步 +- **V2Board API 集成**:与 V2Board 面板 API 完整集成 +- **网络管理**:使用 `URLSession` 的高级网络功能 +- **后台更新**:通过后台任务调度自动更新配置文件 +- **多平台支持**:iOS 15.0+ 并兼容 macOS + +## 📋 环境要求 + +在开始之前,请确保您的开发环境满足以下要求: + +- **Xcode**:14.0 或更高版本 +- **iOS 部署目标**:15.0 或更高版本 +- **Swift**:5.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. 克隆仓库 + +```bash +git clone https://github.com/nicolastinkl/UUVPN/tree/main/iOS-SwiftUI-Code +cd iOS-SwiftUI-Code +``` + +### 2. 安装依赖 + +项目使用 Swift Package Manager 进行依赖管理。**注意:需要 VPN 连接才能解析包。** + +```bash +# 打开项目时会自动解析依赖项 +``` + +### 3. 在 Xcode 中打开项目 + +```bash +open uuvpn.xcodeproj +``` + +选择目标设备或模拟器,然后点击 **运行** 按钮。 + +## 🔧 V2Board API 配置 + +### 基础配置 + +应用程序通过由 [`StoreManager.swift`](ApplicationLibrary/Service/StoreManager.swift:17) 管理的综合 API 配置系统与 V2Board 面板集成。 + +#### 配置 URL +```swift +public let configURL = "https://api.gooapis.com/api/vpnconfig.php" +``` + +### API 端点配置 + +在初始化响应中配置以下 API 端点: + +```json +{ + "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 请求都包含以下用于身份验证和跟踪的请求头: + +```swift +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`](XiaoXiong/Info.plist:7) 分析,当前 BID 模式为: +``` +com.uuvpn.appleaman +``` + +### 修改 Bundle Identifier + +要为您的部署更改 Bundle Identifier: + +#### 1. 更新 Xcode 项目设置 +1. 在 Xcode 中打开 `uuvpn.xcodeproj` +2. 在导航器中选择项目根目录 +3. 选择您的目标(例如 "SFI"、"SFM"、"SFT") +4. 导航到 **General** → **Identity** +5. 更新 **Bundle Identifier** 字段 + +#### 2. 更新 Info.plist 引用 +在配置文件中搜索并替换所有 BID 引用: + +```bash +# 搜索当前 BID 引用 +grep -r "com.uuvpn.appleaman" . + +# 更新以下文件: +# - XiaoXiong/Info.plist +# - Extension/Info.plist +# - SystemExtension/Info.plist +# - IntentsExtension/Info.plist +``` + +#### 3. 更新代码引用 +BID 通过以下文件中的 `Bundle.main.bundleIdentifier` 自动获取: +- [`Login.swift`](XiaoXiong/DefaultUI/View/LoginView/Login.swift:494) +- [`HomeView.swift`](XiaoXiong/DefaultUI/View/HomeView.swift:984) + +由于使用系统 bundle identifier,无需更改代码。 + +### API 中的 BID 验证 + +服务器可以使用 BID 头验证请求,确保 API 调用来自授权应用程序。 + +## 💳 支付 URL 逻辑与 App Store 合规性 + +### 支付 URL 长度检测 + +应用程序基于 `paymentURL` 字段长度实现智能支付处理: + +```swift +// Apple 审核模式检测 +if (paymentURLKey.count > 3) { + // 正常支付模式 - 显示外部支付选项 + // 启用订阅功能 + // 显示支付按钮和价格 +} else { + // Apple 审核模式 - 隐藏外部支付 + // 符合 App Store 指南 + // 隐藏敏感支付信息 +} +``` + +### 实现详情 + +#### 正常模式 (paymentURL.length > 3) +- **外部支付**:引导用户到基于网页的支付系统 +- **完整功能访问**:所有订阅功能可用 +- **支付集成**:与外部提供商的完整支付流程 + +#### Apple 审核模式 (paymentURL.length ≤ 3) +- **合规模式**:隐藏外部支付选项 +- **功能限制**:审核期间功能受限 +- **App Store 指南**:符合 Apple 的支付政策 + +### 代码实现 + +该逻辑在多个视图文件中实现: + +- [`HomeView.swift`](XiaoXiong/DefaultUI/View/HomeView.swift:125):主要支付 UI 逻辑 +- [`SideMenuView.swift`](XiaoXiong/DefaultUI/View/SideMenuView.swift:119):菜单支付选项 +- [`ActiveDashboardViewNewUI.swift`](XiaoXiong/DefaultUI/View/ActiveDashboardViewNewUI.swift:217):仪表板支付处理 + +### 服务器端配置 + +配置您的初始化端点返回: + +```json +{ + "paymentURL": "https://your-payment-gateway.com/pay", // 正常模式 + // 或者 + "paymentURL": "xx", // Apple 审核模式 +} +``` + +## 🔄 初始化端点配置 + +### 端点设置 + +应用程序在启动时从远程端点获取配置。这允许动态配置而无需应用程序更新。 + +#### 推荐托管 +- **阿里云 OSS**:在中国响应时间更快 +- **CDN 集成**:全球内容分发 +- **需要 HTTPS**:安全配置传输 + +### 配置响应格式 + +```json +{ + "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 +} +``` + +### 错误处理 + +```json +{ + "message": "Configuration Error", + "code": 0, + "error": "Invalid request" +} +``` + +### 缓存策略 + +[`StoreManager`](ApplicationLibrary/Service/StoreManager.swift) 实现本地缓存: + +```swift +// 配置使用 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. **配置推送通知**:设置通知证书 + +### 构建配置 + +```bash +# 清理构建文件夹 +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**:[创建问题](https://github.com/nicolastinkl/UUVPN/issues) +- **文档**:参考项目中的部署文档 +- **社区**:加入我们的开发者社区获取帮助 + +--- + +**注意**:此应用程序需要正确的 V2Board 面板设置和有效的 API 端点才能正常运行。请确保在部署前正确配置您的后端基础设施。 \ No newline at end of file diff --git a/iOS-SwiftUI-Code/SystemExtension/Info.plist b/iOS-SwiftUI-Code/SystemExtension/Info.plist index e49a04d..9918d6b 100644 --- a/iOS-SwiftUI-Code/SystemExtension/Info.plist +++ b/iOS-SwiftUI-Code/SystemExtension/Info.plist @@ -5,7 +5,7 @@ NetworkExtension NEMachServiceName - group.com.uuvpn.apple.system + group.com.uuvpn.appleaman.system NEProviderClasses com.apple.networkextension.packet-tunnel diff --git a/iOS-SwiftUI-Code/SystemExtension/SystemExtension.entitlements b/iOS-SwiftUI-Code/SystemExtension/SystemExtension.entitlements index 179292c..dfe167b 100644 --- a/iOS-SwiftUI-Code/SystemExtension/SystemExtension.entitlements +++ b/iOS-SwiftUI-Code/SystemExtension/SystemExtension.entitlements @@ -8,7 +8,7 @@ com.apple.security.application-groups - group.com.uuvpn.apple + group.com.uuvpn.appleaman com.apple.security.app-sandbox diff --git a/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/Network/UserManager.swift b/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/Network/UserManager.swift index 4cd1a3a..d8a1778 100644 --- a/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/Network/UserManager.swift +++ b/iOS-SwiftUI-Code/XiaoXiong/DefaultUI/Network/UserManager.swift @@ -13,7 +13,7 @@ import Foundation class UserManager { static let shared = UserManager() - public let configURL = "https://xxx.ocm/config.json" + public let configURL = "https://api.gooapis.com/api/yaya/" public let appversion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "1.0.0" diff --git a/iOS-SwiftUI-Code/XiaoXiong/Info.plist b/iOS-SwiftUI-Code/XiaoXiong/Info.plist index 01646c7..89ce582 100644 --- a/iOS-SwiftUI-Code/XiaoXiong/Info.plist +++ b/iOS-SwiftUI-Code/XiaoXiong/Info.plist @@ -4,7 +4,7 @@ BGTaskSchedulerPermittedIdentifiers - com.uuvpn.apple.update_profiles + com.uuvpn.appleaman.update_profiles CFBundleDocumentTypes @@ -19,7 +19,7 @@ Owner LSItemContentTypes - com.uuvpn.apple.profile + com.uuvpn.appleaman.profile @@ -57,7 +57,7 @@ NSUbiquitousContainers - iCloud.com.uuvpn.apple + iCloud.com.uuvpn.appleaman NSUbiquitousContainerIsDocumentScopePublic @@ -85,7 +85,7 @@ UTTypeIconFiles UTTypeIdentifier - com.uuvpn.apple.profile + com.uuvpn.appleaman.profile UTTypeTagSpecification public.filename-extension @@ -111,7 +111,7 @@ AppIcon.icns UTTypeIdentifier - com.uuvpn.apple.profile + com.uuvpn.appleaman.profile UTTypeTagSpecification public.filename-extension diff --git a/iOS-SwiftUI-Code/XiaoXiong/SFI.entitlements b/iOS-SwiftUI-Code/XiaoXiong/SFI.entitlements index 5e0d4cf..69a0ec2 100644 --- a/iOS-SwiftUI-Code/XiaoXiong/SFI.entitlements +++ b/iOS-SwiftUI-Code/XiaoXiong/SFI.entitlements @@ -4,7 +4,7 @@ com.apple.developer.icloud-container-identifiers - iCloud.com.uuvpn.apple + iCloud.com.uuvpn.appleaman com.apple.developer.icloud-services @@ -16,11 +16,11 @@ com.apple.developer.ubiquity-container-identifiers - iCloud.com.uuvpn.apple + iCloud.com.uuvpn.appleaman com.apple.security.application-groups - group.com.uuvpn.apple + group.com.uuvpn.appleaman diff --git a/iOS-SwiftUI-Code/iOS-SwiftUI部署文档教程.docx b/iOS-SwiftUI-Code/iOS-SwiftUI部署文档教程.docx deleted file mode 100644 index f99a317..0000000 Binary files a/iOS-SwiftUI-Code/iOS-SwiftUI部署文档教程.docx and /dev/null differ diff --git a/iOS-SwiftUI-Code/image-1.png b/iOS-SwiftUI-Code/image-1.png new file mode 100644 index 0000000..db06b65 Binary files /dev/null and b/iOS-SwiftUI-Code/image-1.png differ diff --git a/iOS-SwiftUI-Code/image-2.png b/iOS-SwiftUI-Code/image-2.png new file mode 100644 index 0000000..3b28482 Binary files /dev/null and b/iOS-SwiftUI-Code/image-2.png differ diff --git a/iOS-SwiftUI-Code/image.png b/iOS-SwiftUI-Code/image.png new file mode 100644 index 0000000..610b21a Binary files /dev/null and b/iOS-SwiftUI-Code/image.png differ diff --git a/iOS-SwiftUI-Code/uuvpn.xcodeproj/project.pbxproj b/iOS-SwiftUI-Code/uuvpn.xcodeproj/project.pbxproj index a90e99b..a3f80b4 100644 --- a/iOS-SwiftUI-Code/uuvpn.xcodeproj/project.pbxproj +++ b/iOS-SwiftUI-Code/uuvpn.xcodeproj/project.pbxproj @@ -436,7 +436,7 @@ 3AEC214B2A45AA8E00A63465 /* FilePath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilePath.swift; sourceTree = ""; }; 3AEC21742A45B0B800A63465 /* NavigationPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationPage.swift; sourceTree = ""; }; 3AEC21782A45BA5300A63465 /* EnvironmentValues.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnvironmentValues.swift; sourceTree = ""; }; - 3AEECBF12A6DF40A006A0E0C /* com.uuvpn.apple.system.systemextension */ = {isa = PBXFileReference; explicitFileType = "wrapper.system-extension"; includeInIndex = 0; path = com.uuvpn.apple.system.systemextension; sourceTree = BUILT_PRODUCTS_DIR; }; + 3AEECBF12A6DF40A006A0E0C /* com.uuvpn.appleaman.system.systemextension */ = {isa = PBXFileReference; explicitFileType = "wrapper.system-extension"; includeInIndex = 0; path = com.uuvpn.appleaman.system.systemextension; sourceTree = BUILT_PRODUCTS_DIR; }; 3AEECBF42A6DF40A006A0E0C /* PacketTunnelProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PacketTunnelProvider.swift; sourceTree = ""; }; 3AEECBF62A6DF40A006A0E0C /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; 3AEECBF82A6DF40A006A0E0C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -717,7 +717,7 @@ 3A77016D2A4E6B34008F031F /* IntentsExtension.appex */, 3A096F862A4ED3DE00D4A2ED /* Extension.appex */, 3A4EAD102A4FEAE6005435B3 /* ApplicationLibrary.framework */, - 3AEECBF12A6DF40A006A0E0C /* com.uuvpn.apple.system.systemextension */, + 3AEECBF12A6DF40A006A0E0C /* com.uuvpn.appleaman.system.systemextension */, 3AEECC2F2A6DFDAD006A0E0C /* MacLibrary.framework */, ); name = Products; @@ -1104,7 +1104,7 @@ ); name = SystemExtension; productName = SystemExtension; - productReference = 3AEECBF12A6DF40A006A0E0C /* com.uuvpn.apple.system.systemextension */; + productReference = 3AEECBF12A6DF40A006A0E0C /* com.uuvpn.appleaman.system.systemextension */; productType = "com.apple.product-type.system-extension"; }; 3AEECC2E2A6DFDAD006A0E0C /* MacLibrary */ = { @@ -1496,7 +1496,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = SQATMWM798; + DEVELOPMENT_TEAM = BV8P95Z793; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Extension/Info.plist; @@ -1512,7 +1512,7 @@ MACOSX_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; OTHER_CODE_SIGN_FLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.apple.extension; + PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.appleaman.extension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = macosx; @@ -1536,7 +1536,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = SQATMWM798; + DEVELOPMENT_TEAM = BV8P95Z793; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Extension/Info.plist; @@ -1552,7 +1552,7 @@ MACOSX_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; OTHER_CODE_SIGN_FLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.apple.extension; + PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.appleaman.extension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = macosx; @@ -1594,7 +1594,7 @@ MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; - PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.apple.application; + PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.appleaman.application; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; @@ -1637,7 +1637,7 @@ MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; - PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.apple.application; + PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.appleaman.application; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; @@ -1659,7 +1659,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = SQATMWM798; + DEVELOPMENT_TEAM = BV8P95Z793; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = IntentsExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = IntentsExtension; @@ -1675,7 +1675,7 @@ MACOSX_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; OTHER_CODE_SIGN_FLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.apple.intents; + PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.appleaman.intents; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; REEXPORTED_LIBRARY_PATHS = ""; @@ -1698,7 +1698,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = SQATMWM798; + DEVELOPMENT_TEAM = BV8P95Z793; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = IntentsExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = IntentsExtension; @@ -1714,7 +1714,7 @@ MACOSX_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.0; OTHER_CODE_SIGN_FLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.apple.intents; + PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.appleaman.intents; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; REEXPORTED_LIBRARY_PATHS = ""; @@ -1871,7 +1871,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 51; DEVELOPMENT_ASSET_PATHS = ""; - DEVELOPMENT_TEAM = SQATMWM798; + DEVELOPMENT_TEAM = BV8P95Z793; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = XiaoXiong/Info.plist; @@ -1895,7 +1895,7 @@ ); MARKETING_VERSION = 1.1.0; OTHER_CODE_SIGN_FLAGS = "--deep"; - PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.apple; + PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.appleaman; PRODUCT_NAME = uuvpn; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; @@ -1919,7 +1919,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 51; DEVELOPMENT_ASSET_PATHS = ""; - DEVELOPMENT_TEAM = SQATMWM798; + DEVELOPMENT_TEAM = BV8P95Z793; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = XiaoXiong/Info.plist; @@ -1943,7 +1943,7 @@ ); MARKETING_VERSION = 1.1.0; OTHER_CODE_SIGN_FLAGS = "--deep"; - PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.apple; + PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.appleaman; PRODUCT_NAME = uuvpn; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; @@ -1967,7 +1967,7 @@ CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = YES; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = SQATMWM798; + DEVELOPMENT_TEAM = BV8P95Z793; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -1988,7 +1988,7 @@ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; OTHER_CODE_SIGN_FLAGS = "--deep"; - PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.apple.library; + PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.appleaman.library; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = macosx; @@ -2016,7 +2016,7 @@ CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = YES; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = SQATMWM798; + DEVELOPMENT_TEAM = BV8P95Z793; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -2037,7 +2037,7 @@ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; OTHER_CODE_SIGN_FLAGS = "--deep"; - PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.apple.library; + PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.appleaman.library; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = macosx; @@ -2060,7 +2060,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = SQATMWM798; + DEVELOPMENT_TEAM = BV8P95Z793; ENABLE_HARDENED_RUNTIME = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -2075,7 +2075,7 @@ ); MACOSX_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.9.6; - PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.apple.system; + PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.appleaman.system; PRODUCT_NAME = "$(inherited)"; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = macosx; @@ -2093,7 +2093,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = SQATMWM798; + DEVELOPMENT_TEAM = BV8P95Z793; ENABLE_HARDENED_RUNTIME = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -2108,7 +2108,7 @@ ); MACOSX_DEPLOYMENT_TARGET = 13.0; MARKETING_VERSION = 1.9.6; - PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.apple.system; + PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.appleaman.system; PRODUCT_NAME = "$(inherited)"; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = macosx; @@ -2147,7 +2147,7 @@ MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; - PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.apple.macapp; + PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.appleaman.macapp; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = macosx; @@ -2187,7 +2187,7 @@ MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; - PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.apple.macapp; + PRODUCT_BUNDLE_IDENTIFIER = com.uuvpn.appleaman.macapp; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = macosx;