Bibi's DevLog ๐ค๐
About the App Launch Sequence ์ฑ ์คํ ์ํ์ค์ ๋ํ์ฌ ๋ณธ๋ฌธ
About the App Launch Sequence ์ฑ ์คํ ์ํ์ค์ ๋ํ์ฌ
๋น๋น bibi 2022. 8. 27. 00:53Learn the order in which the system executes your code at app launch time.
์ฑ ์คํ ์ํ์ค์ ๋ํ์ฌ
์ฑ์ ์คํ ์์ ์ ์์คํ ์ด ๋น์ ์ ์ฝ๋๋ฅผ ์คํํ๋ ์์์ ๋ํด ๋ฐฐ์๋๋ค.
๊ฐ์
์ฑ์ ์คํ์ ๋ณต์กํ ๋จ๊ณ์ ์์(์ํ์ค)๋ฅผ ํฌํจํ๋ฉฐ, ๊ทธ ๋๋ถ๋ถ์ ์์คํ ์ด ์๋์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์คํ ์ํ์ค ์ค์๋, UIKit์ ์ฑ์ app delegate์ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋น์ ์ด ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ค๋นํ๊ณ , ์ฑ์ด ์๊ตฌํ๋ ํน์ ์์ ๋ค์ ์ํํ ์ ์๋๋ก ํฉ๋๋ค. ์๋์ ๊ทธ๋ฆผ์ ์ฑ์ด ์คํ๋ ๋ ๋ถํฐ ์ํ์ค๊ฐ ์๋ฃ๋ ๋ ๊น์ง, ์คํ ์ํ์ค์ ๊ฐ๋ณ์ ์ธ ๋จ๊ณ๋ฅผ ์ค๋ช ํ๊ณ ์์ต๋๋ค:
- ์ฌ์ฉ์ ๋๋ ์์คํ ์ด ๋น์ ์ ์ฑ์ ์คํํฉ๋๋ค. ๋๋ ์์คํ ์ด ๋น์ ์ ์ฑ์ ์์ด(prewarm)ํฉ๋๋ค. prewarming์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ํด์๋ Prepare Your App for Prewarming ์ ์ฐธ๊ณ ํ์ญ์์ค.
- ์์คํ
์ด Xcode๊ฐ ์ ๊ณตํ๋
main()
ํจ์๋ฅผ ์คํํฉ๋๋ค. main()
ํจ์๊ฐUIApplication
๊ณผ ์ฑ์ app delegate์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋UIApplicationMain(_*:_*:_:_:)
์ ํธ์ถํฉ๋๋ค. (=@main
)- UIKit์ด ์ฑ์
Info.plist
ํ์ผ ๋๋ Xcode ํ๋ก์ ํธ ์๋ํฐ target์ Custom iOS Target Propertiesํญ์ ๋น์ ์ด ์ง์ ํด ๋ ๊ธฐ๋ณธ ์คํ ๋ฆฌ๋ณด๋(default storyboard)๋ฅผ ๋ก๋ํฉ๋๋ค; default storyboard๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ฑ์ ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋๋๋ค. - UIKit์ด ์ฑ์ app delegate์ ์๋
application(_:willFinishLaunchingWithOptions:)
๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. - UIKit์ด ์ํ ๋ณต๊ตฌ๋ฅผ ์ํํ๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ๋ก ์ฑ์ app delegate์ view controller์ ์๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์คํํฉ๋๋ค. ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ํด์๋ About the UI restoration process๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
- UIKit์ด ์ฑ์ app delegate์ ์๋
application(_:didFinishLaunchingWithOptions:)
๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
์คํ ์ํ์ค๊ฐ ์๋ฃ๋๋ฉด, ์์คํ ์ ๋น์ ์ app delegate ๋๋ scene delegate๋ฅผ ์ฌ์ฉํด ์ฑ์ UI(user interface)๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , UI์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํฉ๋๋ค.
Prewarming(์์ด)์ ์ํด ์ฑ์ ์ค๋นํ๊ธฐ
iOS 15 ์ดํ, ์์คํ
์ ๊ธฐ๊ธฐ์ ์ํฉ์ ๋ฐ๋ผ์ ๋น์ ์ ์ฑ์ prewarm(์์ด) ํฉ๋๋ค - ์คํ ์ค์ด์ง ์์ ์ฑ์ ํ๋ก์ธ์ค๋ฅผ ์์ํด, ์ฌ์ฉ์๊ฐ ์ฑ์ด ์ฌ์ฉ ๊ฐ๋ฅํด์ง ๋ ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ ์๊ฐ์ ์ค์
๋๋ค. Prewarming์ ์ฑ์ ์์ ์ํ์ค์์ main()
์ด UIApplicationMain(_:_:_:_:)
์ ํธ์ถํ๊ธฐ ์ ๊น์ง์ ๊ณผ์ ์ ์คํ์ํต๋๋ค. ์ด๋ ์์คํ
์ด ์ฑ์ ์์ ํ ์์ํ๋ ๊ฒ์ ํ์ํ ๊ฒ์ผ๋ก ์์ธก๋๋ ์ ์์ค์(low-level) ๊ตฌ์กฐ๋ฌผ๋ค์ ๋ง๋ค๊ฑฐ๋ ์บ์ฑํ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ ธํธ
์ฑ์ ์์ ๋์ ์์คํ ์ด ํ์๋ก ํ๋ ์ ์์ค์ ๊ตฌ์กฐ๋ฌผ๋ค์ ๋ํ ๋ ๋ง์ ์ ๋ณด์ ๋ํด์๋, WWDC ์ธ์ ์์์ธ App Startup Time: Past, Present, and Future ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์์คํ ์ด ๋น์ ์ ์ฑ์ prewarmํ๊ณ ๋ ๋ค์์๋, ์ฑ์ด ์์ํ๊ณ ์ํ์ค๋ฅผ ๋ค์ ์์ํ ๋ ๊น์ง ๊ทธ ์์ ์ํ์ค๋ฅผ ๋ฉ์ถค(paused) ์ํ๋ก ๋จ๊ฒจ ๋ ์๋ ์์ผ๋ฉฐ, ๋๋ ๋ฆฌ์์ค๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๊ธฐ ์ํด prewarm๋ ์ฑ์ ๋ฉ๋ชจ๋ฆฌ๋ก๋ถํฐ ์ ๊ฑฐํ ์๋ ์์ต๋๋ค. ์์คํ ์ ๊ธฐ๊ธฐ๊ฐ ์ฌ๋ถํ ๋ ์ดํ์, ๊ทธ๋ฆฌ๊ณ ์์คํ ์ ์ํฉ์ด ํ๋ฝํ ๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๋น์ ์ ์ฑ์ prewarmํ ์ ์์ต๋๋ค.
๋ง์ฝ ๋น์ ์ ์ฑ์ด UIApplicationMain(_:_:_:_:)
์ ํธ์ถ ์ด์ ์ ์ด๋ค ์ฝ๋๋ฅผ ์คํํ๋ค๋ฉด (์๋ฅผ ๋ค์ด [load()](https://developer.apple.com/documentation/objectivec/nsobject/1418815-load)
์ ๊ฐ์ static ์ด๋์
๋ผ์ด์ ์ฒ๋ผ), ์ด๋ค ์๋น์ค๋ ์์์ด ์ฌ์ฉ ๊ฐ๋ฅํ์ง์ ๋ํ ๊ฐ์ ํ์ง ๋ง์ญ์์ค. ์๋ฅผ ๋ค์ด, ํค์ฒด์ธ ์์๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ ์ ์์ต๋๋ค. ์๋ํ๋ฉด ํค์ฒด์ธ์ ๋ฐ์ดํฐ ๋ณดํธ ์์น์ ์ ๊ธ ํด์ ๋ ๊ธฐ๊ธฐ๋ฅผ ์๊ตฌํ๋๋ฐ, prewarming์ ๊ธฐ๊ธฐ๊ฐ ์ ๊ธด ์ํ์์๋ ์ผ์ด๋ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ง์ฝ ๋น์ ์ ์ฝ๋๊ฐ ํน์ ํ ์๋น์ค ๋๋ ์์์ ์ ๊ทผ์ ์์กดํ๊ณ ์๋ค๋ฉด, ๊ทธ ์ฝ๋๋ฅผ ์์ ์ํ์ค ์ดํ์ ๋ถ๋ถ์ผ๋ก ์ฎ๊ธฐ์ญ์์ค.
์ฑ์ prewarmํ๋ฉด, prewarming ๋จ๊ณ๊ฐ ์๋ฃ๋๋ ์์ ๊ณผ ์ ์ (๋๋ ์์คํ )์ด ์ฑ์ ์์ ํ ์์ํ๋ ์์ ์ฌ์ด์ ๋ถํ์คํ ๊ธธ์ด์ ์๊ฐ์ด ์๊น๋๋ค. ์ด ์๊ฐ ๋๋ฌธ์, ์๋์ผ๋ก ์์ ์ํ์ค์ ์ฌ๋ฌ ์์ ์ signpost(ํ์ง๋ฅผ ๋จ๊ธฐ๋)ํ๊ธฐ๋ณด๋ค๋, MetricKit์ ์ฌ์ฉํด ์ฌ์ฉ์๊ฐ ์ฃผ๋ํ๋ ์์ ๋ฐ ์ฌ์์ ์๊ฐ์ ์ ํํ๊ฒ ์ธก์ ํด์ผ ํฉ๋๋ค.
๋จ์ด
- sequence ์์
- restoration ๋ณต๊ตฌ. ๋ถํ. ํ๋ณต
- specify ์ง์ ํ๋ค
- specific ํน์ ํ
- anticipation ์์. ์์ธก
- resume ๋ค์ ์์ํ๋ค. ์ฌ๊ฐํ๋ค. (๋ช ) ์ด๋ ฅ์
- periodically ์ฃผ๊ธฐ์ ์ผ๋ก. ์ ๊ธฐ์ ์ผ๋ก.
- reboot ์ฌ๋ถํ
- assumptions ๊ฐ์
- indeterminate ๋ถํ์คํ. ๋ถํ์ ์.
- phase ๋จ๊ณ
- manually ์๋์ผ๋ก
- signpost ํ์งํ (์ ์ธ์ฐ๋ค). ๋ฐฉํฅ์ ์ ์ํ๋ค.
'๐ฑ๐ iOS > ๐ Apple Developer Documentation' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift / Array] enumerated() - ๋ฐฐ์ด์ ์ด๊ฑฐํ๋ ์ํ์ค ๋ง๋ค๊ธฐ (1) | 2022.09.23 |
---|---|
[๐ / UIKit] UINavigationController (1) | 2022.09.23 |
Dictionary - subscript(_: default:) (0) | 2022.08.25 |
[Swift] .zip(_:_:) : ๋ ์ํ์ค ํฉ์น๊ธฐ (0) | 2022.06.21 |
[Foundation] UserDefaults (1) | 2022.06.17 |