Skip to content

v1.1.1

Choose a tag to compare

@dongx0915 dongx0915 released this 20 May 05:28
· 17 commits to main since this release

๐ŸŽฏ Highlights

  • ํšŒ์ „ ์ •์ฑ… ๊ฒฉ๋ฆฌ โ€” ๋ณ„๋„ UIWindow ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ํ˜ธ์ŠคํŠธ ์•ฑ keyWindow ์— ๋ผ๋ฒจ view ๋งŒ ์ง์ ‘ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. iOS multi-window ํšŒ์ „ ๊ฒฐ์ •์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ผ์ ˆ ๊ด€์—ฌํ•˜์ง€ ์•Š์•„, portrait ์ž ๊ธˆ ํ™”๋ฉด์ด ํ’€๋ฆฌ๊ฑฐ๋‚˜ ์ˆ˜๋™ ์ „์ฒดํ™”๋ฉด์ด ์•ˆ ๋จน๋Š” ํšŒ๊ท€๋ฅผ ๊ทผ๋ณธ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • install API + enabled ํŒŒ๋ผ๋ฏธํ„ฐ โ€” 1ํšŒ ์…‹์—… ๋ชจ๋ธ ๋ช…ํ™•ํ™”. ๋””๋ฒ„๊ทธ ์˜ค๋ฒ„๋ ˆ์ด on/off ๋ฅผ ์‚ฌ์šฉ์ž ์„ค์ • ํ† ๊ธ€์— ์—ฐ๊ฒฐํ•˜๋ฉด ์žฌ์‹œ์ž‘ ์‹œ ์ƒˆ ๊ฐ’์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์…€ ์ž„๋ฒ ๋“œ SwiftUI host ๊ฐ€ ๋ผ๋ฒจ์„ ๊ฐ€๋กœ์ฑ„๋Š” ํšŒ๊ท€ ํ”ฝ์Šค โ€” ์…€์ด UIHostingController ๋ฅผ contentView ์—๋งŒ add ํ•œ ๊ฒฝ์šฐ ๋ผ๋ฒจ์ด SwiftUI rootView ์ด๋ฆ„์œผ๋กœ ๋ฐ”๋€Œ์–ด๋ฒ„๋ฆฌ๋˜ ๋ฌธ์ œ๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

โš ๏ธ Breaking changes

  • ScreenNameViewer.start(_:) โ†’ ScreenNameViewer.install(enabled:_:) ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ
  • ScreenNameViewer.stop() public API ์ œ๊ฑฐ โ€” 1ํšŒ ์„ค์น˜ ๋ชจ๋ธ์ด๋ผ ๋Ÿฐํƒ€์ž„ ์ข…๋ฃŒ API ๋ถˆํ•„์š”

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

// Before
ScreenNameViewer.start { config in
    config.verticalPosition = .top
}

// After
ScreenNameViewer.install { config in
    config.verticalPosition = .top
}

// ์‚ฌ์šฉ์ž ์„ค์ • ํ† ๊ธ€๊ณผ ์—ฐ๊ฒฐ
ScreenNameViewer.install(
    enabled: UserDefaults.standard.bool(forKey: "debug_overlay_enabled")
) { config in
    // ...
}

enabled: false ๋ฉด swizzling ์ž์ฒด๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ† ๊ธ€ ๋ณ€๊ฒฝ ํ›„ ์•ฑ ์žฌ์‹œ์ž‘ ์‹œ ์ƒˆ ๊ฐ’์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค(์žฌ์‹œ์ž‘์€ ์ ์šฉ ์•ฑ์ด ์ฒ˜๋ฆฌ).

