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 を使用する方法に関する記事はこちら
私の手順:
- macOS
ReaderTranslatorAppKit
バンドルを作成し、Info.plist で principalClass="ReaderTranslatorAppKit.ReaderTranslatorAppKit" を設定します。
open class ReaderTranslatorAppKit: NSObject, ReaderTranslatorCommonInterfaces {
public func test() -> String {
"test 1"
}
}
public protocol ReaderTranslatorCommonInterfaces {
func test() -> String
}
- 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:)