3

NSSharingService を使用して Catalyst アプリを追加し、macOS でアクション シートを共有しようとしましたが、エラーが発生しましNSSharingService is unavailable in Mac Catalystた。

#if targetEnvironment(macCatalyst)
extension NSSharingService { //Error: 'NSSharingService' is unavailable in Mac Catalyst
    class func shareContent ( content: [AnyObject], button: NSButton ) {
        let sharingServicePicker = NSSharingServicePicker (items: content )

        sharingServicePicker.showRelativeToRect(button.bounds, ofView: button, preferredEdge: NSRectEdge.MaxY)
    }
}
#endif

Catalyst で AppKit を使用する方法に関する記事はこちら

私の手順:

  1. macOSReaderTranslatorAppKitバンドルを作成し、Info.plist で principalClass="ReaderTranslatorAppKit.ReaderTranslatorAppKit" を設定します。
open class ReaderTranslatorAppKit: NSObject, ReaderTranslatorCommonInterfaces {
    public func test() -> String {
        "test 1"
    }
}
  1. ReaderTranslatorAppKitEmbed as macOS プラットフォームにバンドルを 追加プラグインに追加しました

  2. ReaderTranslatorCommonInterfaces共通プロトコルの作成

public protocol ReaderTranslatorCommonInterfaces {
    func test() -> String
}
  1. ReaderTranslatorAppKit を読み込むSceneDelegate.swift
...
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

    if let bundlePath = Bundle.main.builtInPlugInsURL?.appendingPathComponent("ReaderTranslatorAppKit.bundle"),
        let bundle = Bundle(url: bundlePath) {

        bundle.load()

        if let cls = bundle.principalClass as? NSObject.Type,
            let plugin = cls.init() as? ReaderTranslatorCommonInterfaces { //Error: plugin is nil
            print(plugin.test())
        }
        print(bundle)
    }
}

結果 キャスト時に nil を取得しcls.init() as? ReaderTranslatorCommonInterfacesます。どうしたの?

アップデート

Catalyst の代わりに macOS プロジェクトを作成し、2 つのプロジェクト間でコードを共有し、ここで拡張機能からアプリにオブジェクトを送信するために使用CFNotificationCenterGetDarwinNotifyCenterして、問題を解決しました。UserDefaults(suitename:)

4

0 に答える 0