Skip to content

Commit cc82c6b

Browse files
committed
Create 250702_main,_UIApplication,_UIKit,_SceneDelegate.md
1 parent dcfe9af commit cc82c6b

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# 250702 main, UIApplication, UIKit, SceneDelegate
2+
3+
`@main` vs `@UIApplicationMain`
4+
5+
7์›” 2์ผ (์ˆ˜)
6+
7+
## ๋ฐฐ๊ฒฝ
8+
9+
SwiftUI์—์„œ๋Š” `@main`์„ ์‚ฌ์šฉํ•ด ์•ฑ์˜ ์ง„์ž…์ ์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋ฉฐ, UIKit์—์„œ๋„ ๊ธฐ์กด์˜ `@UIApplicationMain` ๋Œ€์‹  `@main` ์‚ฌ์šฉ์ด ์ ์  ๊ถŒ์žฅ๋˜๋Š” ์ถ”์„ธ๋‹ค.
10+
11+
Swift Evolution ์ œ์•ˆ์„œ(SE-0383)์— ๋”ฐ๋ผ `@UIApplicationMain`์€ deprecated ๋Œ€์ƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋ฉฐ, ํ–ฅํ›„ ์ œ๊ฑฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.
12+
13+
## ํ•ต์‹ฌ ํฌ์ธํŠธ
14+
15+
### 1. @main vs @UIApplicationMain
16+
- `@UIApplicationMain`: UIKit ์ „์šฉ, main.swift ์—†์ด ์•ฑ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก UIApplicationMain(...) ํ˜ธ์ถœ ์ฝ”๋“œ๋ฅผ ์ž๋™ ์ƒ์„ฑ. ๋‹จ, SwiftUI๋‚˜ ์ปค์Šคํ…€ ์ง„์ž…์ ์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ.
17+
- `@main`: Swift ํ‘œ์ค€ ์†์„ฑ, ์–ด๋–ค ํƒ€์ž…(struct/class/enum)์ด๋“  ์•ฑ์˜ ์ง„์ž…์ ์œผ๋กœ ์ง€์ • ๊ฐ€๋Šฅ
18+
19+
> @main์€ Swift 5.3 ์ด์ƒ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, Xcode 12 ์ด์ƒ์ด ํ•„์š”ํ•˜๋‹ค.
20+
21+
### 2. UIKit + @main ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ
22+
UIKit์—์„œ `@main`์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” **๋ณ„๋„์˜ main ํ•จ์ˆ˜ ๊ตฌํ˜„์ด ๋ถˆํ•„์š”**ํ•˜๋‹ค.
23+
24+
```swift
25+
@main
26+
class AppDelegate: UIResponder, UIApplicationDelegate {
27+
// Swift ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ UIApplicationMain(...)์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑ ๋ฐ ํ˜ธ์ถœํ•จ
28+
}
29+
```
30+
31+
### 3. main ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
32+
33+
main ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:
34+
35+
- ์ปค์Šคํ…€ UIApplication ์„œ๋ธŒํด๋ž˜์Šค ์‚ฌ์šฉ
36+
- ์•ฑ ์‹œ์ž‘ ์ „ ํŠน๋ณ„ํ•œ ์ดˆ๊ธฐํ™” ๋กœ์ง ํ•„์š”
37+
- ๋Ÿฐํƒ€์ž„์— AppDelegate ํด๋ž˜์Šค๋ฅผ ๋™์ ์œผ๋กœ ๊ฒฐ์ •
38+
39+
```swift
40+
import UIKit
41+
42+
class CustomApplication: UIApplication {
43+
// ์ปค์Šคํ…€ ๋กœ์ง
44+
}
45+
46+
// @main์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋ณ„๋„์˜ main.swift ํŒŒ์ผ์—์„œ ์ง„์ž…์  ์ง์ ‘ ์ •์˜
47+
UIApplicationMain(
48+
CommandLine.argc,
49+
CommandLine.unsafeArgv,
50+
NSStringFromClass(CustomApplication.self),
51+
NSStringFromClass(AppDelegate.self)
52+
)
53+
```
54+
55+
### 4. Scene-based Lifecycle๊ณผ์˜ ํ˜ธํ™˜์„ฑ
56+
`@main`์€ SceneDelegate ๊ธฐ๋ฐ˜์˜ ์•ฑ ๊ตฌ์กฐ์—์„œ๋„ ์ •์ƒ ์ž‘๋™ํ•˜๋ฉฐ, ๋‹ค์Œ ๋‘ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜๋ฉด SceneDelegate๊ฐ€ ์ž๋™ ํ˜ธ์ถœ๋œ๋‹ค:
57+
58+
1. `AppDelegate`๊ฐ€ Scene ์ƒ์„ฑ์„ ์œ„ํ•œ `configurationForConnecting` ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๊ณ 
59+
2. Info.plist์— `UIApplicationSceneManifest` ์„ค์ •์ด ํฌํ•จ๋˜์–ด ์žˆ์„ ๊ฒƒ
60+
61+
```swift
62+
@main
63+
class AppDelegate: UIResponder, UIApplicationDelegate {
64+
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
65+
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
66+
}
67+
}
68+
```
69+
70+
```xml
71+
<key>UIApplicationSceneManifest</key>
72+
<dict>
73+
<key>UIApplicationSupportsMultipleScenes</key>
74+
<true/>
75+
<key>UISceneConfigurations</key>
76+
<dict>
77+
<key>UIWindowSceneSessionRoleApplication</key>
78+
<array>
79+
<dict>
80+
<key>UISceneConfigurationName</key>
81+
<string>Default Configuration</string>
82+
<key>UISceneDelegateClassName</key>
83+
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
84+
</dict>
85+
</array>
86+
</dict>
87+
</dict>
88+
```
89+
90+
## ๊ฒฐ๋ก 
91+
UIKit์—์„œ `@main` ์‚ฌ์šฉ ์‹œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ main ํ•จ์ˆ˜๋ฅผ ๋ณ„๋„๋กœ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ, ์ด๋Š” ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ํ˜„๋Œ€์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๋‹จ, ํŠน๋ณ„ํ•œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ main ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.
92+
93+
## ์ฐธ๊ณ  ์ž๋ฃŒ
94+
- [Apple Documentation - App Structure](https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle)
95+
- [Swift Evolution - SE-0281](https://github.com/apple/swift-evolution/blob/main/proposals/0281-main-attribute.md)
96+
- [Swift Evolution - SE-0383](https://github.com/swiftlang/swift-evolution/blob/main/proposals/0383-deprecate-uiapplicationmain-and-nsapplicationmain.md)

0 commit comments

Comments
ย (0)