Skip to content

Daniel-Reiling/Thinkers-iOS

Repository files navigation

Thinkers Notebook - iOS Application

Portfolio Demonstration Project - This repository showcases advanced native iOS development expertise through a full-featured note-taking and content capture application. The app is no longer published but represents production-quality code demonstrating senior-level iOS engineering skills.

Overview

Thinkers Notebook is a comprehensive iOS application for capturing, organizing, and collaborating on ideas through multiple content types including photos, documents, audio recordings, video, handwritten notes, and scanned notebook pages. The app demonstrates expertise across the entire iOS development stack from UI/UX to backend integration, real-time collaboration, and advanced media processing.

Technology Stack

Core iOS Technologies

  • UIKit - Advanced compositional layouts, diffable data sources, custom views
  • SwiftUI - Modern declarative UI (43+ views) with Combine integration
  • Combine - Reactive programming throughout the application
  • AVFoundation - Audio/video recording, playback, and editing
  • Vision Framework - Document detection, OCR, handwriting recognition
  • MapKit & CoreLocation - Location-based features with custom annotations
  • WidgetKit - Home screen widgets with shared authentication

Backend & Services

  • Firebase Suite - Firestore, Authentication, Storage, Functions, Analytics, ML Vision, Remote Config, Dynamic Links, Messaging
  • RevenueCat - Subscription management with A/B testing capabilities
  • Algolia - Full-text search integration

Third-Party Libraries (25+ CocoaPods)

  • OpenCV2 - Advanced image processing and document scanning
  • Kingfisher - Async image loading with caching
  • WordPress-Aztec-iOS - Rich text editing
  • Google/Facebook/Apple Sign In - Multi-provider authentication
  • SwipeCellKit - Interactive cell gestures
  • MessageInputBar - Rich messaging UI
  • Mixpanel - Analytics

Development Tools

  • Fastlane - Complete automation for builds, releases, and certificate management
  • SwiftGen - Type-safe resource access (assets, strings, storyboards)
  • SwiftLint - Code quality enforcement
  • CocoaPods - Dependency management

Advanced iOS Development Concepts

1. Modern UI Architecture

UICollectionViewCompositionalLayout

Sophisticated multi-section layouts with dynamic content and orthogonal scrolling sections:

[MainLayouts.swift](Thinkers Notebook/Controllers/Main/Layout/MainLayouts.swift) - Factory pattern returning complex layouts:

  • Folders section with grid/list toggle (3-column grid with 12pt spacing)
  • Recent notes with horizontal scrolling
  • Nearby notes with embedded map views
  • Dynamic section configuration based on data availability

[FolderLayouts.swift](Thinkers Notebook/Controllers/Folder/Layout/FolderLayouts.swift) - Adaptive layouts:

  • Grid layout with aspect ratio calculations
  • List layout with dynamic height
  • Smooth transitions between layout modes

UICollectionViewDiffableDataSource

Type-safe, performant data handling with automatic animations:

[BaseDiffable.swift](Thinkers Notebook/Controllers/Base /BaseDiffable.swift) - Custom base class:

class BaseDiffable<Section: Hashable, Item: Hashable>:
    UICollectionViewDiffableDataSource<Section, Item>
  • Empty state handling
  • Supplementary view registration
  • Used in 12+ view controllers

Programmatic UI Development

  • 97% programmatic UI (only 3 storyboards, 2 XIBs)
  • Demonstrates advanced Auto Layout mastery
  • Custom view composition and reusability
  • Eliminates merge conflicts and improves code review quality

2. Reactive Programming with Combine

Publisher-Subscriber Pattern

Extensive use of Combine for reactive data flow throughout the application:

[MainViewModel.swift](Thinkers Notebook/Models/View Models/MainViewModel.swift):

  • 4 concurrent Firebase listeners as publishers
  • @Published properties for users, folders, notes, comments
  • Automatic UI updates via subscription chain

