Я пытаюсь использовать NSSharingService, чтобы добавить свое катализаторное приложение для обмена таблицей действий в 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
Я нахожу статью об использовании AppKit в Catalyst здесь
Мои шаги:
- Создать пакет macOS
ReaderTranslatorAppKit
и установить PrincipalClass = "ReaderTranslatorAppKit.ReaderTranslatorAppKit" в Info.plist
open class ReaderTranslatorAppKit: NSObject, ReaderTranslatorCommonInterfaces {
public func test() -> String {
"test 1"
}
}
Добавлен ReaderTranslatorAppKit
пакет в Embed как платформа macOS
Создать ReaderTranslatorCommonInterfaces
общий протокол
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)
}
}
Результат Я получаю ноль при касте cls.init() as? ReaderTranslatorCommonInterfaces
. Что не так?
Обновление
Я решил свою проблему, создав проект MacOS вместо Catalyst, разделив код между двумя проектами и используя CFNotificationCenterGetDarwinNotifyCenter
и UserDefaults(suitename:)
для отправки объектов из моего расширения вприложение здесь