Chuyển đến nội dung chính

Thiết lập Phát triển

Hướng dẫn này sẽ giúp bạn thiết lập môi trường phát triển để build và đóng góp cho TablePro.

Yêu cầu

Trước khi bắt đầu, đảm bảo bạn đã cài đặt những thứ sau:

Phần mềm bắt buộc

Phần mềmPhiên bảnMục đích
macOS13.5+ (Ventura)Nền tảng target
Xcode15.0+Development IDE
GitLatestVersion control

Công cụ tùy chọn

Công cụMục đích
SwiftLintCode linting
SwiftFormatCode formatting
HomebrewPackage management

Bắt đầu

Bước 1: Clone Repository

git clone https://github.com/datlechin/tablepro.git
cd tablepro

Bước 2: Cài đặt Development Tools

Cài đặt SwiftLint và SwiftFormat cho chất lượng code:
# Sử dụng Homebrew
brew install swiftlint swiftformat

Bước 3: Mở trong Xcode

open TablePro.xcodeproj
Hoặc mở Xcode thủ công và chọn File > Open > điều hướng đến TablePro.xcodeproj.

Bước 4: Build và Run

  1. Chọn scheme TablePro trong Xcode
  2. Chọn My Mac làm destination
  3. Nhấn Cmd+R để build và chạy
Xcode setup

Cấu trúc dự án

tablepro
TablePro
Extensions
Resources
TableProTests
Libs
.swiftlint.yml
.swiftformat

Build

Build Phát Triển

Cho phát triển hàng ngày:
# Build cho kiến trúc hiện tại (Debug)
xcodebuild -project TablePro.xcodeproj -scheme TablePro -configuration Debug build -skipPackagePluginValidation

# Hoặc sử dụng Xcode: Cmd+B

Build Release

Cho builds sẵn sàng phân phối:
# Build cho Apple Silicon
scripts/build-release.sh arm64

# Build cho Intel
scripts/build-release.sh x86_64

# Build cho cả hai kiến trúc
scripts/build-release.sh both
Xem Building để biết hướng dẫn build chi tiết.

Chạy Tests

# Chạy tất cả tests
xcodebuild -project TablePro.xcodeproj -scheme TablePro test -skipPackagePluginValidation

# Chạy test class cụ thể
xcodebuild -project TablePro.xcodeproj -scheme TablePro test -skipPackagePluginValidation \
    -only-testing:TableProTests/TestClassName

# Chạy test method cụ thể
xcodebuild -project TablePro.xcodeproj -scheme TablePro test -skipPackagePluginValidation \
    -only-testing:TableProTests/TestClassName/testMethodName
Hoặc trong Xcode: Product > Test (Cmd+U).

Chất lượng Code

SwiftLint

Chạy SwiftLint để kiểm tra các vấn đề code:
# Kiểm tra các vấn đề
swiftlint lint

# Tự động sửa các vấn đề có thể sửa
swiftlint --fix
SwiftLint chạy tự động trong quá trình build Xcode.

SwiftFormat

Format code để khớp với phong cách dự án:
# Format tất cả code
swiftformat .

# Kiểm tra formatting mà không áp dụng
swiftformat --lint .
Chạy SwiftFormat trước khi commit để đảm bảo code style nhất quán.

Tệp cấu hình

.swiftlint.yml

Các rules và cấu hình SwiftLint:
  • Giới hạn độ dài dòng
  • Giới hạn độ phức tạp function
  • Các rules bị vô hiệu hóa
  • Các rules tùy chỉnh

.swiftformat

Các tùy chọn SwiftFormat:
  • Kiểu indentation
  • Vị trí brace
  • Thứ tự import
  • Các rules formatting khác

Workflow phát triển

Thực hiện thay đổi

  1. Tạo feature branch:
    git checkout -b feature/my-feature
    
  2. Thực hiện thay đổi của bạn
  3. Chạy linting:
    swiftlint lint
    swiftformat --lint .
    
  4. Chạy tests:
    xcodebuild -project TablePro.xcodeproj -scheme TablePro test -skipPackagePluginValidation
    
  5. Commit thay đổi của bạn:
    git add .
    git commit -m "Add my feature"
    
  6. Push và tạo pull request:
    git push origin feature/my-feature
    

Debugging

Sử dụng công cụ debugging của Xcode:
  1. Đặt breakpoints bằng cách click số dòng
  2. Sử dụng po trong debug console để in objects
  3. Sử dụng Variables View để kiểm tra state
  4. Sử dụng Console.app cho system logs

Logging

TablePro sử dụng OSLog cho debugging:
import os

private static let logger = Logger(subsystem: "com.TablePro", category: "ComponentName")

// Sử dụng
logger.debug("Connection established")
logger.info("Query executed in \(duration)s")
logger.error("Failed to connect: \(error.localizedDescription)")

Các tác vụ thông dụng

Thêm một View mới

  1. Tạo SwiftUI view trong subfolder Views/ phù hợp
  2. Tuân theo quy ước đặt tên hiện tại (FeatureNameView.swift)
  3. Sử dụng @Observable hoặc @StateObject cho quản lý state
  4. Thêm vào navigation/routing nếu cần

Thêm tính năng Database

  1. Triển khai trong driver phù hợp (MySQLDriver.swift, etc.)
  2. Thêm vào protocol DatabaseDriver nếu là generic
  3. Thêm UI trong các view components liên quan
  4. Thêm tests

Sửa đổi Settings

  1. Thêm vào struct settings phù hợp trong AppSettings.swift
  2. Cập nhật SettingsView để hiển thị setting
  3. Sử dụng setting trong toàn bộ app qua @AppStorage hoặc settings manager

Khắc Phục Sự Cố

Lỗi Build

  1. Clean build folder: Cmd+Shift+K
  2. Xóa derived data:
    rm -rf ~/Library/Developer/Xcode/DerivedData
    
  3. Đóng và mở lại Xcode
  4. Kiểm tra cập nhật Xcode

Lỗi SwiftLint

  1. Đọc kỹ error message
  2. Kiểm tra .swiftlint.yml cho cấu hình rule
  3. Sửa vấn đề hoặc vô hiệu hóa rule nếu phù hợp
  4. Chạy swiftlint --fix cho các vấn đề có thể tự động sửa

Thư viện bị thiếu

Nếu thư viện native bị thiếu:
  1. Kiểm tra thư mục Libs/
  2. Đảm bảo libmariadb_universal.a tồn tại
  3. Chạy scripts/build-release.sh để chuẩn bị thư viện

Bước tiếp theo