[LocationTracker.swift](Thinkers Notebook/Utils/Managers/LocationTracker.swift):

@Published var lastLocation: CLLocation?
@Published var placemark: CLPlacemark?
  • Real-time location updates
  • Reverse geocoding with Combine
  • Permission state management

Subscription Management

Proper memory management with cancellables:

private var cancellables: [AnyCancellable] = []

cancellables.append(
    Server.mainViewModel.$notes.sink { [weak self] notes in
        self?.filteredNotes = notes.filter { $0.location != nil }
    }
)

3. Advanced Swift Language Features

Custom Property Wrappers

[@UserDefault](Thinkers Notebook/PropertyWrappers/UserDefault.swift) - Generic UserDefaults wrapper:

@propertyWrapper
struct UserDefault<T> {
    let key: String
    let defaultValue: T

    var wrappedValue: T {
        get { UserDefaults.standard.object(forKey: key) as? T ?? defaultValue }
        set { UserDefaults.standard.set(newValue, forKey: key) }
    }
}

// Usage:
@UserDefault(GlobalConstants.UserDefaultKeys.interfaceListMode, defaultValue: false)
static var interfaceListMode: Bool

Protocol-Oriented Programming

[Reusable.swift](Thinkers Notebook/Utils/Reusable.swift) - Generic cell registration:

protocol Reusable: AnyObject {
    static var reuseIdentifier: String { get }
}

extension UICollectionView {
    func dequeueReusableCell<T: UICollectionViewCell>(
        for indexPath: IndexPath,
        cellType: T.Type = T.self
    ) -> T where T: Reusable {
        // Type-safe dequeuing with compile-time checking
    }
}

[DictDecodable.swift](Thinkers Notebook/Models/Firebase Entities/Protocol/DictDecodable.swift) - Protocol with associated types:

protocol DictDecodable {
    associatedtype ObjectType
    static func decode(fromDict: [String: Any]) -> ObjectType?
}

Polymorphic Content System

Multiple concrete types conforming to NoteContent protocol:

  • ThinkersNoteContent - Scanned notebook pages with transcription
  • PhotoNoteContent - Photo collections
  • DocumentNoteContent - PDFs with transcription
  • AudioNoteContent - Audio files with transcription
  • VideoNoteContent - Video files
  • WhiteboardNoteContent - Whiteboard sketches
  • TextNoteContent - Rich text

4. Audio Processing & Visualization

Real-time Waveform Visualization

[AudioVisualizationView.swift](Thinkers Notebook/Controllers/Audio/Views/AudioVisualizationView.swift) (509 lines):

  • Custom Core Graphics drawing for waveform rendering
  • Real-time audio metering during recording
  • Gradient masking for playback progress
  • Scalable waveform generation from audio samples
  • Dual-mode operation (recording vs. playback)

Audio Recording & Editing

[AudioRecorderManager.swift](Thinkers Notebook/Controllers/Audio/AudioRecorderManager.swift):

  • High-quality AAC encoding (320kbps, 44.1kHz stereo)
  • Real-time metering with averaging
  • Audio session management
  • Background recording support

[CropAudioViewController.swift](Thinkers Notebook/Controllers/Audio/CropAudioViewController.swift):

  • Visual audio trimming interface
  • Precise timestamp selection
  • Audio waveform timeline
  • Non-destructive editing

[AudioPlayerManager.swift](Thinkers Notebook/Controllers/Audio/AudioPlayerManager.swift):

  • Playback with time navigation
  • 15-second forward/backward jumps
  • Progress tracking
  • Resumable playback

5. Computer Vision & Machine Learning

Document Scanning Pipeline

Vision Framework - Real-time document detection:

  • [VisionRectangleDetector.swift](Thinkers Notebook/Scanner/Utils/VisionRectangleDetector.swift) - VNDetectRectanglesRequest for page detection
  • Confidence scoring for auto-capture
  • Manual corner adjustment for precision
  • Multi-page scanning workflow

