admin管理员组文章数量:1335871
Is it possible to use ExtensionFoundation in iOS ?
Officially there is support but only a server side.
For example:
public protocol TextTransformExtension: AppExtension {
/// Transform the input string according to your extension's behavior
/// - Parameter input: The text entered by the user in TextTransformer.
/// - Returns: The output that should be shown to the user, or `nil` if the transformation failed.
func transform(_ input: String) async -> String?
}
/// Configuration for extensions that conform to the ``TextTransformExtension`` protocol.
public struct TextTransformExtensionConfiguration<E: TextTransformExtension>: AppExtensionConfiguration {
let appExtension: E
let server: TextTransformerExtensionXPCServer
/// Creates a default configuration for the given extension.
/// - Parameter appExtension: An instance of your custom extension that conforms to the ``TextTransformExtension`` protocol.
public init(_ appExtension: E) {
self.appExtension = appExtension
self.server = TextTransformerExtensionXPCServer(with: appExtension)
}
}
@_spi(TextTransformerSPI)
@objc public protocol TextTransformerXPCProtocol: NSObjectProtocol {
func transform(input: String, reply: @escaping (String?) -> Void)
}
@objc final class TextTransformerExtensionXPCServer: NSObject, TextTransformerXPCProtocol {
let implementation: any TextTransformExtension
init(with implementation: some TextTransformExtension) {
self.implementation = implementation
}
func transform(input: String, reply: @escaping (String?) -> Void) {
Task {
let result = await implementation.transform(input)
await MainActor.run { reply(result) }
}
}
}
extension TextTransformExtensionConfiguration {
public func accept(connection: NSXPCConnection) -> Bool {
connection.exportedInterface = NSXPCInterface(with: TextTransformerXPCProtocol.self)
connection.exportedObject = server
connection.resume()
return true
}
}
but for connection we need to use something like
let process: AppExtensionProcess // only available on macOS let connection = try process.makeXPCConnection()
or
viewController.makeXPCConnection()
where viewController
is EXHostViewController // only available on macOS
Is there any way to do it for iOS ? How to make a connection between iOS app and some app extension ?
本文标签: swift ExtensionFoundationExtensionKit in iOSStack Overflow
版权声明:本文标题:swift ExtensionFoundationExtensionKit in iOS - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742397935a2467299.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论