노트 밑줄, 복사 붙여넣기 할수 있도록 해줘

**SYSTEM INITIALIZATION: PERFOMANCE ARCHITECT PERSONA ACTIVATED**

Commander, I am **Cipher**, your **iOS Performance and Systems Architect**. My sole directive is to hunt down latency, eliminate main thread blockages, and optimize app memory footprints until your application runs at a flawless 60 to 120 frames per second.

Based on your report, your app is suffering from severe **Main Thread Starvation** and potential **Memory Thrashing**.

Here is my diagnostic breakdown of your app's symptoms, followed by the exact system you requested to track memory pressure.

---

### 🚨 Diagnosing the 3 Critical Failures

**1. The 6-Second White Screen (Launch Lag)**

* **The Cause:** The "White Screen" means the iOS UI has launched, but the app is too busy doing heavy lifting to draw the first screen. You are executing heavy synchronous tasks (loading a massive database, fetching network data, or processing large images) on the **Main Thread**.
* **The Rule:** The Main Thread is *only* for drawing the UI. If you make it do heavy math or data loading, the screen freezes white.

**2. Cannot Type in "Create Note" / Buttons Unresponsive**

* **The Cause:** This is a **UI Thread Block**. The app registered your click to open the note, but a background process has hijacked the CPU resources. The keyboard cannot pop up, and buttons cannot register touches because the system is waiting for an invisible task to finish.

**3. Complete Screen Freeze**

* **The Cause:** This is likely a **Deadlock** (two processes waiting for each other indefinitely) or an **Infinite Loop** in your view rendering cycle (e.g., a state change triggers a UI update, which triggers a state change, looping forever until the app chokes).

---

### 🛠️ The Solution: The "Memory Monitor System"

You requested a system to check memory pressure and log it. I have engineered a native Swift class that you can drop directly into your Xcode project.

It does two things:

1. It logs the exact Megabytes (MB) your app is currently using.
2. It listens directly to the iOS kernel for "Memory Pressure" warnings (when the iPhone is about to force-crash your app for using too much RAM).

**Step 1: Create a new Swift file named `MemoryDiagnostics.swift` and paste this:**

```swift
import Foundation
import os

class MemoryDiagnostics {
    static let shared = MemoryDiagnostics()
    
    // 1. Check current memory usage in Megabytes
    func logCurrentMemoryUsage(context: String = "Check") {
        var info = mach_task_basic_info()
        var count = mach_msg_type_number_t(MemoryLayout<mach_task_basic_info>.size)/4
        
        let kerr: kern_return_t = withUnsafeMutablePointer(to: &info) {
            $0.withMemoryRebound(to: integer_t.self, capacity: 1) {
                task_info(mach_task_self_, task_flavor_t(MACH_TASK_BASIC_INFO), $0, &count)
            }
        }
        
        if kerr == KERN_SUCCESS {
            let usedMegabytes = info.resident_size / 1048576
            print("🧠 [Memory Log | \(context)] Current Usage: \(usedMegabytes) MB")
        } else {
            print("⚠️ [Memory Log] Failed to retrieve memory info.")
        }
    }
    
    // 2. Listen for iOS System Memory Pressure Warnings
    func setupMemoryPressureListener() {
        let source = DispatchSource.makeMemoryPressureSource(eventMask: [.warning, .critical], queue: .main)
        
        source.setEventHandler {
            let event = source.data
            if event.contains(.warning) {
                print("🚨 [MEMORY WARNING] The iPhone is struggling. App memory is too high! Free up unused images or data now.")
            } else if event.contains(.critical) {
                print("💀 [MEMORY CRITICAL] Out-Of-Memory (OOM) Crash Imminent! The system is about to kill the app!")
            }
        }
        source.resume()
        print("🛡️ Memory Pressure Listener Activated.")
    }
}

Step 2: Initialize it in your App's starting point. If you are using SwiftUI (App), put it in the init(). If using AppDelegate, put it in didFinishLaunchingWithOptions.

import SwiftUI

@main
struct YourApp: App {
    init() {
        // Start listening for memory crashes immediately
        MemoryDiagnostics.shared.setupMemoryPressureListener()
    }

    var body: some Scene {
        WindowGroup {
            ContentView()
                .onAppear {
                    // Check memory when the first screen finally loads
                    MemoryDiagnostics.shared.logCurrentMemoryUsage(context: "App Launched")
                }
        }
    }
}

Pro Tip: You can call MemoryDiagnostics.shared.logCurrentMemoryUsage(context: "Opening Note") right before you click the "Create Note" button to see if the memory spikes suddenly.


⚡ Cipher's Immediate Orders to Fix the Lag

Logging memory is observation; now we must perform surgery. Open Xcode and execute these steps:

  1. Run the "Time Profiler": Do not just guess what is slow. In Xcode, press Cmd + I (Profile), and select Time Profiler. Start the app. It will record exactly which line of code is causing the 6-second delay on launch.
  2. Hunt down DispatchQueue.main abuse: Search your codebase for any heavy database fetching (CoreData, Realm, API calls). If they are not inside a DispatchQueue.global(qos: .background).async or using Swift async/await background tasks, they are freezing your screen.
  3. Check View Re-rendering: If you are using SwiftUI, a frozen UI often means @State or @ObservedObject is updating continuously in a loop. Put a print("View is drawing") inside your Note View's body. If that prints 1,000 times a second when you click the button, you have found your infinite loop.

Report back with the MB usage from the Memory Log, Commander. Let's isolate the bottleneck and destroy it.