OpenCV Integration - Advanced image processing:

  • [OpenCVWrapper.mm](Thinkers Notebook/OpenCVWrappers/OpenCVWrapper.mm) - Objective-C++ bridge
  • Adaptive thresholding for black & white conversion
  • Morphological operations (dilation, median blur)
  • Perspective correction and normalization
  • Custom filters: Color, Grayscale, B&W

OCR & Text Recognition

[DocumentTextDetector.swift](Thinkers Notebook/Utils/ML/DocumentTextDetector.swift):

  • VNRecognizeTextRequest for printed text
  • Confidence thresholds
  • Multi-language support

[HandwritingDetector.swift](Thinkers Notebook/Utils/ML/HandwritingDetector.swift):

  • Handwriting recognition using Vision framework
  • Text transcription from scanned notes

[ImageLabelDetector.swift](Thinkers Notebook/Utils/ML/ImageLabelDetector.swift):

  • Image classification
  • Content categorization

6. Location Services & Mapping

[LocationTracker.swift](Thinkers Notebook/Utils/Managers/LocationTracker.swift):

  • Reactive location updates via Combine @Published
  • Reverse geocoding for human-readable addresses
  • Permission request handling
  • Background location updates
  • Distance calculations

[MapViewController.swift](Thinkers Notebook/Controllers/Map/MapViewController.swift):

  • Custom annotation views with note previews
  • Annotation clustering for performance
  • Interactive map with note filtering
  • Region management and zooming

[NoteAnnotationView.swift](Thinkers Notebook/Controllers/Map/NoteAnnotationView.swift):

  • Custom MKAnnotationView subclass
  • Note preview with image loading
  • Tap gesture handling

7. Firebase Architecture

Real-time Data Synchronization

Firestore Snapshot Listeners - Reactive database pattern:

Firestore.firestore()
    .collection(FirebaseKeys.Collections.folders)
    .whereField(FirebaseKeys.Folder.userID, isEqualTo: UserManager.userID)
    .addSnapshotListener { [weak self] querySnapshot, error in
        guard let folders = FirestoreDecoder.foldersFrom(query: querySnapshot) else { return }
        self?.folders = folders  // Triggers UI updates via @Published
    }

Centralized State Management:

Server.mainViewModel  // ObservableObject with @Published properties
Server.update         // FirestoreUpdater - write operations
Server.fetch          // FirestoreFetcher - read operations
Server.storage        // StorageUtils - media uploads

Schema Versioning Pattern

[FirebaseModel Protocol](Thinkers Notebook/Models/Firebase Entities/Protocol/FirebaseModel.swift):

protocol FirebaseModel {
    var schemaVersion: Int { get }
    static func decode(fromDict: [String: Any], documentID: String) -> ObjectType?
    func encode() -> [String: Any]?
}
  • Non-breaking migrations
  • Version-specific decoding logic
  • Future-proof data models

Multi-Provider Authentication

  • Email/Password - Firebase Auth
  • Google Sign In - OAuth flow with GIDSignIn
  • Apple Sign In - ASAuthorizationController with CryptoKit
  • Facebook Login - FBSDKLoginKit

Cloud Services Integration

  • Cloud Storage - Media file uploads/downloads
  • Cloud Functions - Serverless backend operations
  • Remote Config - Feature flags and A/B testing
  • Dynamic Links - Deep linking for sharing
  • FCM - Push notifications
  • Analytics - Event tracking
  • Crashlytics - Crash reporting with dSYM upload

8. MVVM Architecture Pattern

ViewModel Layer - ObservableObject with Combine:

  • [MainViewModel.swift](Thinkers Notebook/Models/View Models/MainViewModel.swift) - Global application state
  • [FolderViewModel.swift](Thinkers Notebook/Models/View Models/FolderViewModel.swift) - Folder-specific filtering
  • [ActivityViewModel.swift](Thinkers Notebook/Models/View Models/ActivityViewModel.swift) - Comments and announcements
  • [MapViewModel.swift](Thinkers Notebook/Controllers/Map/MapViewModel.swift) - Location-filtered notes
  • [SubscriptionViewModel.swift](Thinkers Notebook/SwiftUI/Paywall/View Models/SubscriptionViewModel.swift) - RevenueCat integration

