SwiftUI/앱 구조

앱 구조 및 동작 - SwiftUI로 기능이 풍부한 앱 빌드

다큐먼트 2022. 8. 10. 14:18

https://developer.apple.com/documentation/swiftui/fruta_building_a_feature-rich_app_with_swiftui

iOS 15.4+          iPadOS 15.4+         macOS 12.3+        Xcode 13.3+

 

 

개요

메모

이 샘플 프로젝트는 WWDC21세션 10107:Platforms State of the Union, 10012: What's New in App Clips, 10013:Build Light and Fast App Clips, 10220:Localize your SwiftUI App 와 연결되어 있습니다.

 

프루타 샘플 프로젝트는 위젯, 앱 클립 및 현지화와의 같은 SwiftUI 플랫폼 기능을 구현하는 macOS, iOS및 iPadOS용 앱을

빌드합니다. 사용자는 스무디를 주문하고, 좋아하는 음료를 저장하고, 보상을 받고, 레시피를 탐색할 수 있습니다. 여기에는 두 가지 유형의 앱 대상이 포함됩니다.

 

  • 개인 팀 서명을 사용하여 빌드하는 간단한 iOS 및 macOS앱 대상입니다. 이 iOS 앱은 시뮬레이터에서 실행되며 장치에 설치되면 장치에 설치하려면 표준 Apple ID만 필요합니다. 간단한 앱은 풍부하고 현지화된 SwiftUI 인터페이스를 구현합니다. 사용자는 스무디를 검색 및 주문하고 좋아하는 음료를 저장할 수 있습니다.

  

  • 모든 기능을 갖춘 iOS 전체 및 macOS 모든 앱 대상. 전체 iOS 앱은 시뮬레이터와 Apple 개발자 엠버십이 있는 장치에서 실행욉니다. 이 앱에는 사용자가 iOS 홈 화면이나 macOS 알림 센터에 위젯을 추가하고 보상이나 좋아하는 스무디를 볼 수 있는 위젯 확장이 포함되어 있습니다. 이 앱은 또한 앱 클립을 포함합니다. App Clip을 사용하면 사용자는 앱을 설치하지 않고도 iPhone 또는 iPad에서 일부 앱 기능을 발견하고 즉시 실행할 수 있습니다.

프루타 샘플 앱은 Sign in wifh Apple 및 passKit(Apple Pay 및 Wallet) 를 활용하여 간소화된 사용자 경험을 제공합니다.

 

 

샘플 코드 프로젝트 구성

iOS 15.4용으로 이 프로젝트를 빌드하려면 Xcode 13.3을 사용하세요. 런타임 요구 사항은 iOS 15.4 입니다. macOS 12.3

용으로 이 프로젝트를 빌드하려면 Xcode 13.3을 사용하십시오.

 

Apple 개발자 계정 없이 iOS 및 macOS 앱 대상을 구성하려면 다음 단계를 따르세요.

     

     1. 대상의 서명 및 기능 창에서 계정 추가를 클릭하고 Apple ID로 로그인합니다.

     2. 팀 드롭다운 메뉴에서 이름(개인 팀)을 선택합니다.

     3. 빌드 및 실행을 클릭합니다.

     4. iOS 및 iPadOS 기기에서는 설정 > 일반 > VPN 및 기기 관리로 이동하여 개발자 인증서를 신로해야 합니다.

 

iOS 전체 및 macOS 모든 앱을 구성하려면 다음 단계를 따르십시오.

 

     1. macOS를 포함한 기기에서 실행하려면 대상의 서명 및 기능 창에서 팀을 설정하십시오. Xcode는 프로비저닝 프로

         파일을 관리합니다.

     2. iOS 또는 iPadOS 기기에서 실행하려면 파일을 열고 iOS 앱의 번들 식별자와 일치하도록 값을 업데이트 합니다.

     3. 프로젝트 설정에서 iOS 대상의 서명 및 기능 탭에 있는 앱 그룹 이름을 기록해 둡니다. 파일에서 group.example.fruta

         를  Model.swift 값으로 대체 하십시오.

     4. 인앱 구매 흐름을 활성화하려면 Fruta iOS 실행 구성표를 편집하고 StoreKit 구성을 선택합니다.

 

 

SwiftUI에서 공유 코드베이스 생성

여러 플랫폼에서 작동하는 단일 앱 정의를 생성하기 위해 프로젝트는 App프로토콜을 준수하는 구조를 정의합니다. 속성이 구조 정의보다 우선 하기 떄문에 @main 시스템은 구조를 앱의 진입점으로 인식합니다. 계산된 본문 속성은 앱에서 사용자에게 표시하는 뷰 계층 구조가 포함된 장면을 반환합니다. SwiftUI는 플랫폼에 적합한 방식으로 장면과 그 내용의 표현을 관리합니다. WindowGroup

 

@main

struct FrutaApp: App {

              @StateObject private var model = Model()

 

               var body: some Scene {

                           WindowGroup {

                                    ContentView() 

                                                   .environmentObject(model)

                              } 

                                .commands {

                                          SidebarCommands()

                                          SmoothieCommands(model: model)

                                  }

                }

}

 

앱 클립 제공

iOS 및 iPadOS에서 프루타 앱은 전체 앱이 앱 클립으로 설치되지 않은 사용자에게 일부 기능을 제공합니다. 앱의 Xcode 프로젝트에는 앱 클립 대상이 포함되어 있으면 코드를 복제하는 대신 모든 플랫폼에서 공유되는 코드를 재사용하여 앱 클립을 빌드합니다. 공유 코드에서 프로젝트는 활성 컴파일 조건 빌드 설정을 사용하여 APPLCLIP값을 정의하지 않는 대상에 대한 코드를 제외합니다. 예를 들어, App Clip 대 상만 App Store  오버레이를 표시하여 사용자에게 전체 앱을 가져오라는 메세지를 표시합니다.

 

위젯 만들기

사용자가 iOS 홈 화면이나 macOS 알림 센터에서 일부 앱 콘텐츠를 위젯으로 볼 수 있도록 Xcode 프로젝트에는 위젯 확장에 대한 대상이 포함되어 있습니다. 둘 다 모든 대상에서 공유되는 코드를 사용합니다.

 

자세한 내용은 WidgetKit을 참조하세요.