我有一个具有两种风格的 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
?
简单地说,您需要每个环境的“主动编译条件”。
步骤:
转到@main(WidgetBundle)WidgetBundle
像这样添加预处理 if 条件 Main 带有预处理 if 条件
@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
希望有用☺️