不使用Storyboard创建SwiftUI版iMessage应用遇视图不显示问题求助
问题排查与修复方案
核心错误点
1. Info.plist 类名配置错误
NSExtensionPrincipalClass 字段需要填写类名而非文件名,你当前填写的 MessagesViewController.swift 是文件名,系统无法通过它找到对应的控制器类。正确配置应该使用类名,加上模块名更稳妥(避免类名冲突):
<key>NSExtension</key> <dict> <key>NSExtensionPointIdentifier</key> <string>com.apple.message-payload-provider</string> <key>NSExtensionPrincipalClass</key> <string>$(PRODUCT_MODULE_NAME).MessagesViewController</string> </dict>
2. 未正确绑定子控制器生命周期
你仅将 UIHostingController 的视图添加到父视图,但没有把它作为子控制器注册到 MSMessagesAppViewController 中,这会导致SwiftUI视图的生命周期无法正常触发,最终无法显示。
修改后的控制器代码
import Messages import SwiftUI @objc(MessagesViewController) class MessagesViewController: MSMessagesAppViewController { override func viewDidLoad() { super.viewDidLoad() let hostingController = UIHostingController(rootView: SwiftUIView()) // 注册子控制器 addChild(hostingController) hostingController.view.translatesAutoresizingMaskIntoConstraints = false view.addSubview(hostingController.view) // 完成生命周期绑定 hostingController.didMove(toParent: self) NSLayoutConstraint.activate([ hostingController.view.topAnchor.constraint(equalTo: view.topAnchor), hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor), hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor), hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor) ]) } }
SwiftUI视图代码无需修改,保持原样即可。
内容的提问来源于stack exchange,提问作者coco
相关产品推荐
相关产品推荐

