A comprehensive trip planning application built with SwiftUI for iOS 17+. SmartTripPlanner helps users organize trips, plan itineraries, manage packing lists, store travel documents, and integrate with calendar, weather, and location services.
- Trip Management: Create, organize, and manage multiple trips
- Itinerary Planner: Plan daily activities with calendar integration
- Interactive Maps: View destinations and navigate with Apple Maps
- Packing Lists: Create and manage packing checklists
- Document Storage: Store travel documents, tickets, and reservations
- Weather Integration: Get weather forecasts using WeatherKit
- iCloud Sync: Sync data across devices with CloudKit
- Gmail Integration: Import trip confirmations from email
- Calendar Integration: Sync trip events with Calendar app
- Photo Library: Save trip photos and documents
- iOS 17.0+
- Xcode 15.0+
- Swift 5.9+
- Apple Developer Account (for WeatherKit, CloudKit, and provisioning)
- macOS 14+ (for development)
The app follows a modular architecture with clear separation of concerns:
SmartTripPlanner/
├── Core/ # Core app functionality
│ ├── DependencyContainer.swift # Service injection
│ ├── AppEnvironment.swift # Global app state
│ └── NavigationCoordinator.swift # Navigation management
├── Features/ # Feature modules
│ ├── Trips/ # Trip management
│ ├── Planner/ # Itinerary planning
│ ├── Map/ # Map integration
│ ├── Packing/ # Packing lists
│ ├── Docs/ # Document storage
│ └── Settings/ # App settings
├── Services/ # Business logic services
│ ├── WeatherService.swift # WeatherKit integration
│ ├── MapsService.swift # MapKit integration
│ ├── CalendarService.swift # EventKit integration
│ ├── EmailService.swift # Gmail integration
│ ├── ExportService.swift # PDF/JSON export
│ └── SyncService.swift # CloudKit sync
├── UIComponents/ # Reusable UI components
├── DesignSystem/ # Theme and styling
│ └── Theme.swift
└── Assets.xcassets/ # Images and colors
git clone https://github.com/yourusername/SmartTripPlanner.git
cd SmartTripPlanner- Log in to Apple Developer Portal
- Go to Certificates, Identifiers & Profiles
- Select your App ID (com.smarttripplanner.SmartTripPlanner)
- Enable WeatherKit capability
- Save and regenerate provisioning profiles
- In Apple Developer Portal, configure App ID with:
- iCloud capability
- CloudKit containers
- Create iCloud container:
iCloud.com.smarttripplanner.SmartTripPlanner - Enable Private Database and Shared Database in CloudKit Dashboard
- Configure CloudKit Schema (optional, can be done automatically)
- Enable Background Modes in App ID
- Check:
- Background fetch
- Remote notifications
- Background processing
- Create development provisioning profile with all capabilities enabled
- Download and install profile in Xcode
- Update
DEVELOPMENT_TEAMin project settings
- Copy
.env.exampleto.env:
cp .env.example .env- Update
.envwith your credentials:
APPLE_ID=your.email@example.com
TEAM_ID=YOUR_TEAM_ID
ITC_TEAM_ID=YOUR_ITC_TEAM_ID
GOOGLE_CLIENT_ID=YOUR_GOOGLE_CLIENT_ID.apps.googleusercontent.com- Go to Google Cloud Console
- Create a new project or select existing
- Enable Gmail API
- Create OAuth 2.0 credentials:
- Application type: iOS
- Bundle ID:
com.smarttripplanner.SmartTripPlanner
- Download OAuth client configuration
- Update
Info.plistwith your client ID:- Replace
YOUR-CLIENT-IDinCFBundleURLSchemes
- Replace
The following privacy descriptions are already included in Info.plist:
- NSCalendarsUsageDescription: Calendar access for trip planning
- NSLocationWhenInUseUsageDescription: Location access for maps and navigation
- NSPhotoLibraryAddUsageDescription: Photo library access for saving documents
You can customize these strings as needed.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"brew install swiftlintbrew install swiftformatbrew install fastlanecd SmartTripPlanner
open SmartTripPlanner.xcodeproj- In Xcode, select the
SmartTripPlannertarget - Go to Signing & Capabilities
- Select your Team
- Verify all capabilities are enabled:
- iCloud (with CloudKit and iCloud Documents)
- Background Modes
- WeatherKit
- Push Notifications (optional)
- Select an iOS 17+ simulator or device
- Press
Cmd+Bto build - Press
Cmd+Rto run
The project uses the following Swift Package dependencies (managed automatically by Xcode):
- GoogleSignIn (7.0.0+): Google OAuth authentication
- Repository: https://github.com/google/GoogleSignIn-iOS.git
SwiftLint and SwiftFormat are integrated as build phases and run automatically during builds.
# Using Xcode
Cmd+U
# Using fastlane
fastlane test
# Using xcodebuild
cd SmartTripPlanner
xcodebuild test -project SmartTripPlanner.xcodeproj -scheme SmartTripPlanner -destination 'platform=iOS Simulator,name=iPhone 15 Pro'# Run SwiftLint
cd SmartTripPlanner
swiftlint
# Run SwiftFormat (check only)
swiftformat --lint .
# Run SwiftFormat (apply fixes)
swiftformat .
# Using fastlane
fastlane lint
fastlane format# Using fastlane
fastlane build
# Using xcodebuild
cd SmartTripPlanner
xcodebuild build -project SmartTripPlanner.xcodeproj -scheme SmartTripPlanner -destination 'generic/platform=iOS'# Build and upload to TestFlight
fastlane betaThe repository includes a GitHub Actions workflow (.github/workflows/ci.yml) that:
- Runs on pull requests to
mainanddevelop - Builds the app for iOS Simulator
- Runs unit tests
- Executes SwiftLint and SwiftFormat checks
To enable GitHub Actions:
- Push code to GitHub repository
- Workflows run automatically on pull requests
- View results in the Actions tab
The CI pipeline includes:
- Build validation: Ensures code compiles successfully
- Unit tests: Runs all test suites
- Code quality: SwiftLint and SwiftFormat checks
- Platform: Runs on macOS 14 with Xcode 15.2
The app requires the following entitlements (configured in SmartTripPlanner.entitlements):
- iCloud:
- CloudKit (private and shared database)
- iCloud Documents (iCloud Drive access)
- Background Tasks:
- Background fetch
- Background processing
- Remote notifications
- WeatherKit: Weather data access
- Push Notifications: Optional for future features
- Location: When-in-use authorization
- EventKit: Calendar access
- Photo Library: Add-only access
- Verify WeatherKit is enabled in Apple Developer Portal
- Ensure app is signed with valid provisioning profile
- WeatherKit requires a paid Apple Developer Account
- Check entitlements file includes
com.apple.developer.weatherkit
- Verify iCloud container ID matches:
iCloud.com.smarttripplanner.SmartTripPlanner - Sign in with Apple ID in iOS Settings > iCloud
- Enable iCloud Drive on device
- Check CloudKit Dashboard for container configuration
- Verify Google Client ID is correctly configured in Info.plist
- Check URL scheme matches reversed client ID
- Enable Gmail API in Google Cloud Console
- Verify OAuth consent screen is configured
- Clean build folder:
Cmd+Shift+K - Delete DerivedData:
rm -rf ~/Library/Developer/Xcode/DerivedData - Update Swift Package dependencies
- Verify Xcode version is 15.0+
- Ensure Development Team is selected in project settings
- Verify provisioning profile includes all required capabilities
- Check certificate is valid and not expired
- Try automatic signing management
com.smarttripplanner.SmartTripPlanner
- iOS 17.0+
- Swift 5.9
- iPhone (iOS 17+)
- iPad (iOS 17+)
- Not supported: macOS, watchOS, tvOS
- iPhone: Portrait, Landscape Left, Landscape Right
- iPad: All orientations
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Make changes and commit:
git commit -am 'Add new feature' - Run tests and linting:
fastlane test && fastlane lint - Push to branch:
git push origin feature/my-feature - Create a Pull Request
- Follow Swift API Design Guidelines
- Use SwiftLint and SwiftFormat configurations
- Write unit tests for new features
- Document public APIs
Copyright © 2024 SmartTripPlanner. All rights reserved.
For issues and questions:
- Create an issue in GitHub repository
- Contact: support@smarttripplanner.com
- Documentation: https://docs.smarttripplanner.com
- AI-powered trip suggestions
- Collaboration features (shared trips)
- Offline mode with local caching
- Apple Watch companion app
- Widget support
- Siri shortcuts integration
- Trip sharing to social media
- Budget tracking
- Multi-language support
Built with ❤️ using SwiftUI and modern iOS technologies.