SwiftUI 学习 Fruta:Building a Feature-Rich App with SwiftUI

概述

  • Fruta:Building a Feature-Rich App with SwiftUI(创建一个共享代码库来构建一个提供小部件和App Clip的多平台应用程序)

*举例说明用途
[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.
  • 要为ios14.2 beta 3构建这个项目,使用Xcode 12.2 beta 3。运行时要求是iOS 14.2或更高版本。要为macOS 11 Big Sur beta 10构建这个项目,使用Xcode 12.2 beta 3。

  • 要在您的设备(包括macOS)上运行,请在目标的签名与能力窗格中设置您的团队。Xcode为您管理配置文件。

  • 要在iOS或iPadOS设备上运行,请打开iOSClip。权限文件,并更新父应用程序标识符权限的值,以匹配iOS应用程序的bundle标识符。

  • 要启用in-app-purchase流程,编辑Fruta iOS“运行”方案,并选择Configuration。用于storekit配置的storekit。
    在项目设置中,在iOS目标的签名和功能选项卡上记下应用程序组名的后缀。将这个值附加到FrutaModel.swift的第27行中的App组名字符串,这样它就和签名和功能标签上的相同了。

  • Xcode项目包括可以在iOS上运行的playgrounds。要更改playgrounds的平台,请在项目导航器中选择它,打开文件检查器,并选择所需的平台。接下来,在创建和运行操场之前,选择与平台匹配的方案。

使用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.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343