我正在尝试为我们用来在我们的主项目中与 Carthage 链接的 iOS 框架实现对 Swift 包管理器的支持。该框架的名称是“OptionsSheetKit”
该框架包含一个具有外观UIViewController
的副本,以及一个具有视图控制器设计的情节提要。UIAlertController
.sheet
当我从这样的框架内创建视图控制器的实例时:
let content = UIStoryboard(name: "OptionsSheet", bundle: .module).instantiateViewController(withIdentifier: PickerViewController.identifier) as? PickerViewController
该应用程序编译并运行,但是不再设置所有自定义集类,并且我在 XCode 的调试区域中收到此警告:
2021-02-23 17:19:15.606835+0200 OptionsSheetKitExample[23732:6479875] [Storyboard] Unknown class _TtC31OptionsSheetKit_OptionsSheetKit19SheetViewController in Interface Builder file.
2021-02-23 17:19:15.607631+0200 OptionsSheetKitExample[23732:6479875] [Storyboard] Unknown class _TtC31OptionsSheetKit_OptionsSheetKit19SheetViewController in Interface Builder file.
2021-02-23 17:19:15.608020+0200 OptionsSheetKitExample[23732:6479875] [Storyboard] Unknown class _TtC31OptionsSheetKit_OptionsSheetKit19SheetViewController in Interface Builder file.
2021-02-23 17:19:15.608378+0200 OptionsSheetKitExample[23732:6479875] [Storyboard] Unknown class _TtC31OptionsSheetKit_OptionsSheetKit19SheetViewController in Interface Builder file.
2021-02-23 17:19:15.608776+0200 OptionsSheetKitExample[23732:6479875] [Storyboard] Unknown class _TtC31OptionsSheetKit_OptionsSheetKit19SheetViewController in Interface Builder file.
我的Package.swift
样子是这样的:
// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "OptionsSheetKit",
platforms: [
.iOS(.v12)
],
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "OptionsSheetKit",
targets: ["OptionsSheetKit"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "OptionsSheetKit",
dependencies: []),
]
)
这是在情节提要中设置类的方式,但找不到它。
也许它无法使模块正确。
我知道 SwiftPM.storyboard
是一个已知文件,它会自动为包创建一个资源包,我可以在应用程序的主包中看到该资源包的文件名OptionsSheetKit_OptionsSheetKit.bundle
,我知道它的包标识符必须是OptionsSheetKit-OptionsSheetKit-resources
,所以它全部在那里。
我设法使其工作的唯一方法是使用 iOS 13+ 方法实例化 ViewController,UIStoryboard.instantiateViewController(identifier: String, creator: NSCoder)
但它是一种解决方法,因为我不仅要为视图控制器这样做,而且要为我在控制器的视图,这使得故事板毫无意义。
更重要的是该应用程序的最小部署目标是 iOS 12.2,所以这对我来说不会削减它。
你们知道为什么会失败吗?我尝试将type
库产品中的参数设置为,.dynamic
因为我知道动态框架可以在它们的包中包含资源,就像我之前那样,也尝试了该.static
类型,但无法使其工作。
这是一个已知的错误,还是 SwiftPM 仍然不支持这个?
提前致谢!