feat: Khởi tạo dự án Swift cơ bản với cấu hình Git và kế hoạch kiểm thử XCTest.

This commit is contained in:
Ho Ngoc Hai
2026-01-16 09:49:44 +07:00
parent 48078c3ce4
commit fa7d72ace1
3 changed files with 199 additions and 0 deletions

Submodule apps/app-client-base-swift/AppClientBaseSwift added at 9f3cfadcc3

View File

@@ -0,0 +1,33 @@
{
"configurations" : [
{
"id" : "C5F2D2E7-8F4A-4B3C-9D1E-6A5B4C3D2E1F",
"name" : "Test Scheme Action",
"options" : {
}
}
],
"defaultOptions" : {
"testTimeoutsEnabled" : true
},
"testTargets" : [
{
"parallelizable" : true,
"target" : {
"containerPath" : "container:AppClientBaseSwift.xcodeproj",
"identifier" : "AppClientBaseSwiftTests",
"name" : "AppClientBaseSwiftTests"
}
},
{
"parallelizable" : true,
"target" : {
"containerPath" : "container:AppClientBaseSwift.xcodeproj",
"identifier" : "AppClientBaseSwiftUITests",
"name" : "AppClientBaseSwiftUITests"
}
}
],
"version" : 1
}

View File

@@ -0,0 +1,165 @@
# App Client Base Swift
Ứng dụng iOS native cho nền tảng GoodGo, xây dựng bằng Swift và SwiftUI.
## 📱 Tổng quan
App client iOS native sử dụng kiến trúc MVVM với SwiftUI, tương tự như `app-client-base-net` (MAUI) nhưng dành riêng cho nền tảng Apple.
## 🛠️ Công nghệ
| Công nghệ | Phiên bản | Mục đích |
|-----------|-----------|----------|
| Swift | 5.9+ | Ngôn ngữ lập trình |
| SwiftUI | iOS 15+ | UI Framework |
| Xcode | 15+ | IDE |
| URLSession | Native | Networking |
| Keychain | Native | Secure Storage |
## 📂 Cấu trúc thư mục
```
AppClientBaseSwift/
├── App/
│ └── AppClientBaseSwiftApp.swift # @main entry point
├── Core/
│ ├── Constants/
│ │ └── Constants.swift # App-wide constants
│ └── Extensions/
│ ├── View+Extensions.swift # SwiftUI View helpers
│ └── String+Extensions.swift # String utilities
├── Models/
│ └── User.swift # User data model
├── ViewModels/
│ └── HomeViewModel.swift # MVVM ViewModel
├── Views/
│ └── Screens/
│ ├── ContentView.swift # Main tab container
│ ├── WelcomeView.swift # Onboarding screen
│ ├── HomeView.swift # Home tab
│ ├── ExploreView.swift # Explore tab
│ └── ProfileView.swift # Profile tab
├── Services/
│ ├── APIService.swift # HTTP client
│ └── AuthManager.swift # Authentication
├── Resources/
│ ├── Assets.xcassets/ # Images & Colors
│ ├── en.lproj/ # English strings
│ └── vi.lproj/ # Vietnamese strings
└── Info.plist # App configuration
```
## 🚀 Bắt đầu
### Yêu cầu
- macOS 14.0+ (Sonoma)
- Xcode 15.0+
- iOS 15.0+ target
### Mở project
1. Mở Xcode
2. Chọn **File > Open** hoặc nhấn `⌘O`
3. Chọn thư mục `app-client-base-swift`
4. Build và chạy trên Simulator (`⌘R`)
### Tạo Xcode Project (Nếu chưa có)
Do project này chỉ chứa source files, bạn cần tạo Xcode project:
```bash
# Mở Xcode và tạo project mới
# 1. File > New > Project
# 2. Chọn "App" template
# 3. Product Name: AppClientBaseSwift
# 4. Team: Chọn team của bạn
# 5. Organization Identifier: vn.goodgo
# 6. Interface: SwiftUI
# 7. Language: Swift
# 8. Lưu vào thư mục app-client-base-swift
# 9. Xóa các file generated và thay thế bằng files trong thư mục này
```
## 🎨 Kiến trúc
### MVVM Pattern
```
┌─────────────────────────────────────────────────────────────┐
│ VIEW (SwiftUI) │
│ ContentView, HomeView, ExploreView, ProfileView │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────┐ │
│ │ @StateObject │ │
│ │ @EnvironmentObject │ │
│ └──────────────────────────────────┘ │
│ │ │
├────────────────────────────▼────────────────────────────────┤
│ VIEWMODEL │
│ HomeViewModel (ObservableObject) │
│ - @Published properties │
│ - async/await methods │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────┐ │
│ │ Protocol / Dependency │ │
│ │ Injection │ │
│ └──────────────────────────────────┘ │
│ │ │
├────────────────────────────▼────────────────────────────────┤
│ SERVICES │
│ APIService, AuthManager │
└─────────────────────────────────────────────────────────────┘
```
### Key Features
- **SwiftUI**: UI declarative hiện đại
- **Async/Await**: Xử lý bất đồng bộ native
- **Keychain**: Lưu trữ token bảo mật
- **Localization**: Hỗ trợ đa ngôn ngữ (VI/EN)
- **Dark Mode**: Hỗ trợ giao diện tối
## 📋 Conventions
### Coding Style
```swift
// ViewModel vi ObservableObject
@MainActor
class HomeViewModel: ObservableObject {
@Published var isLoading: Bool = false
func loadData() async {
// Async data loading
}
}
// View vi MVVM binding
struct HomeView: View {
@StateObject private var viewModel = HomeViewModel()
var body: some View {
// SwiftUI body
}
}
```
### Comments (Bilingual)
```swift
/// Load home screen data
/// Ti d liu màn hình home
func loadData() async { }
```
## 🔗 Liên kết
- [app-client-base-net](../app-client-base-net) - .NET MAUI client
- [web-client](../web-client) - Web client
## 📄 License
Copyright © 2026 GoodGo. All rights reserved.