๐Ÿ› Bug fixes

  • ์…€ contentView ์—๋งŒ add ๋œ UIHostingController ๊ฐ€ ํ™”๋ฉด ๋‹จ์œ„ VC ๋กœ ์ž˜๋ชป ํŒ์ •๋˜์–ด ๋ผ๋ฒจ์ด SwiftUI rootView ์ด๋ฆ„์œผ๋กœ ๋ฐ”๋€Œ๋Š” ํšŒ๊ท€ ์ฐจ๋‹จ (isScreenLevel ๊ฐ€๋“œ ๊ฐ•ํ™”)
  • ํ˜ธ์ŠคํŠธ ์•ฑ์ด portrait ๋กœ ์ž ๊ทผ ํ™”๋ฉด์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ ์šฉ ์‹œ ๋””๋ฐ”์ด์Šค๊ฐ€ ํšŒ์ „ํ•ด๋ฒ„๋ฆฌ๋Š” ํšŒ๊ท€ ์ฐจ๋‹จ
  • ํ˜ธ์ŠคํŠธ ์•ฑ ํ”Œ๋ ˆ์ด์–ด์˜ ์ˆ˜๋™ ์ „์ฒดํ™”๋ฉด ์ „ํ™˜ / ์ „์ฒดํ™”๋ฉด์—์„œ ๋’ค๋กœ๊ฐ€๊ธฐ ์‹œ portrait ๋ณต๊ท€๊ฐ€ ๋ง‰ํžˆ๋Š” ํšŒ๊ท€ ์ฐจ๋‹จ

๐Ÿ›  Internal / Refactor

  • OverlayWindow + OverlayViewController ์ œ๊ฑฐ โ†’ OverlayView (UIView) ํ•œ ํด๋ž˜์Šค๋กœ ํ†ตํ•ฉ
  • SceneOverlay ๊ฐ€ host keyWindow ๋ฅผ ์ถ”์ ํ•˜๊ณ  keyWindow ๊ต์ฒด ์‹œ ์ž๋™ ์ด๋™ (UIWindow.didBecomeKeyNotification)
  • ๋ชจ๋‹ฌ/์‹œํŠธ z-order ๋Š” ๋งค render ์‚ฌ์ดํด๋งˆ๋‹ค bringSubviewToFront ๋กœ ์œ ์ง€
  • ๋ผ๋ฒจ ์˜์—ญ ์™ธ ๋ชจ๋“  ํ„ฐ์น˜๋Š” point(inside:with:) โ†’ false ๋กœ ํ†ต๊ณผ โ€” ํ˜ธ์ŠคํŠธ ์ œ์Šค์ฒ˜ ์˜ํ–ฅ 0

โœ… Tests

68 tests passing. ์‹ ๊ทœ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ 2๊ฑด ์ถ”๊ฐ€:

  • testParentlessAppleHostIsNotScreenLevel โ€” ์…€ ์ž„๋ฒ ๋“œ host ๊ฐ€ push ๋˜์ง€ ์•Š์Œ์„ ํšŒ๊ท€ ๋ฐฉ์ง€
  • testTouchPassthrough โ€” ๋ผ๋ฒจ view ๊ฐ€ ํ˜ธ์ŠคํŠธ ํ„ฐ์น˜๋ฅผ ๊ฐ€๋กœ์ฑ„์ง€ ์•Š์Œ์„ ํšŒ๊ท€ ๋ฐฉ์ง€

๐Ÿ“‹ RELEASE ๋นŒ๋“œ ๊ฒฉ๋ฆฌ

  • ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ(swizzling, UIView ์ƒ์„ฑ, NotificationCenter ๊ตฌ๋…, Tracker ์ธ์Šคํ„ด์Šคํ™”)๋Š” #if DEBUG ๋ณดํ˜ธ
  • public API ๋ณธ๋ฌธ ๋ชจ๋‘ #if DEBUG ์•ˆ โ†’ RELEASE ๋นŒ๋“œ์—์„  ๋นˆ ํ•จ์ˆ˜๋กœ ์ปดํŒŒ์ผ๋˜์–ด ๋Ÿฐํƒ€์ž„ ๋น„์šฉ 0