์ ๋ฒ ๊ธ์์๋ App์ด Inactive, Active ์ํ๊ฐ ๋๋ฉฐ ๋ถ๋ฆฌ๋ delegate ํจ์์ ๋ํด ๋ณด์๋๋ฐ์,
์ด๋ฒ์ Preparing your UI to run in the background๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
์ฑ์ ์๋ง์ ์ด์ ๋ก Background ์ํ๋ก ์ ํ๋ฉ๋๋ค.
์ฌ์ฉ์๊ฐ foreground ์ฑ์ ์ข
๋ฃ์ํค๋ฉด ์ฑ์ UIKit์ด suspend ๋๊ธฐ์ ์ ์ ์
Background ์ํ๊ฐ ๋ฉ๋๋ค.
์์คํ
์ ์ฑ์ Background ์ํ๋ก directํ๊ฒ launch ํ๊ฑฐ๋,
Suspendend๋ ์ฑ์ Background ์ํ๋ก ์ด๋์ํต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ํ Task๋ฅผ ์ํํ ์๊ฐ์ ์ค๋๋ค.
์ฑ์ด Background ์ํ๊ฐ ๋ ๋, ๊ฐ๋ฅํ๋ฉด ์๋ฌด๊ฒ๋ ์ํ๋๊ฒ ์ข์ต๋๋ค.
์ง์ ์ํ๊ฐ foreground ์๋ค๋ฉด, ๊ณต์ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๊ณ ๋ชจ๋ Task๋ฅผ ๋ฉ์ถ๊ธฐ ์ํด Background transition
์ ์ฌ์ฉํ์ธ์.
๋ง์ผ ์ค์ํ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด Background ์ํ๋ก ์ง์
ํ๋ค๋ฉด ๊ฐ๋ฅํ ๋น ๋ฅด๊ฒ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋น ์ ธ๋์์ผ ํฉ๋๋ค.
iOS 13 ์ด์์ด๋ฉด SceneDelegate ๊ฐ์ฒด,
iOS 12 ์ดํ๋ฉด AppDelegate ๊ฐ์ฒด๋ก ์ด๋ฒคํธ๋ฅผ ํต์งํฉ๋๋ค.
์์คํ
์ ๊ฐ๊ฐ์ง ์ด์ ๋ก ์ฑ์ ๋นํ์ฑํ์ํต๋๋ค.
์ ์ ๊ฐ foreground ์ฑ์ ๋๊ฐ ๋, ์์คํ
์ Background ์ํ๋ก ์ด๋ํ๊ธฐ์ ์ ์ฑ์ ์ฆ์ ๋นํ์ฑํ ์ํต๋๋ค.
์์คํ
์ ๋ํ ์ผ์์ ์ผ๋ก ์ธํฐ๋ฝํธ๊ฐ ํ์ํ ๋ ์ฑ์ ๋นํ์ฑํ ํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด..
์์คํ
ํจ๋์ ๊ฒฝ์ฐ, ์์คํ
์ ์ ์ ๊ฐ ํจ๋์ ํด์ ํ ๋ ์ฑ์ ๋ค์ ํ์ฑํ ์ํต๋๋ค.
(๐ฉโ๐ป ์์คํ
ํจ๋์ด ๋ชจ์ง..)
๋นํ์ฑํ ๋์, UIkit์ ๋ค์ delegate ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
func sceneWillResignActive(_ scene: UIScene) { ... }
func applicationWillResignActive(_ application: UIApplication) { ... }
์ฃผ์ ์์
์ ์ผ์์ ์ง ์ํค๋ฉด์ ์ฌ์ฉ์์ data๋ฅผ ๋ณด์กดํ๊ณ ์ฑ์ quiteํ ์ํ๋ก ๋๋ ค๋ฉด ๋นํ์ฑํ ์ํ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
ํนํ!
์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ ํ๋ ๋, App์ด ์ฅ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ, ๊ณต์ ๋ฆฌ์์ค๋ฅผ ํด์ ์์ผ์ค์ผ ํฉ๋๋ค.
ํฌ๊ทธ๋ผ์ด๋ -> ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ ํ๋๊ธฐ ์ํด, ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ ๋งค์ฐ! ๋งค์ฐ! ์ค์ํฉ๋๋ค.
ํฌ๊ทธ๋ผ์ด๋๋ ๋ฉ๋ชจ๋ฆฌ์ ์์คํ
์์์ ์ฐ์ ๊ถ์ ๊ฐ์ง๋ง, ์์คํ
์ ๋ฆฌ์์ค๋ฅผ ํ ๋นํ๊ธฐ ์ํด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฑ์ ํ์ํ๋ฉด ์ ๊ฑฐํด๋ฒ๋ฆฝ๋๋ค.
์ฑ์ด ์ ์ ํฌ๊ทธ๋ผ์ด๋์ ์์ง ์๋๋ผ๋ ๊ฐ๋ฅํ ์ ์ ๋ฆฌ์์ค๋ง์ ์๋นํ๊ณ ์์๋์ง ํ์คํ ํ์ธํด์ผ ํฉ๋๋ค~!
๋ฐฑ๊ทธ๋ผ์ด๋ ์ํ๋ก ์ง์ ํ ๋, UIKit์ ๋ค์ ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
func sceneDidEnterBackground(_ scene: UIScene) { ... }
func applicationDidEnterBackground(_ application: UIApplication) { ... }
๋ฐฑ๊ทธ๋ผ์ด๋ ์ ํ์ด ์ผ์ด๋ ๋์, ์๋ ์์ ๋ค์ ํด์ผ ํฉ๋๋ค.
์ฑ์ Asset์์ ๋ฐ์ ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํ ํ์๋ ์์ต๋๋ค.
๋น์ทํ๊ฒ, NSCache
, NSDiscardableContent
ํ๋กํ ์ฝ์ ์ฑํํ๋ ๊ฐ์ฒด๋ฅผ ํด์ ํ ํ์๋ ์์ต๋๋ค.
์์คํ
์ด ์๋ค๋ค์ ์๋์ผ๋ก ์ ๊ฑฐํด์ค๋๋ค.
์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ํ์ ๊ฐ ๋ ๊ณต์ ์์์ ๊ฐ๊ณ ์์ง ์๋๋ก ํ์ญ์์ค!
๋ง์ผ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ ํ๋๋๋ฐ ์นด๋ฉ๋ผ๋ DB ๊ฐ์ ๊ณต์ ์์์ ๊ณ์ ์ ๊ทผํ๊ณ ์๋ค๋ฉด ์์คํ
์ ๋ฆฌ์์ค ํด์ ๋ฅผ ์ํด ์ฑ์ ๊บผ๋ฒ๋ฆด๊ฒ๋๋ค. (ใ
ใ
)
์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์ ์ง์
ํ๊ณ delegate ๋ฉ์๋๊ฐ ๋ฐํ๋ ํ์, UIKit์ ์ฑ์ ํ์ฌ UI์ Snapshot
์ ๋จ๊น๋๋ค.
์์คํ
์ app switcher์ ์ด ์ด๋ฏธ์ง๋ฅผ ํ์ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฑ์ ํฌ๊ทธ๋ผ์ด๋๋ก ๋ค์ ๋๋๋ฆด ๋ ์ผ์์ ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ํ์ํฉ๋๋ค.
์ฑ์ UI๋ ์ ์ ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ํฌํจํ๋ฉด ์๋ฉ๋๋ค.
์ค๋
์ท์ ์ ์ ๊ฐ ์ธ์ํ ์ ์๋ UI๋ฅผ ๋ํ๋ด์ผ ํฉ๋๋ค.
์ฑ์ ๋ฐฑ๊ทธ๋ผ์ด๋์ ์ง์
ํ ํ์๋ ์ถ๊ฐ์ ์ธ ์คํ ์๊ฐ์ ํ ๋น ๋ฐ์ง ๋ชปํฉ๋๋ค.
ํ์ง๋ง UIKit์ ์๊ฐ์ ๋ฏผ๊ฐํ ๊ธฐ๋ฅ
์ ์ง์ํ๋ ์ฑ์ ๊ฒฝ์ฐ ์คํ ์๊ฐ์ ์น์ธํฉ๋๋ค.
๋ฐฑ๊ทธ๋ผ์ด๋ ๊ธฐ๋ฅ์ ์ง์ํ๊ธฐ ์ํด์๋ XCode์์ Background Modes Capability
๋ฅผ ์ผ์ผ ํฉ๋๋ค.
๊ฐ Background Task๋ ๊ฐ์์ ์๊ตฌ์ฌํญ์ด ์์ต๋๋ค
์ฑ์ด Background ์ํ๋ก ์ ํ ๋ ๋๋
1. ๋นํ์ฑํ ๋๋น ์ง๊ธ ์ฑ ์ํ quiet! ๋ฉ์ถฐ!
2. ๋ฐฑ๊ทธ๋ผ์ด๋ ๊ฐ๊ธฐ์ ์ ๊ณต์ ๋ฆฌ์์ค ๋ค ํด์ ํด~~~!! ์๊ทธ๋ผ ์ ๊ฑฐ๋ผ ~~!!
์ด ๋ ๊ฐ์ง ๊ด์ ์ผ๋ก ๋ถ๋ฆฌ๋ Delegate ๋ฉ์๋๊ฐ ๋ค๋ฅด๋ค์.