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;