我正在尝试为我们在主项目中使用Carthage链接的iOS框架“OptionsSheetKit”实现对Swift Package Manager的支持。
该框架包含一个
当我从框架内部像这样创建视图控制器的实例:
应用程序已编译并运行,但所有自定义设置类都未设置,并且我在XCode的调试区域中收到此警告:
这是在故事板中设置的类,但它无法找到。 也许它无法正确获取模块。我知道对于SwiftPM,.storyboard是一个已知的文件,并且它会自动为包创建资源束,在应用程序的主要资源束中可以看到该资源束,文件名为OptionsSheetKit_OptionsSheetKit.bundle,我知道它的束标识符必须是OptionsSheetKit-OptionsSheetKit-resources,所以一切都在那里。我成功地使其工作的唯一方法是使用iOS 13+方法UIStoryboard.instantiateViewController(identifier:String,creator:NSCoder)来实例化ViewController,但这是一个解决方法,因为我不仅需要为视图控制器这样做,而且还需要为每个自定义类设置控制器的视图,这使得故事板没有意义。更重要的是,应用程序的最小部署目标是iOS 12.2,所以这对我来说行不通。你们有想法为什么会失败吗?我尝试将库的产品中的type参数设置为.dynamic,因为我知道动态框架可以在它们的bundle中拥有资源,就像我以前做的那样,也尝试了.static类型,但两种方式都无法使其工作。
这是一个已知的错误,还是SwiftPM仍不支持这个功能?谢谢!
该框架包含一个
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+方法UIStoryboard.instantiateViewController(identifier:String,creator:NSCoder)来实例化ViewController,但这是一个解决方法,因为我不仅需要为视图控制器这样做,而且还需要为每个自定义类设置控制器的视图,这使得故事板没有意义。更重要的是,应用程序的最小部署目标是iOS 12.2,所以这对我来说行不通。你们有想法为什么会失败吗?我尝试将库的产品中的type参数设置为.dynamic,因为我知道动态框架可以在它们的bundle中拥有资源,就像我以前做的那样,也尝试了.static类型,但两种方式都无法使其工作。
这是一个已知的错误,还是SwiftPM仍不支持这个功能?谢谢!