Blog Topics: Debugging, iOS, macOS, Instruments

Easy to Verify (Short snippets, conceptual, or tool-focused)

Instruments Deep Dives

  1. Memory Graph Debugger walkthrough - Visual tool, screenshots > code
  2. Time Profiler: Finding the real bottleneck - Interpreting call trees, minimal code
  3. Allocations instrument: Tracking transient memory - Focus on using the tool
  4. Network Link Conditioner for testing slow connections - Configuration, not code
  5. Energy Log instrument for battery debugging - Interpreting graphs

Xcode Debugging Features

  1. View Hierarchy Debugger secrets - 3D view debugging, constraint issues
  2. Breakpoint actions beyond po - Log messages, sounds, shell commands
  3. Symbolic breakpoints for framework code - E.g., break on UIViewAlertForUnsatisfiableConstraints
  4. Quick Look in debugger - Custom types with debugQuickLookObject()
  5. Environment overrides - Dark mode, dynamic type, accessibility testing

Console/Logging

  1. OSLog vs print: Structured logging - Simple API, easy to test
  2. Console.app for device logs - Filtering, persistence
  3. signpost for measuring intervals - Small API surface

Crash Analysis

  1. Reading crash logs without symbolicating - Pattern recognition
  2. Common crash signatures and what they mean - Educational, examples from Apple docs

Moderate to Verify

  1. Thread Sanitizer findings explained - Show common warnings, fixes
  2. Address Sanitizer: Catching memory corruption - Requires triggering bugs

macOS-Specific

  1. Activity Monitor deep dive for devs - Energy, disk, network tabs
  2. Debugging sandboxing issues - Console filtering, entitlement errors
  3. Notarization troubleshooting - spctl and codesign commands

Beginner Topics

Xcode Basics

  1. Your first breakpoint: Stop, inspect, continue - Basic breakpoint usage
  2. The Debug Area explained - Variables view, console, what each panel shows
  3. Print debugging done right - When and how to use print() effectively
  4. Reading error messages in Xcode - Decoding red/yellow warnings
  5. Simulator tips every beginner should know - Shortcuts, reset, slow animations

Common Beginner Mistakes

  1. Why is my outlet nil? - IBOutlet connection issues
  2. “Thread 1: Fatal error” - What it means - Force unwrap crashes explained simply
  3. Why won’t my UI update? - Main thread basics
  4. “Use of unresolved identifier” - Scope and typos
  5. App crashes on launch - Info.plist issues, missing permissions

First Steps in Debugging

  1. Using po in the console - Print object basics
  2. Step over, step into, step out - Debugger navigation
  3. Conditional breakpoints for beginners - Only break when something is true
  4. Inspecting variables without breakpoints - Quick Look, debug descriptions
  5. Console colors and what they mean - System messages vs your logs

Understanding Errors

  1. Optionals and nil: The #1 crash cause - Safe unwrapping patterns
  2. “Index out of range” explained - Array bounds checking
  3. Decoding Swift error messages - Reading compiler complaints
  4. What is a stack trace? - Reading the left panel after a crash
  5. Simulator vs Device: Why it works here but not there

Intermediate Topics

Debugging Techniques

  1. Exception breakpoints: Catch crashes before they happen - Setup and usage
  2. Watchpoints: Break when a value changes - Memory debugging
  3. LLDB expressions: Modify state while debugging - expr command
  4. Debugging async code with breakpoints - Task context, continuation issues
  5. Zombie objects: Finding messages to deallocated instances

Memory & Performance

  1. Retain cycles in closures: Finding and fixing - Weak/unowned patterns
  2. Autorelease pool debugging - When memory spikes unexpectedly
  3. Lazy loading gone wrong - Debugging initialization order
  4. Background thread crashes - Thread safety debugging
  5. Debugging slow app launch times - Pre-main vs post-main

Networking

  1. Charles Proxy basics for iOS - SSL pinning, request inspection
  2. Debugging URLSession with custom delegates - Logging layer
  3. Timeout issues and how to debug them - Connection vs request timeouts
  4. Mocking network responses for debugging - Without third-party libs

