- Preview
- About
- Features
- Architecture
- Technical Details
- Project Structure
- Requirements
- Installation
- Usage
- Testing
- Design Patterns
- Contributing
- License
- Authors
- Acknowledgments
The Countries is a sophisticated iOS application demonstrating advanced software architecture, concurrent programming, and modern iOS development practices. Built with Clean Architecture principles, the app showcases enterprise-level architecture decisions, robust error handling, and efficient resource management.
- 🔍 Display and manage countries list (max 5)
- 🔎 Advanced country search functionality
- 📍 Location-based country detection
- 💾 Offline support with sophisticated caching
- ⚡ Swipe-to-delete functionality
- 🎨 Clean and responsive UI
Implements Clean Architecture with three distinct modules:
- Domain Models with thread-safety
- Use Cases with caching strategies
- Location Services with actor isolation
- Repository Interfaces with error handling
- Custom URLSession networking stack
- Thread-safe local storage using actors
- Repository implementation with caching
- Comprehensive error handling
- MVVM architecture with SwiftUI
- Reactive UI with Combine
- Thread-safe operations
- Type-safe navigation
- Actor-based isolation
- async/await implementation
- MainActor annotations
- Race condition prevention
- Resource cleanup protocols
- Cache eviction policies
- Memory leak prevention
- Reference cycle handling
- Comprehensive error types
- Recovery mechanisms
- Logging infrastructure
- User-friendly presentation
TheCountries/
├── Core/ # Domain Layer
├── Data/ # Data Layer
├── Presentation/ # UI Layer
└── TheCountries/ # Main App
- iOS 16.0+
- Xcode 15.0+
- Swift 6.0
- Clone the repository
git clone https://github.com/yourusername/TheCountries.git
- Open the project in Xcode
cd TheCountries
open TheCountries.xcodeproj
- Build and run the project
- Launch the app
- Browse available countries
- Search for specific countries
- View country details
- Enable location services for local detection
Comprehensive test coverage including:
- Unit Tests
Run tests using:
xcodebuild test -scheme TheCountries -destination 'platform=iOS Simulator,name=iPhone 15'
- Clean Architecture
- MVVM
- Repository Pattern
- Coordinator Pattern
- Factory Pattern
- Observer Pattern
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details
- @mohammed-salah-zidane - Initial work
- Hat tip to anyone whose code was used
- Inspiration
- References