我正在为 iOS 开发一个密码管理器。我创建了一个符合 ASCredentialProviderViewController 的 CredentialProviderViewController 类,到目前为止,我可以通过实现方法 prepareCredentialList 向用户显示自动填充上的凭据列表,如下所示:
class CredentialProviderViewController: ASCredentialProviderViewController {
override func prepareCredentialList(for serviceIdentifiers: [ASCredentialServiceIdentifier]) {
let autofillExtension = AutofillExtension(serviceIdentifiers: serviceIdentifiers, extensionContext: self.extensionContext)
let vc = UIHostingController(rootView: autofillExtension)
vc.modalPresentationStyle = .fullScreen
self.present(vc, animated: false)
}
override func prepareInterfaceForExtensionConfiguration() {
print("On prepareInterfaceForExtensionConfiguration!!!!!!!!!!!")
let autofillConfiguration = AutofillConfiguration(extensionContext: self.extensionContext)
let vc = UIHostingController(rootView: autofillConfiguration)
vc.modalPresentationStyle = .fullScreen
}
}
其中 AutoFillExtension 是 SwiftUI 视图,其中包含我想在用户从 Safari 打开自动填充时向用户显示的内容。
到目前为止一切都很好,但是,我还实现了方法 prepareInterfaceForExtensionConfiguration 来在用户从配置中启用密码管理器时向用户显示配置视图,并且显示配置视图的代码与用于呈现的代码几乎相同凭证列表。
我在 Info.plist 文件中添加了所需的 ShowsConfigurationUI 键,以通知 iOS 在用户启用密码管理器时调用方法 prepareInterfaceForExtensionConfiguration。
但是,当用户从配置中启用密码管理器时呈现的视图是一个以工作表形式呈现的空白视图。
到目前为止,AutofillConfiguration 视图是一个测试视图,如下所示:
struct AutofillConfiguration: View {
var extensionContext: ASCredentialProviderExtensionContext
var body: some View {
VStack {
Text("This is the Configuration view!!")
}
}
}
我在渲染配置视图时做错了什么?我有什么遗漏的吗?
提前致谢!
我已经设法解决了我自己的问题,正确渲染视图的代码是:
override func prepareInterfaceForExtensionConfiguration() {
print("On prepareInterfaceForExtensionConfiguration!!!!!!!!!!!")
let autofillConfiguration = AutofillConfiguration(extensionContext: self.extensionContext)
let configViewController = UIHostingController(rootView: autofillConfiguration)
self.present(configViewController, animated: true, completion: nil)
}