Data Flow Pattern:

Firestore Listener → MainViewModel (@Published) → Specific ViewModel → View

Base Controller Classes:

  • [BaseViewController.swift](Thinkers Notebook/Controllers/Base /BaseViewController.swift) - Common UIViewController functionality
  • [BaseTableViewController.swift](Thinkers Notebook/Controllers/Base /BaseTableViewController.swift) - Table view base
  • Centralized cancellables management
  • Common utilities (web URL handling, sharing)

9. SwiftUI Integration

43+ SwiftUI Views demonstrating modern declarative UI:

Paywall System:

  • [PaywallContentView.swift](Thinkers Notebook/SwiftUI/Paywall/Views/PaywallContentView.swift) - Subscription UI
  • [CustomVideoPlayer.swift](Thinkers Notebook/SwiftUI/Paywall/Views/CustomVideoPlayer.swift) - AVKit integration
  • [SubscriptionOptionCard.swift](Thinkers Notebook/SwiftUI/Paywall/Views/SubscriptionOptionCard.swift) - Package selection

Onboarding:

  • [OnboardingScreen.swift](Thinkers Notebook/SwiftUI/Onboarding/OnboardingScreen.swift) - Feature introduction
  • [WelcomeScreen.swift](Thinkers Notebook/SwiftUI/Onboarding/WelcomeScreen.swift) - Initial welcome

Custom Components:

  • [BlurView.swift](Thinkers Notebook/SwiftUI/Utils/BlurView.swift) - UIViewRepresentable wrapper
  • [MaskedCornerRadius.swift](Thinkers Notebook/SwiftUI/Utils/MaskedCornerRadius.swift) - Custom shape modifiers
  • [StorageImage.swift](Thinkers Notebook/SwiftUI/StorageImage.swift) - Async Firebase Storage image loading

10. WidgetKit Extension

4 Widget Types with shared authentication:

Widgets.swift:

  • QuickCaptureWidget - Small widget for quick note capture
  • QuickCaptureGridWidget - Medium widget with multiple capture options
  • RecentNotesWidget - Small widget showing recent notes
  • CommentsWidget - Medium/large widget for activity feed

Technical Implementation:

  • TimelineProvider with Firebase data integration
  • IntentConfiguration for user customization
  • Shared keychain for authentication state
  • @WidgetBundleBuilder for multiple widget types
  • Deep linking into main app

11. RevenueCat Subscription System

[SubscriptionManager.swift](Thinkers Notebook/Utils/Managers/SubscriptionManager.swift) (309 lines):

  • Multi-package support (monthly, 6-month, annual)
  • Limited-time offer tracking with 24-hour deadlines
  • Purchase restoration
  • Entitlement checking ("plus" subscription tier)
  • User identification for analytics
  • A/B testing with Remote Config
  • Firestore sync for subscription state

Features:

  • Trial period handling
  • Subscription status syncing
  • Cross-platform entitlement checking
  • Automatic renewal tracking
  • Purchase error handling

12. Advanced Custom Views

[AudioVisualizationView.swift](Thinkers Notebook/Controllers/Audio/Views/AudioVisualizationView.swift):

  • Core Graphics waveform rendering
  • Gradient masking for progress
  • Touch gesture for seeking
  • Scalable rendering at any size

[TrimmerView.swift](Thinkers Notebook/Controllers/Audio/Views/TrimmerView.swift):

  • Audio timeline with handles
  • Visual feedback during trimming
  • Precise timestamp selection

[CaptureMenu.swift](Thinkers Notebook/Controllers/Main/Views/CaptureMenu.swift):

  • Animated menu presentation
  • Multiple capture options
  • Custom transitions

