Skip to content

muhittincamdali/iOS-Notification-Framework

CI CodeQL License Stars

πŸ”” iOS Notification Framework

Swift iOS Xcode Notifications Media Actions Scheduling Analytics Customization Accessibility Localization Performance Architecture Swift Package Manager CocoaPods

πŸ† Professional iOS Notification Framework

πŸ”” Advanced Notification System

πŸ“± Rich Media & Custom Actions


πŸ“‹ Table of Contents


πŸš€ Overview

πŸ† World-Class iOS Notification Framework

⚑ Professional Quality Standards

🎯 Enterprise-Grade Solution

iOS Notification Framework is the most advanced, comprehensive, and professional notification system framework for iOS applications. Built with clean architecture principles and SOLID design patterns, this enterprise-grade framework provides unparalleled notification capabilities for modern iOS development.

🎯 What Makes This Framework Special?

πŸ—οΈ Clean Architecture

  • Complete separation of concerns
  • Domain, Data, Presentation layers
  • Dependency inversion principle
  • Scalable and maintainable code

πŸ§ͺ SOLID Principles

  • Single Responsibility
  • Open/Closed principle
  • Liskov Substitution
  • Interface Segregation
  • Dependency Inversion

πŸ”” Rich Media Support

  • Images, videos, and audio
  • Custom attachments
  • Progressive loading
  • Intelligent caching

🎯 Key Benefits

Benefit Description Impact
πŸ—οΈ Clean Architecture Complete layer separation Maintainable codebase
πŸ§ͺ SOLID Principles Design best practices Scalable architecture
πŸ”” Rich Media Support Images, videos, audio Engaging notifications
⚑ Performance Optimized <1.3s launch time Fast user experience
🎨 Customization Themed notifications Brand consistency
πŸ“Š Analytics Comprehensive tracking Data-driven insights

✨ Key Features

πŸ—οΈ Architecture Features

🏒 Clean Architecture Implementation

  • Complete layer separation with proper dependency flow
  • Domain, Data, Presentation, Infrastructure layers
  • Dependency injection with lifecycle management
  • Repository pattern with multiple data sources

πŸ§ͺ SOLID Principles Applied

  • Single Responsibility Principle
  • Open/Closed Principle
  • Liskov Substitution Principle
  • Interface Segregation Principle
  • Dependency Inversion Principle

πŸ”” Rich Media Support

  • High-quality image notifications
  • Video content with thumbnails
  • Audio notifications with controls
  • Custom media attachments
  • Progressive loading system

πŸ”” Notification Features

Rich Media Notifications

  • Image Support: High-quality images with compression
  • Video Support: MP4, MOV with custom quality settings
  • Audio Support: MP3, AAC, WAV with volume control
  • GIF Support: Animated GIFs with optimization
  • Custom Attachments: Any file type with validation

Custom Actions

  • Interactive Buttons: Custom action buttons
  • Text Input: User input in notifications
  • Deep Linking: Seamless app navigation
  • Action Categories: Organized action groups
  • Contextual Actions: Dynamic action responses

Advanced Scheduling

  • Precise Timing: Millisecond accuracy
  • Recurring Notifications: Daily, weekly, custom patterns
  • Conditional Scheduling: Location, time, app state
  • Batch Operations: Multiple notifications
  • Time Zone Support: Automatic conversion

Analytics & Tracking

  • Delivery Analytics: Track delivery rates
  • Engagement Metrics: User interaction tracking
  • Performance Monitoring: Real-time analytics
  • A/B Testing: Notification strategy testing
  • Conversion Tracking: Action conversion rates

⚑ Quick Start

πŸš€ Get started in 5 minutes!

πŸ“‹ Requirements

Component Version Description
🍎 macOS 12.0+ Monterey or later
πŸ“± iOS 15.0+ Minimum deployment target
πŸ› οΈ Xcode 15.0+ Latest stable version
⚑ Swift 5.9+ Latest Swift version
πŸ“¦ CocoaPods Optional For dependency management

πŸš€ 5-Minute Setup

1️⃣ Clone the Repository

git clone https://github.com/muhittincamdali/iOS-Notification-Framework.git
cd iOS-Notification-Framework

2️⃣ Install Dependencies

swift package resolve

3️⃣ Open in Xcode

open Package.swift

4️⃣ Run the Project

  • Select your target device or simulator
  • Press ⌘+R to build and run
  • The app should launch successfully

🎯 Quick Start Guide

// 1. Import the framework
import NotificationFramework

// 2. Create configuration
let config = NotificationConfiguration()
config.enableRichMedia = true
config.enableCustomActions = true
config.enableAnalytics = true