SwiftUI-Specific

  1. Debugging view identity issues - Why your view keeps resetting
  2. Finding unnecessary view redraws - Instruments + Self._printChanges
  3. Environment object nil crashes - Debugging missing injection
  4. Navigation stack debugging - Path issues, deep linking problems

Core Data / Persistence

  1. Core Data debugging flags - -com.apple.CoreData.SQLDebug 1
  2. Migration failures: Debugging lightweight migrations - Model versioning

High-Traffic Topics (Common Searches)

Exact Error Messages

  1. “Cannot convert value of type” - Fixing type mismatches - Very common search
  2. “Unexpectedly found nil while unwrapping” - The #1 Swift crash
  3. “No such module” - Framework linking issues - SPM, CocoaPods problems
  4. “Signing certificate invalid” - Provisioning hell
  5. “This app has crashed because it attempted to access privacy-sensitive data” - Info.plist keys
  6. “Unable to install app - device is passcode protected” - Device trust issues
  7. “The operation couldn’t be completed. (OSStatus error -10814)” - Keychain errors

App Store & TestFlight Debugging

  1. “App rejected for crashes” - Finding the crash Apple found
  2. TestFlight builds not appearing - Processing, entitlements
  3. “Missing compliance” for encryption - Export compliance fix
  4. App size too large for cellular download - Asset optimization
  5. In-App Purchase not working in sandbox - Common IAP debugging

iOS Version-Specific

  1. iOS 17 migration issues - API deprecations, new requirements
  2. Xcode 15 build errors after update - Common fixes
  3. Swift 6 concurrency warnings explained - Sendable, actor isolation

Common “How To” Searches

  1. How to debug on real device without paid account - Free provisioning limits
  2. How to clear Xcode cache completely - DerivedData, caches, all of it
  3. How to debug widgets - WidgetKit debugging tricks
  4. How to see network requests in Xcode - Without Charles/Proxyman
  5. How to debug push notifications - Local, remote, APNs issues

Frustrating Issues

  1. “Works in simulator, crashes on device” - Architecture, permissions
  2. Build succeeds but app is blank/white - Root view issues
  3. Xcode stuck on “Installing” or “Copying” - Device sync issues
  4. Previews not loading - SwiftUI preview debugging
  5. “Command PhaseScriptExecution failed” - Build script errors

Testing & CI/CD

  1. XCTest failures that pass locally - CI environment differences
  2. UI tests timing out - Waiting strategies, accessibility identifiers
  3. Code coverage not showing - Configuration issues
  4. Xcode Cloud build failures - Common fixes
  5. Flaky tests: Finding and fixing - Non-deterministic test debugging

Accessibility

  1. VoiceOver debugging - Accessibility Inspector usage
  2. Dynamic Type breaking layouts - Testing large text sizes
  3. Accessibility audit in Xcode - Built-in tool walkthrough

Localization

  1. “Missing localization” warnings - Export/import issues
  2. Right-to-left layout bugs - RTL debugging
  3. Pseudo-localization for testing - Finding truncation issues

Animation & UI

  1. Debugging janky animations - 60fps issues, Core Animation
  2. Keyboard avoiding view issues - Common SwiftUI/UIKit fixes
  3. Safe area debugging - Notch, home indicator problems
  4. Dark mode colors not updating - Asset catalog issues

Extensions & Multi-Target

  1. App Extension debugging - Share, Today, Keyboard extensions
  2. App Groups data not syncing - Container issues
  3. Watch app debugging - Pairing, connectivity issues
  4. Debugging Intent/Siri Shortcuts - Voice command testing

Swift Concurrency

  1. Actor isolation errors explained - MainActor, nonisolated
  2. Data race debugging - Thread Sanitizer for async code
  3. Task cancellation not working - Cooperative cancellation patterns
  4. Deadlocks with async/await - Common patterns that hang

Build & Configuration

  1. Debug vs Release behavior differences - Optimization gotchas
  2. Scheme environment variables - Launch arguments debugging