[CustomTabBar.swift](Thinkers Notebook/Controllers/Main/Views/CustomTabBar.swift):

  • Custom tab bar implementation
  • Center button elevation
  • Animated tab switching

13. Image Processing Pipeline

Kingfisher Integration:

  • Memory and disk caching strategies
  • SwiftUI support via KFImage
  • Automatic cache invalidation
  • Downsampling for performance

CropViewController:

  • Interactive image cropping
  • Aspect ratio constraints
  • Rotation support

Custom Filters:

  • CIFilter integration
  • Real-time filter preview
  • Filter selection UI

OpenCV Processing:

  • Adaptive thresholding
  • Perspective transformation
  • Edge enhancement
  • Noise reduction

14. Search Integration

Algolia Full-Text Search:

  • [StandaloneSearchResultsController.swift](Thinkers Notebook/Controllers/Search/StandaloneSearchResultsController.swift)
  • Debounced search queries
  • Token-based authentication
  • Custom index configuration
  • Result highlighting
  • Faceted filtering

15. DevOps & Automation

Fastlane Configuration

Fastfile - Complete CI/CD automation:

Beta Lane - TestFlight deployment:

lane :beta do
  match(type: "appstore", readonly: true)
  build_app(scheme: "Thinkers Notebook")
  upload_to_testflight(team_id: "120271764")
  notification(title: "Beta Release Complete!")
end

Release Lane - App Store deployment:

  • Git status validation (clean working tree)
  • Branch validation (must be on master)
  • Code signing with Match
  • Build and upload
  • Email notifications via Mailgun

Bump Lane - Version management:

  • Major/minor/patch/build number increments
  • Automatic git commit and tagging
  • Push to remote repository

Certificate Management:

  • match development - Development certificates
  • match appstore - Distribution certificates
  • register_new_device - Device provisioning
  • nuke_all - Certificate cleanup

dSYM Management:

  • Automatic download from App Store Connect
  • Upload to Crashlytics for crash symbolication
  • Cleanup of local files

SwiftGen Code Generation

swiftgen.yml - Type-safe resource access:

  • Strings: Localized strings as type-safe enums
  • Assets: Image assets with compile-time checking
  • Storyboards: Type-safe view controller instantiation

Generated files eliminate magic strings and provide autocomplete.

16. Performance Optimization

Image Caching:

  • Kingfisher memory cache with LRU eviction
  • Disk cache with expiration
  • Automatic downsampling for large images
  • Prefetching for collection views

Firebase Query Optimization:

  • Indexed queries for fast lookups
  • Pagination for large datasets
  • Efficient listener management
  • Batch operations for writes

Memory Management:

  • Weak self in closures throughout
  • Proper ListenerRegistration.remove() in deinit
  • ARC optimization
  • Image decompression on background threads

Background Processing:

  • DispatchQueue.global() for heavy operations
  • Main thread reserved for UI updates
  • Async/await patterns where applicable

17. Extensions & Utilities

UI Extensions:

  • [UIView+Extensions.swift](Thinkers Notebook/Extensions/UIView+Extensions.swift) - Layout, animations, gestures
  • [UIView+Shimmer.swift](Thinkers Notebook/Extensions/UIView+Shimmer.swift) - Gradient shimmer loading effect
  • [UIViewController+Extensions.swift](Thinkers Notebook/Extensions/UIViewController+Extensions.swift) - Routing, sharing, alerts

Foundation Extensions:

  • Date+Format.swift - Localized date formatting
  • String+Extensions.swift - Validation, formatting
  • Dictionary+FirebaseUtils.swift - Type-safe Firestore value extraction

Custom Managers:

  • UserManager - Authentication state
  • SubscriptionManager - RevenueCat integration
  • AuthenticationManager - Login/signup flows
  • PermissionManager - Privacy permissions
  • AlertManager - Alert presentation
  • NetworkMonitor - Connectivity detection
  • ReviewManager - App Store review prompts

