SwiftUI 学习 Fruta:Building a Feat

2020-10-24  本文已影响0人  弑神指

概述

*举例说明用途
[Fruta示例应用程序]为macOS、iOS和iPadOS构建了一个应用程序:
1.实现了swift平台的小部件或应用程序剪辑等特性。
2.用户可以点冰沙,保存喜欢的饮料,收集奖励,浏览食谱。
特点:
1.示例应用程序的Xcode项目包括小部件扩展,用户可以在iOS主屏幕或macOS通知中心添加小部件,查看自己的奖励或喜欢的奶昔
2.Xcode项目还包括一个App Clip目标。有了App Clip,用户无需安装完整的应用程序,就可以在他们的iPhone或iPad上发现并立即启动应用程序的一些功能

[Fruta示例应用程序]利用了Apple和PassKit (Apple Pay和Wallet)的登录功能,提供了一种流线化的用户体验,并通过将共享代码和本地化资产打包成Swift包来促进代码重用。*

配置示例代码项目

To build this project for iOS 14.2 beta 3, use Xcode 12.2 beta 3\. The runtime requirement is iOS 14.2 or later. To build this project for macOS 11 Big Sur beta 10, use Xcode 12.2 beta 3.

1.  To run on your devices, including on macOS, set your team in the targets’ Signing & Capabilities panes. Xcode manages the provisioning profiles for you.

2.  To run on an iOS or iPadOS device, open the iOSClip.entitlements file and update the value of the [`Parent Application Identifiers Entitlement`](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_developer_parent-application-identifiers) to match the iOS app’s bundle identifier.

3.  To enable the in-app-purchase flow, edit the Fruta iOS “Run” scheme, and select `Configuration.storekit` for StoreKit Configuration.

4.  Make a note of the App Group name suffix on the iOS target’s Signing and Capabilities tab in Project Settings. Append this value to the App Group name string in line 27 of `Mode.swift` so it’s identical to that on the Signing and Capabilities tab.

5.  The Xcode project includes playgrounds that are configured to run on iOS. To change a playground’s platform, select it in the Project navigator, open the File inspector, and select the desired platform. Next, select the scheme that matches the platform before you build and run the playground.

使用SwiftUI创建一个共享代码库

为了创建一个适用于多个平台的应用程序定义,该项目定义了一个符合app协议的结构。因为@main属性在结构定义之前,系统识别该结构作为进入应用程序的入口点。它的计算body属性返回一个窗口组场景,其中包含应用程序向用户显示的视图层次结构。SwiftUI以适合平台的方式管理场景及其内容的展示。

@main
struct FrutaApp: App {
    @StateObject private var model = FrutaModel()
    @StateObject private var store = Store()
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .environmentObject(model)
                .environmentObject(store)
        }
        .commands {
            SidebarCommands()
        }
    }
}

提供一个App Clip

在iOS和iPadOS上,[Fruta应用程序]为那些没有安装完整应用程序的用户提供了一些功能。该应用的Xcode项目包含一个App Clip,并重用跨所有平台共享的代码来构建应用剪辑,而不是复制代码。
在共享代码中,项目使用活动编译条件构建设置排除未定义APPCLIP值的目标代码。
例如,只有App Clip目标显示一个App Store覆盖层来提示用户获取完整的应用。

VStack(spacing: 0) {
    Spacer()
    
    orderStatusCard
    
    Spacer()
    
    if presentingBottomBanner {
        bottomBanner
    }
    
    #if APPCLIP
    Text("App Store Overlay")
        .hidden()
        .appStoreOverlay(isPresented: $presentingAppStoreOverlay) {
            SKOverlay.AppClipConfiguration(position: .bottom)
        }
    #endif
}
.onChange(of: model.hasAccount) { _ in
    #if APPCLIP
    if model.hasAccount {
        presentingAppStoreOverlay = true
    }
    #endif
}

更多信息,可以看
SwiftUI 学习 Creating an App Clip with Xcode
Swift 学习 Choosing the Right Functionality for Your App Clip

创建一个小部件

为了让用户在iOS主屏幕或macOS通知中心看到应用程序的小部件,
Xcode项目包含了小部件扩展的目标。两者都使用在所有目标之间共享的代码。
有关更多信息,请参见WidgetKit

This sample project is associated with WWDC 2020 sessions
10637: Platforms State of the Union,
10146: Configure and Link Your App Clips,
10120: Streamline Your App Clip,
10118: Create App Clips for Other Businesses,
10096: Explore Packages and Projects with Xcode Playgrounds,
10028: Meet WidgetKit.

上一篇 下一篇

猜你喜欢

热点阅读