如何实现iOS应用程序的主屏幕小部件,并为不同的应用程序提供多种方案?

问题描述 投票:0回答:1

我有一个具有两种风格的 flutter 应用程序,我想为 iOS 部署添加主屏幕小部件,仅用于一种风格的应用程序。

我的应用程序的每种风格都对应一个唯一的捆绑 ID(

my.domain.app1
my.domain.app2
)。

我按照flutter教程在Xcode中设置了方案。

我使用 本教程在 iOS 中创建了主屏幕小部件。

我为我的主屏幕小部件提供了捆绑 ID

my.domain.app2.homeWidget
,因为我只想要 app2 的主屏幕小部件。我不需要 app1 的主页小部件。

我尝试运行app2,没有问题。
但是,我尝试调试我的 app1,它导致了这个错误。

Embedded binary's bundle identifier is not prefixed with the parent app's bundle identifier

我尝试从

homeWidget
中删除
Build Phases > Embed Foundation Extensions
,但它从 app1 和 app2 中删除了我的家庭小部件。我无法仅为一种应用程序方案保留主窗口小部件。

如何将 iOS 中的主页小部件仅分配给

my.domain.app2
而不是
my.domain.app1

ios flutter xcode home-screen-widget
1个回答
0
投票

简单地说,您需要每个环境的“主动编译条件”。

步骤:

  1. 添加“活动编译条件”:
  1. 使用您的“活动编译条件”来决定是否包含小部件:

@main
struct WidgetTestBundle: WidgetBundle {
    var body: some Widget {
        #if PROD
        WidgetTest()
        #endif
    }
}

完成🫡

附加: 对于你提到的

Embedded binary's bundle identifier is not prefixed with the parent app's bundle identifier

解决办法是:

1- 选择您的小部件目标

2- 对于每个方案 prod/dev/stg 更改其捆绑标识符以匹配每种风格的应用程序捆绑标识符 +“.widgetName”,例如:

你有两种风格的开发和产品

您的产品风格中的应用程序包 ID 是

com.example.AppName
您在此方案中的小部件包 ID 应该是
com.example.AppName.WidgetName

对于第二种口味:

您的 dve 风格中的应用程序包 ID 是

com.example.AppName.dev
您在此方案中的小部件包 ID 应该是
com.example.AppName.dev.WidgetName

希望有用☺️

© www.soinside.com 2019 - 2024. All rights reserved.