18. Notable Design Patterns

Singleton Pattern:

class Server {
    static let fetch = FirestoreFetcher(userID: UserManager.userID)
    static let update = FirestoreUpdater(userID: UserManager.userID)
    static let mainViewModel = MainViewModel()
}

Factory Pattern:

  • Layout factories returning different UICollectionViewCompositionalLayout
  • Cell registration factories

Dependency Injection:

  • Protocol-based injection for testability
  • View model injection in controllers

Observer Pattern:

  • Combine publishers and subscribers
  • Firebase snapshot listeners
  • NotificationCenter for app lifecycle events

Project Statistics

  • Total Swift Files: 200+ files
  • SwiftUI Views: 43+ files
  • ViewModels: 13+ with Combine integration
  • Custom UIKit Views: 30+ custom views
  • Third-Party Dependencies: 25+ CocoaPods
  • UI Approach: 97% programmatic (3 storyboards, 2 XIBs)
  • Deployment: Fastlane automation with Match signing
  • Code Quality: SwiftLint enforced

Architecture Summary

Pattern: Hybrid MVC/MVVM with Combine reactive programming

Data Flow:

Firestore (Source of Truth)
    ↓ (Real-time Listeners)
MainViewModel (@Published properties)
    ↓ (Combine subscriptions)
Feature ViewModels (Filtered/transformed data)
    ↓ (Data binding)
Views (UIKit/SwiftUI)

Key Principles:

  • Protocol-oriented design
  • Reactive programming with Combine
  • Type-safe resource access
  • Schema versioning for data models
  • Comprehensive error handling
  • Memory-efficient implementation

Key Technical Highlights

  1. Advanced Audio Processing - Custom waveform visualization with Core Graphics, real-time metering, and precise editing capabilities
  2. Computer Vision Pipeline - Vision + OpenCV integration for professional-grade document scanning with adaptive processing
  3. Modern UI Architecture - UICollectionViewCompositionalLayout with DiffableDataSource demonstrating cutting-edge UIKit patterns
  4. Reactive Programming - Extensive Combine usage with custom publishers, transformations, and subscription management
  5. Multi-Platform - iOS app + 4 widget types with shared authentication and real-time data sync
  6. Advanced Third-Party Integration - RevenueCat with A/B testing, Algolia search, multi-provider social auth, comprehensive Firebase suite
  7. SwiftUI + UIKit Hybrid - Modern SwiftUI alongside battle-tested UIKit showing expertise in both paradigms
  8. Protocol-Oriented Design - Generic, type-safe APIs with associated types and protocol extensions
  9. DevOps Excellence - Comprehensive Fastlane automation for the entire release process
  10. Performance Optimization - Kingfisher caching, optimized Firebase queries, background processing, and memory management

Developer Information

This codebase demonstrates senior-level iOS expertise across:

  • ✅ Modern UI/UX implementation (UIKit & SwiftUI)
  • ✅ Advanced iOS frameworks (AVFoundation, Vision, MapKit, WidgetKit)
  • ✅ Reactive programming (Combine)
  • ✅ Architecture patterns (MVVM, Protocol-Oriented Programming)
  • ✅ Third-party integration (25+ libraries)
  • ✅ Backend integration (Firebase suite)
  • ✅ DevOps & automation (Fastlane, Match, SwiftGen)
  • ✅ Performance optimization
  • ✅ Media processing (audio, video, images)
  • ✅ Computer vision & ML
  • ✅ Location services
  • ✅ In-app purchases & subscriptions

Note: This is a portfolio demonstration project. The app is no longer published or maintained, but represents production-quality code written to professional standards.

About

Portfolio Demonstration Project (Archived App) - Native iOS (Swift, Obj-C, C++, UIKit, SwiftUI)

Resources

Stars

Watchers

Forks

Contributors

Languages