You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 02:17:19