// 3. Initialize framework
let notificationManager = NotificationManager.shared

// 4. Request permissions
notificationManager.requestPermissions { granted in
    if granted {
        print("βœ… Notification permissions granted")
    } else {
        print("❌ Notification permissions denied")
    }
}

// 5. Create and schedule notification
let notification = NotificationContent(
    title: "Welcome!",
    body: "Thank you for using our app",
    category: "welcome"
)

try notificationManager.schedule(
    notification,
    at: Date().addingTimeInterval(60)
)

πŸ“¦ Swift Package Manager

Add the framework to your project:

dependencies: [
    .package(url: "https://github.com/muhittincamdali/iOS-Notification-Framework.git", from: "1.0.0")
]

πŸ”” Rich Media Notifications

Image Notifications

// Create image notification
let imageNotification = RichNotificationContent(
    title: "New Product Available",
    body: "Check out our latest collection",
    mediaType: .image,
    mediaURL: URL(string: "https://example.com/product.jpg")
)

// Configure image settings
imageNotification.imageCompression = .high
imageNotification.cachePolicy = .memoryAndDisk
imageNotification.progressiveLoading = true

// Schedule image notification
try notificationManager.schedule(
    imageNotification,
    at: Date().addingTimeInterval(60)
)

Video Notifications

// Create video notification
let videoNotification = RichNotificationContent(
    title: "Product Demo",
    body: "Watch how to use our new feature",
    mediaType: .video,
    mediaURL: URL(string: "https://example.com/demo.mp4"),
    thumbnailURL: URL(string: "https://example.com/thumbnail.jpg")
)

// Configure video settings
videoNotification.videoQuality = .medium
videoNotification.autoPlay = false
videoNotification.controlsEnabled = true

// Schedule video notification
try notificationManager.schedule(
    videoNotification,
    at: Date().addingTimeInterval(120)
)

Audio Notifications

// Create audio notification
let audioNotification = RichNotificationContent(
    title: "Voice Message",
    body: "You have a new voice message",
    mediaType: .audio,
    mediaURL: URL(string: "https://example.com/message.mp3")
)

// Configure audio settings
audioNotification.audioFormat = .mp3
audioNotification.autoPlay = true
audioNotification.volume = 0.8

// Schedule audio notification
try notificationManager.schedule(
    audioNotification,
    at: Date().addingTimeInterval(30)
)

⚑ Custom Notification Actions

Basic Actions

// Create basic notification actions
let viewAction = NotificationAction(
    title: "View",
    identifier: "view_action",
    options: [.foreground]
)

let shareAction = NotificationAction(
    title: "Share",
    identifier: "share_action",
    options: [.foreground]
)

let dismissAction = NotificationAction(
    title: "Dismiss",
    identifier: "dismiss_action",
    options: [.destructive]
)

// Create notification with actions
let notificationWithActions = NotificationContent(
    title: "New Message",
    body: "You have a new message from John",
    actions: [viewAction, shareAction, dismissAction]
)

Advanced Actions

// Create advanced notification actions
let replyAction = NotificationAction(
    title: "Reply",
    identifier: "reply_action",
    options: [.foreground],
    textInput: TextInputAction(
        placeholder: "Type your reply...",
        submitButtonTitle: "Send"
    )
)

let likeAction = NotificationAction(
    title: "πŸ‘ Like",
    identifier: "like_action",
    options: [.authenticationRequired]
)

let bookmarkAction = NotificationAction(
    title: "πŸ”– Bookmark",
    identifier: "bookmark_action",
    options: [.foreground]
)

// Create notification with advanced actions
let advancedNotification = NotificationContent(
    title: "New Post",
    body: "Check out this amazing post",
    actions: [replyAction, likeAction, bookmarkAction]
)

Action Categories

// Create action categories
let messageCategory = NotificationActionCategory(
    identifier: "message_category",
    actions: [viewAction, replyAction, shareAction],
    options: [.customDismissAction]
)

let socialCategory = NotificationActionCategory(
    identifier: "social_category",
    actions: [likeAction, shareAction, bookmarkAction],
    options: [.allowInCarPlay]
)

// Register action categories
notificationManager.registerActionCategory(messageCategory)
notificationManager.registerActionCategory(socialCategory)

πŸ“… Advanced Scheduling

Precise Scheduling

// Schedule notification with precise timing
let preciseNotification = NotificationContent(
    title: "Meeting Reminder",
    body: "Your meeting starts in 5 minutes",
    category: "meeting"
)

// Schedule for specific date and time
let meetingDate = Calendar.current.date(
    byAdding: .minute,
    value: 5,
    to: Date()
)!

