MVPμ μλ μ λ¬μ λͺ¨λ μ±μ λν μμ ν λ€μ΄ν°λΈ μ°λμ΄ μλλΌ, μΊ‘μ² μ΄λ―Έμ§λ₯Ό ν΄λ¦½λ³΄λμ 볡μ¬ν λ€ λμ μ±μ λΆμ¬λ£κΈ° μ΄λ²€νΈλ₯Ό 보λ΄λ λ°©μμΌλ‘ ꡬννλ€.
μλ μ λ¬ μμ:
- μΊ‘μ² μ΄λ―Έμ§λ₯Ό
NSPasteboardμ 볡μ¬νλ€. - μ€μ μ΄
μ μ₯ λ° μ λ¬μ΄λ©΄ μΊ‘μ² μ΄λ―Έμ§λ₯Ό μ μ₯νλ€. - μ€μ μ μ λ¬ λμ λ°©μμ λ°λΌ λμμ κ²°μ νλ€.
λ§€λ² μ± μ νμ΄λ©΄ μ€ν μ€μΈ μ± λͺ©λ‘κ³Ό μλμ° λͺ©λ‘μ 보μ¬μ£Όκ³ μ¬μ©μκ° λμμ μ ννλ€.κ°μ₯ μ΅κ·Ό μ¬μ© μ±μ΄λ©΄ μΊ‘μ² μμ μ§μ μ νμ±νλμ΄ μλ μ±μ λμμΌλ‘ μ¬μ©νλ€.μ§μ ν μ±μ΄λ©΄ μ€μ μ μ μ₯λ μ±μ λμμΌλ‘ μ¬μ©νλ€.- Traceκ° λμ μ± λλ μ νν μλμ°λ₯Ό νμ±ννλ€.
κ°μ₯ μ΅κ·Ό μ¬μ© μ±μμλ λ³λ μλμ° μ ν μμ΄ μ± μ 체 νμ±νλ₯Ό μννλ€.μ§μ ν μ±μμλ μ€μ μ λ°λΌ κ°μ₯ μ΅κ·Ό μ¬μ© μλμ°λ₯Ό νμ±ννκ±°λ μ§μ μ±μ μλμ° μ ν μ°½μ νμνλ€.- Traceκ° λΆμ¬λ£κΈ° μ΄λ²€νΈλ₯Ό 보λΈλ€.
- μ μ₯λ μΊ‘μ²κ° μμΌλ©΄ μ λ¬ κ²°κ³Όλ₯Ό νμ€ν 리μ κΈ°λ‘νλ€.
μ€μ μ deliveryTargetMode κ°:
chooseEachTime: μΊ‘μ² ν μ±/μλμ° μ ν μ°½μ νμνλ€.mostRecentApp: μΊ‘μ² μμ μ§μ μ μ λ©΄ μ±μ κΈ°μ΅νλ€κ° μ ν μ°½ μμ΄ ν΄λΉ μ±μΌλ‘ μ λ¬νλ€.fixedApp: μ€μ μ μ μ₯λ μ±μΌλ‘ λ°λ‘ μ λ¬νλ€.
mostRecentAppμ μλ μΆμ²μ΄ μλλΌ μ¬μ©μκ° μ€μ μμ λͺ
μμ μΌλ‘ μ ννλ κ³ μ λμμ΄λ€. μΊ‘μ² μμ μ§μ μ λ©΄ μ±μ΄ Trace μμ μ΄κ±°λ μΌλ° μ±μ΄ μλλ©΄ μ λ¬ μ€ν¨λ‘ μ²λ¦¬νλ€.
fixedAppμ μ¬μ©μκ° μ€μ μμ μ±μ λͺ
μμ μΌλ‘ μ μ₯ν΄μΌ νλ€. μ§μ μ±μ΄ μ€ν μ€μ΄μ§ μμΌλ©΄ μ±μ μλ μ€ννμ§ μκ³ μ€ν¨ μλ¦Όμ 보λΈλ€.
μ§μ μ±μ μλμ° μ²λ¦¬ λ°©μ:
mostRecentWindow: μ§μ μ±μ main windowλ₯Ό μ°μ νμ±ννκ³ , μμΌλ©΄ μ± μ 체 νμ±νλ‘ λΆμ¬λ£κΈ°λ₯Ό 보λΈλ€.chooseWindow: μ§μ μ±μ μλμ° μ ν μ°½μ νμνλ€.
λμ μ± λͺ©λ‘μ NSWorkspaceμ μ€ν μ€μΈ μ± λͺ©λ‘μ κΈ°μ€μΌλ‘ λ§λ λ€.
νμ κΈ°μ€:
- μ± μ΄λ¦μ΄ μλ νλͺ©λ§ νμνλ€.
- λ°±κ·ΈλΌμ΄λ μ μ© νλ‘μΈμ€λ μ μΈνλ€.
- Trace μμ μ μ μΈνλ€.
- μ± μμ΄μ½κ³Ό μ± μ΄λ¦μ ν¨κ» νμνλ€.
- νμ¬ νμ± μ±μ μ°μ νμν μ μλ€.
κΈ°λ³Έ μ λ¬μ Accessibility APIλ‘ μ νν μ±μ μλμ° λͺ©λ‘μ μ½μ΄ μ¬μ©μκ° λΆμ¬λ£μ μλμ°λ₯Ό κ³ λ₯΄κ² νλ€.
νμ κΈ°μ€:
- μ°μ Core Graphics μλμ° λͺ©λ‘μΌλ‘ μ€μ νλ©΄μ λ μλ μΌλ° μλμ°λ₯Ό νμνλ€.
- νμ¬ SpaceλΏ μλλΌ νμ¬ μ¬μ©μ μΈμ μ λ€λ₯Έ Spaceμ μλ μΌλ° μλμ°λ νμνλ€.
- κ° λ³΄μ΄λ μλμ°λ Accessibility hit-testλ‘ μ‘°μ κ°λ₯ν μλμ°μ λ€μ μ°κ²°μ μλνλ€.
- Accessibilityκ° μΆκ°λ‘ λ ΈμΆν μ¨μ μλμ°λ μ€λ³΅λμ§ μκ² λ³΄κ°νλ€.
- μ λͺ©μ΄ μλ μλμ°λ μ νν μ μκ² λ체 μ΄λ¦μ λΆμ¬νλ€.
- μ λͺ©μ΄ μλ μλμ°λ λ΄λΆ 보쑰 μ°½μ΄ μμ΄κΈ° μ¬μ°λ―λ‘, λ무 μκ±°λ μ¬μ€μ ν¬λͺ ν μ°½μ μ μΈνλ€.
- νλ©΄ κΈ°λ‘ κΆνμ΄ μμΌλ©΄ ScreenCaptureKitμΌλ‘ κ° μλμ° μΈλ€μΌμ μμ±ν΄ μ ν νλ©΄μ ν¨κ» νμνλ€.
- νμ¬ λ©μΈ μλμ°λ μ°μ νμνλ€.
- μλμ°λ³΄λ€ λ κΉμ λμμ λ²μ© κ·μΉμΌλ‘ λ€λ£¨μ§ μκ³ , μ±λ³ μ λ¬ μ΄λν°κ° μ 곡ν λλ§ νμνλ€.
μλ μ λ¬μλ Accessibility κΆνμ΄ νμνλ€. κΆνμ΄ μμΌλ©΄ λμ μ± νμ±νμ λΆμ¬λ£κΈ° μ΄λ²€νΈ μ μ‘μ μλνμ§ μλλ€.
κΆνμ΄ μμ λμ λμ:
- μ λ¬μ© ν΄λ¦½λ³΄λλ μ μ§νλ€.
- μ€μ μ΄ μ μ₯μ ν¬ν¨νλ©΄ μ μ₯μ μ μ§νλ€.
- μ± μ λ¬ νλ¦μ μ²μ λ€μ΄κ° λ macOS μμ¬μ΄ μ¬μ© κΆν μμ²μ νΈλ¦¬κ±°νλ€.
- Trace μ체 κΆν μλ΄ μ°½μ νμνμ§ μλλ€.
- μ μ₯λ μΊ‘μ²κ° μμΌλ©΄
deliveryStateλfailedλ‘ κΈ°λ‘νλ€.
deliveryState κ°:
none: κΈ°λ³Έ μΊ‘μ² λͺ¨λskipped: μ¬μ©μκ° λμ μ± μ νμ 건λλdelivered: λμ μ± νμ±νμ λΆμ¬λ£κΈ° μ΄λ²€νΈ μ μ‘μ μλ£ν¨failed: κΆν λΆμ‘±, μ± νμ±ν μ€ν¨, μ΄λ²€νΈ μ μ‘ μ€ν¨
deliveredλ λΆμ¬λ£κΈ° μ΄λ²€νΈλ₯Ό μ±κ³΅μ μΌλ‘ 보λλ€λ λ»μ΄λ€. λμ μ± λ΄λΆμμ μ΄λ―Έμ§κ° μ€μ λ‘ μ²¨λΆλμλμ§κΉμ§ 100% 보μ₯νμ§ μλλ€.
μ€ν¨λ‘ κΈ°λ‘νλ κ²½μ°:
- Accessibility κΆνμ΄ μμ
- λμ μ±μ΄ μ΄λ―Έ μ’ λ£λ¨
- κ°μ₯ μ΅κ·Ό μ¬μ© μ±μ μ°Ύμ μ μμ
- μ§μ μ±μ΄ μ€μ λμ§ μμ
- μ§μ μ±μ΄ μ€ν μ€μ΄μ§ μμ
- λμ μ± νμ±ν μ€ν¨
- λΆμ¬λ£κΈ° μ΄λ²€νΈ μ μ‘ μ€ν¨
μ€ν¨ μ μ¬μ©μμκ² μ 곡ν νλ:
- μ§μ λΆμ¬λ£κΈ° μλ΄
- Finderμμ νμΌ λ³΄κΈ°
MVPμμλ λν μ±μμ λΆμ¬λ£κΈ° κΈ°λ° μ λ¬μ κ²μ¦νλ€.
μ°μ λμ:
- Slack
- Notion
- TextEdit
λμ μ±λ§λ€ λΆμ¬λ£κΈ° μμ© λ°©μμ΄ λ€λ₯Ό μ μμΌλ―λ‘, μλ μ λ¬μ μ±λ³ 컀μ€ν κ·μΉ μμ΄ best-effort λ°©μμΌλ‘ λ€λ£¬λ€.
MVP μ΄ν νμ₯μ 첫 μμΈλ‘ cmuxλ μ μ© μ΄λν°λ₯Ό λλ€.
- κΈ°λ³Έ μ± μ λ¬μ macOS μλμ°κΉμ§λ§ μ ννλ€.
cmuxλ μ체 CLIλ₯Ό μ¬μ©ν΄window -> workspace -> pane -> surfaceκ³μΈ΅μ μ½λλ€.cmuxλμ μ ν νλ©΄μλ surface λ¨μ λμμ μΆκ°λ‘ νμνλ€.- μ¬μ©μκ° surfaceλ₯Ό κ³ λ₯΄λ©΄ Traceκ°
cmuxCLIμsurface.focusλ₯Ό νΈμΆν λ€ λΆμ¬λ£κΈ°λ₯Ό 보λΈλ€. cmuxCLIλ₯Ό μ°Ύμ μ μκ±°λ socket μ κ·Όμ΄ λ§ν μμΌλ©΄ μ μ© λμμ νμνμ§ μκ³ , κΈ°λ³Έ μλμ° μ νλ§ μ μ§νλ€.
- μμ£Ό μ°λ μ± μ¦κ²¨μ°ΎκΈ°
- μΆκ° μ±λ³ μ λ¬ μ΄λν°
- νΉμ μ±μ μ²¨λΆ API λλ URL scheme μ°λ
- μ λ¬ μ±κ³΅ μ¬λΆλ₯Ό μ±λ³λ‘ λ μ νν νμΈνλ λ°©μ