Swiftui共享扩展名不显示iOS 16

发布于 2025-02-13 04:46:41 字数 2521 浏览 1 评论 0原文

我正在尝试在选择我与应用程序捆绑的share Extension时呈现我的Swiftui视图。这先前在iOS 15中起作用,但我想知道是否有人能够阐明如何在iOS 16中修复它(授予,这可能是一个beta错误)。

我的共享扩展名是这样的:


// ShareNavigationController.swift

import Foundation
import UIKit
import SwiftUI
import Social

@objc(ShareNavigationController)
class ShareNavigationController: UINavigationController {

    override func viewWillAppear(_ animated: Bool) {
        setNavigationBarHidden(true, animated: false)
    }

    override func viewDidLoad() {
        setNavigationBarHidden(true, animated: false)
        initSwiftUI()
    }
    
    private func initSwiftUI() {
        // This is my SwiftUI View
        let rootView = AddURLView(viewModel: AddURLViewModel(extensionContext: self.extensionContext))
        let controller = UIHostingController(rootView: rootView)
        view.addSubview(controller.view)
        
        controller.view.translatesAutoresizingMaskIntoConstraints = false
        controller.view.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        controller.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        controller.view.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        controller.view.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
    }
}

属性列表看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSExtension</key>
    <dict>
        <key>NSExtensionPrincipalClass</key>
        <string>ShareNavigationController</string>
        <key>NSExtensionAttributes</key>
        <dict>
            <key>NSExtensionActivationRule</key>
            <string>SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, SUBQUERY($attachment.registeredTypeIdentifiers, $uti, $uti UTI-CONFORMS-TO &quot;public.url&quot; AND NOT $uti UTI-CONFORMS-TO &quot;public.file-url&quot;).@count &gt;= 1).@count &gt;= 1).@count &gt;= 1
</string>
        </dict>
        <key>NSExtensionPointIdentifier</key>
        <string>com.apple.share-services</string>
    </dict>
</dict>
</plist>

运行iOS 16的设备无法显示此代码的视图。在WWDC中如何处理共享扩展程序,我是否会错过一些问题,或者这是我应该提交错误的?

I'm trying to get my SwiftUI views to render when selecting the share extension I bundle with my app. This worked previously in iOS 15, but I'm wondering if anyone would be able to shed some light on how to fix it in iOS 16 (Granted, this might be a beta bug).

My share extension is outlined like this:


// ShareNavigationController.swift

import Foundation
import UIKit
import SwiftUI
import Social

@objc(ShareNavigationController)
class ShareNavigationController: UINavigationController {

    override func viewWillAppear(_ animated: Bool) {
        setNavigationBarHidden(true, animated: false)
    }

    override func viewDidLoad() {
        setNavigationBarHidden(true, animated: false)
        initSwiftUI()
    }
    
    private func initSwiftUI() {
        // This is my SwiftUI View
        let rootView = AddURLView(viewModel: AddURLViewModel(extensionContext: self.extensionContext))
        let controller = UIHostingController(rootView: rootView)
        view.addSubview(controller.view)
        
        controller.view.translatesAutoresizingMaskIntoConstraints = false
        controller.view.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        controller.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        controller.view.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        controller.view.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
    }
}

And the property list looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSExtension</key>
    <dict>
        <key>NSExtensionPrincipalClass</key>
        <string>ShareNavigationController</string>
        <key>NSExtensionAttributes</key>
        <dict>
            <key>NSExtensionActivationRule</key>
            <string>SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, SUBQUERY($attachment.registeredTypeIdentifiers, $uti, $uti UTI-CONFORMS-TO "public.url" AND NOT $uti UTI-CONFORMS-TO "public.file-url").@count >= 1).@count >= 1).@count >= 1
</string>
        </dict>
        <key>NSExtensionPointIdentifier</key>
        <string>com.apple.share-services</string>
    </dict>
</dict>
</plist>

Devices running iOS 16 aren't able to show a view with this code. Is there something I've missed in how share extensions are handled in WWDC or is this something I should file a bug for?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文