update IOS guide

update IOS guide
This commit is contained in:
zeus
2025-08-02 06:42:45 +08:00
parent 69411c73a8
commit 311dbf71d4
16 changed files with 709 additions and 86 deletions
@@ -4,7 +4,7 @@
<dict>
<key>com.apple.developer.icloud-container-identifiers</key>
<array>
<string>iCloud.com.uuvpn.apple</string>
<string>iCloud.com.uuvpn.appleaman</string>
</array>
<key>com.apple.developer.icloud-services</key>
<array>
@@ -18,13 +18,13 @@
<true/>
<key>com.apple.developer.ubiquity-container-identifiers</key>
<array>
<string>iCloud.com.uuvpn.apple</string>
<string>iCloud.com.uuvpn.appleaman</string>
</array>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.uuvpn.apple</string>
<string>group.com.uuvpn.appleaman</string>
</array>
<key>com.apple.security.network.client</key>
<true/>
@@ -6,7 +6,7 @@
<true/>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.uuvpn.apple</string>
<string>group.com.uuvpn.appleaman</string>
</array>
<key>com.apple.security.network.client</key>
<true/>
@@ -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") }
}
@@ -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 {
+322 -42
View File
@@ -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.
+343
View File
@@ -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 端点才能正常运行。请确保在部署前正确配置您的后端基础设施。
+1 -1
View File
@@ -5,7 +5,7 @@
<key>NetworkExtension</key>
<dict>
<key>NEMachServiceName</key>
<string>group.com.uuvpn.apple.system</string>
<string>group.com.uuvpn.appleaman.system</string>
<key>NEProviderClasses</key>
<dict>
<key>com.apple.networkextension.packet-tunnel</key>
@@ -8,7 +8,7 @@
</array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.uuvpn.apple</string>
<string>group.com.uuvpn.appleaman</string>
</array>
<key>com.apple.security.app-sandbox</key>
<false/>
@@ -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"
+5 -5
View File
@@ -4,7 +4,7 @@
<dict>
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
<string>com.uuvpn.apple.update_profiles</string>
<string>com.uuvpn.appleaman.update_profiles</string>
</array>
<key>CFBundleDocumentTypes</key>
<array>
@@ -19,7 +19,7 @@
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.uuvpn.apple.profile</string>
<string>com.uuvpn.appleaman.profile</string>
</array>
</dict>
</array>
@@ -57,7 +57,7 @@
</dict>
<key>NSUbiquitousContainers</key>
<dict>
<key>iCloud.com.uuvpn.apple</key>
<key>iCloud.com.uuvpn.appleaman</key>
<dict>
<key>NSUbiquitousContainerIsDocumentScopePublic</key>
<true/>
@@ -85,7 +85,7 @@
<key>UTTypeIconFiles</key>
<array/>
<key>UTTypeIdentifier</key>
<string>com.uuvpn.apple.profile</string>
<string>com.uuvpn.appleaman.profile</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
@@ -111,7 +111,7 @@
<string>AppIcon.icns</string>
</array>
<key>UTTypeIdentifier</key>
<string>com.uuvpn.apple.profile</string>
<string>com.uuvpn.appleaman.profile</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
+3 -3
View File
@@ -4,7 +4,7 @@
<dict>
<key>com.apple.developer.icloud-container-identifiers</key>
<array>
<string>iCloud.com.uuvpn.apple</string>
<string>iCloud.com.uuvpn.appleaman</string>
</array>
<key>com.apple.developer.icloud-services</key>
<array>
@@ -16,11 +16,11 @@
</array>
<key>com.apple.developer.ubiquity-container-identifiers</key>
<array>
<string>iCloud.com.uuvpn.apple</string>
<string>iCloud.com.uuvpn.appleaman</string>
</array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.uuvpn.apple</string>
<string>group.com.uuvpn.appleaman</string>
</array>
</dict>
</plist>
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 331 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 KiB

@@ -436,7 +436,7 @@
3AEC214B2A45AA8E00A63465 /* FilePath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilePath.swift; sourceTree = "<group>"; };
3AEC21742A45B0B800A63465 /* NavigationPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationPage.swift; sourceTree = "<group>"; };
3AEC21782A45BA5300A63465 /* EnvironmentValues.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnvironmentValues.swift; sourceTree = "<group>"; };
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 = "<group>"; };
3AEECBF62A6DF40A006A0E0C /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
3AEECBF82A6DF40A006A0E0C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@@ -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;