try notificationManager.schedule(
    preciseNotification,
    at: meetingDate,
    withPrecision: .millisecond
)

Recurring Notifications

// Create recurring notification
let dailyReminder = NotificationContent(
    title: "Daily Reminder",
    body: "Don't forget to check your tasks",
    category: "daily_reminder"
)

// Schedule daily recurring notification
let recurringSchedule = RecurringSchedule(
    frequency: .daily,
    time: DateComponents(hour: 9, minute: 0),
    timeZone: TimeZone.current
)

try notificationManager.scheduleRecurring(
    dailyReminder,
    with: recurringSchedule
)

// Schedule weekly recurring notification
let weeklyReminder = NotificationContent(
    title: "Weekly Reminder",
    body: "Don't forget to check your tasks",
    category: "weekly_reminder"
)

let weeklySchedule = RecurringSchedule(
    frequency: .weekly,
    weekday: 1, // Monday
    time: DateComponents(hour: 10, minute: 0)
)

try notificationManager.scheduleRecurring(
    weeklyReminder,
    with: weeklySchedule
)

Conditional Scheduling

// Create conditional notification
let conditionalNotification = NotificationContent(
    title: "Location-Based Alert",
    body: "You're near your favorite restaurant",
    category: "location"
)

// Define conditions
let locationCondition = NotificationCondition.location(
    latitude: 40.7128,
    longitude: -74.0060,
    radius: 1000 // 1km
)

let timeCondition = NotificationCondition.time(
    start: DateComponents(hour: 9, minute: 0),
    end: DateComponents(hour: 18, minute: 0)
)

let appStateCondition = NotificationCondition.appState(
    when: .background,
    after: 300 // 5 minutes
)

// Schedule with conditions
try notificationManager.scheduleConditional(
    conditionalNotification,
    conditions: [locationCondition, timeCondition, appStateCondition]
)

πŸ“Š Analytics & Tracking

Delivery Analytics

// Initialize analytics manager
let analyticsManager = NotificationAnalyticsManager()

// Track notification delivery
analyticsManager.trackDelivery(
    notificationID: "notification_123",
    deliveryTime: Date(),
    deliveryChannel: .push
)

// Track delivery metrics
analyticsManager.trackDeliveryMetrics { metrics in
    print("πŸ“Š Delivery Metrics:")
    print("Total sent: \(metrics.totalSent)")
    print("Delivered: \(metrics.delivered)")
    print("Failed: \(metrics.failed)")
    print("Delivery rate: \(metrics.deliveryRate)%")
    print("Average delivery time: \(metrics.averageDeliveryTime)s")
}

Engagement Analytics

// Track user engagement
analyticsManager.trackEngagement(
    notificationID: "notification_123",
    action: "view",
    timestamp: Date()
)

// Track engagement metrics
analyticsManager.trackEngagementMetrics { metrics in
    print("πŸ“ˆ Engagement Metrics:")
    print("Total interactions: \(metrics.totalInteractions)")
    print("Unique users: \(metrics.uniqueUsers)")
    print("Average engagement rate: \(metrics.averageEngagementRate)%")
    print("Most popular action: \(metrics.mostPopularAction)")
    print("Average time to action: \(metrics.averageTimeToAction)s")
}

A/B Testing

// Create A/B test
let abTest = NotificationABTest(
    testID: "notification_style_test",
    variants: [
        NotificationVariant(
            id: "variant_a",
            title: "Simple Title",
            body: "Simple message"
        ),
        NotificationVariant(
            id: "variant_b",
            title: "Emoji Title πŸŽ‰",
            body: "Exciting message with emoji!"
        )
    ],
    distribution: .equal
)

// Run A/B test
notificationManager.runABTest(abTest) { results in
    print("πŸ§ͺ A/B Test Results:")
    print("Variant A engagement: \(results.variantAEngagement)%")
    print("Variant B engagement: \(results.variantBEngagement)%")
    print("Winner: \(results.winner)")
    print("Confidence level: \(results.confidenceLevel)%")
}

🎨 Customization

Themed Notifications

// Create notification theme
let appTheme = NotificationTheme(
    primaryColor: UIColor.systemBlue,
    secondaryColor: UIColor.systemGray,
    backgroundColor: UIColor.systemBackground,
    textColor: UIColor.label,
    accentColor: UIColor.systemOrange
)

// Apply theme to notification
let themedNotification = NotificationContent(
    title: "Themed Notification",
    body: "This notification uses custom theming",
    theme: appTheme
)

// Configure theme settings
themedNotification.theme.font = .systemFont(ofSize: 16, weight: .medium)
themedNotification.theme.cornerRadius = 12
themedNotification.theme.shadowEnabled = true

Brand Integration

