iOS-使用具有部署目标的应用程序发布小部件扩展<;14
是否可以将小部件扩展包括到主机应用程序中,例如部署目标是10.3.2 这个想法是-如果设备支持扩展(即iOS>=14),它应该使用小部件,否则就不能使用(iOS<14) 问题是,如果小部件目标的部署版本与主机的部署版本不同,则甚至不可能编译该小部件目标-它们应该相等(>=14) 如果不是这样的话,我们会有这样的错误,我想是因为用于编译较旧和较新部署目标的不同Swift版本。扩展至少需要支持小部件中使用的不透明类型(iOS-使用具有部署目标的应用程序发布小部件扩展<;14,ios,swift,swiftui,ios-app-extension,Ios,Swift,Swiftui,Ios App Extension,是否可以将小部件扩展包括到主机应用程序中,例如部署目标是10.3.2 这个想法是-如果设备支持扩展(即iOS>=14),它应该使用小部件,否则就不能使用(iOS=14) 如果不是这样的话,我们会有这样的错误,我想是因为用于编译较旧和较新部署目标的不同Swift版本。扩展至少需要支持小部件中使用的不透明类型(someattribute)的Swift 5.1 Undefined symbol: _swift_getOpaqueTypeConformance Undefined symbol: _sw
some
attribute)的Swift 5.1
Undefined symbol: _swift_getOpaqueTypeConformance
Undefined symbol: _swift_getTypeByMangledNameInContextInMetadataState
上面的障碍似乎是阻止为较旧的运行时构建SwiftUI扩展的最重要障碍,因为否则我可以对整个扩展使用@available(iOS 14.0,*)
,以抑制有关不兼容的错误
因此,我的另一个想法是使用具有iOS 14的其他主机目标构建小部件,然后将生成的appex
捆绑包复制到支持iOS 10.3.2的实际目标,但我仍然不知道它是否可行,是否值得尝试
欢迎提出任何建议
UPD
找到这样的解决方案
Xcode自动解析WidgetKit并将其隐式添加为
所需的框架。将其作为可选框架手动添加已修复
这个问题
但我实际上不明白应该在哪里添加WidgetKit“手动作为可选框架”
UPD 2
我也使用linkbinary With Libraries
build phase WithOptional
status手动将WidgetKit添加到宿主目标,并对widget target进行了相同的操作,这也没有帮助,错误保持不变
奇怪的是:如果我清理并重建项目,它会被成功编译,但只有第一次,如果我第二次运行building,上述错误就会再次发生
UPD 3
好的,接近黑暗的中心。用Objective C(就像在我的主项目中一样)host 10.3.2目标和widget 14.1目标从头开始创建了一个测试项目,它只需在没有额外设置的情况下工作
问题似乎出在Cocoapod中,我最初使用的是这样的嵌套目标
target 'Host' do
shared_pods
target 'Widget' do
inherit! :search_paths
end
end
我所做的是将widget target romoving prefs继承移出,现在就可以构建了(但没有pods!)
下一个挑战是让widget使用主机应用程序使用的pod
UPD 4
试图以各种组合向所有受影响的目标添加/删除$(工具链目录)/usr/lib/swift-5.0/$(平台名称)
,但未成功。添加swift-5.2
,但如果$(TOOLCHAIN_DIR)/usr/lib
中不存在此类目录,该如何工作
swift-version
给了我苹果swift 5.3.2版
,但有些人说没有必要在我的项目中使用这个版本通过将Xcode从12.4升级到12.5并将系统升级到Big-Sur(因为Xcode需要它)来解决。我不知道这背后有什么魔力,也许是有着迅捷版本的东西
- 无需
$(工具链目录)/usr/lib/swift-5.0/$(平台名称)
- 小部件代码无需
@可用(iOS 14.0,*)
- 无需对Podfile
post\u安装中的小部件pod目标使用
config.build\u设置['IPHONEOS\u部署\u目标]='14.1'
target 'Host' do
shared_pods
end
target 'Widget' do
shared_pods # another errors uhhh
end