概述
- 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.