// Create brand-specific notification
let brandNotification = NotificationContent(
    title: "Brand Notification",
    body: "Consistent with your brand identity",
    brand: BrandConfiguration(
        logoURL: "https://example.com/logo.png",
        brandColors: [UIColor.systemBlue, UIColor.systemGreen],
        brandFont: .systemFont(ofSize: 18, weight: .bold)
    )
)

// Configure brand settings
brandNotification.brand.logoPosition = .topRight
brandNotification.brand.colorScheme = .automatic
brandNotification.brand.animationEnabled = true

Accessibility Support

// Create accessible notification
let accessibleNotification = NotificationContent(
    title: "Accessible Notification",
    body: "This notification is fully accessible",
    accessibility: AccessibilityConfiguration(
        voiceOverEnabled: true,
        largeTextEnabled: true,
        highContrastEnabled: true,
        reduceMotionEnabled: true
    )
)

// Configure accessibility settings
accessibleNotification.accessibility.voiceOverLabel = "Important notification"
accessibleNotification.accessibility.voiceOverHint = "Double tap to open"
accessibleNotification.accessibility.largeTextScale = 1.2

πŸ“± Usage Examples

Simple Notification

// Create simple notification
let simpleNotification = NotificationContent(
    title: "Welcome!",
    body: "Thank you for using our app",
    category: "welcome"
)

// Schedule simple notification
try notificationManager.schedule(
    simpleNotification,
    at: Date().addingTimeInterval(60)
)

Rich Media Notification

// Create rich media notification
let richNotification = RichNotificationContent(
    title: "New Product Available",
    body: "Check out our latest collection",
    mediaURL: "https://example.com/image.jpg",
    actions: [
        NotificationAction(title: "View", identifier: "view_action"),
        NotificationAction(title: "Share", identifier: "share_action")
    ]
)

// Schedule rich media notification
try notificationManager.schedule(
    richNotification,
    at: Date().addingTimeInterval(120)
)

Batch Notifications

// Create batch of notifications
let notifications = [
    NotificationContent(title: "Task 1", body: "Complete task 1"),
    NotificationContent(title: "Task 2", body: "Complete task 2"),
    NotificationContent(title: "Task 3", body: "Complete task 3")
]

// Schedule batch notifications
try notificationManager.scheduleBatch(
    notifications,
    withInterval: 300 // 5 minutes between each
)

πŸ”§ Configuration

Notification Categories

// Configure notification categories
let messageCategory = NotificationCategory(
    identifier: "message",
    actions: [viewAction, replyAction, deleteAction],
    options: [.customDismissAction]
)

let reminderCategory = NotificationCategory(
    identifier: "reminder",
    actions: [snoozeAction, completeAction],
    options: [.allowInCarPlay]
)

// Register categories
notificationManager.registerCategories([messageCategory, reminderCategory])

Notification Settings

// Configure notification settings
let notificationSettings = NotificationSettings()
notificationSettings.soundEnabled = true
notificationSettings.badgeEnabled = true
notificationSettings.alertEnabled = true
notificationSettings.criticalAlertsEnabled = false
notificationSettings.provisionalAuthorizationEnabled = true

// Apply settings
notificationManager.configure(settings: notificationSettings)

πŸ“š Documentation

API Documentation

Comprehensive API documentation is available for all public interfaces:

Integration Guides

Examples


🀝 Contributing

We welcome contributions! Please read our Contributing Guidelines for details on our code of conduct and the process for submitting pull requests.

Development Setup

  1. Fork the repository
  2. Create feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open Pull Request

Code Standards

  • Follow Swift API Design Guidelines
  • Maintain 100% test coverage
  • Use meaningful commit messages
  • Update documentation as needed
  • Follow notification best practices
  • Implement proper error handling
  • Add comprehensive examples

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ™ Acknowledgments

  • Apple for the excellent iOS development platform
  • The Swift Community for inspiration and feedback
  • All Contributors who help improve this framework
  • Notification Community for best practices and standards
  • Open Source Community for continuous innovation
  • iOS Developer Community for notification insights
  • UX/UI Community for design inspiration

⭐ Star this repository if it helped you!


πŸ“Š Project Statistics

πŸ† Live Statistics

GitHub Stars GitHub Forks GitHub Issues GitHub Pull Requests GitHub License

πŸ“ˆ Growth Analytics

Weekly Downloads Monthly Active Code Coverage Build Status

🌟 Stargazers Community

⭐ Star this repository if it helped you!

πŸ’« Join our amazing community of developers!

## QuickStart
  1. Add the package to your project using Swift Package Manager.
  2. Build:
  3. Run tests:
  4. Explore examples in and .