首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何允许我的Xcode源代码编辑器扩展使用XPC?

如何允许我的Xcode源代码编辑器扩展使用XPC?
EN

Stack Overflow用户
提问于 2021-05-11 17:18:51
回答 1查看 198关注 0票数 2

在这篇关于Xcode源代码编辑器扩展的文章中,它提到了XPC是绕过应用程序沙箱的一种方法:

--只有Xcode才能加载扩展,才能加载扩展,而对SourceKit的调用则需要非沙箱化,这当然不会在App中运行。我们可以独立发布,并使用嵌入在扩展中的非沙箱XPC业务

但是,我不知道如何将所有内容绑定在一起才能使用XPC服务。

如何将Xcode源代码编辑器扩展绑定到XPC服务?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-11 17:18:51

多亏了LinuxSupportForXcode扩展,我才能弄明白这一点。

我将假设您遵循关于创建Xcode扩展编辑器的教程,并使主要项目成为macOS应用程序。您应该具有与以下类似的目标结构:

  • MyApp (macOS应用程序目标)
  • MyAppExtension (Xcode源代码编辑器扩展目标)

要使用具有源编辑器扩展的XPC:

  1. 档案>新>目标..。> XPC服务。 例如,我们假设它名为MyAppXPCService,其包标识符为com.example.MyAppXPCService
  2. 将XPC服务依赖项从App移动到扩展: 如果不执行此步骤,则可能会遇到扩展未执行XPCService的问题。例如,您调用了一个应该启动XPCService的命令,但是在Xcode Debug中,您的XPCService永远不会出现。
代码语言:javascript
复制
1. Go to your app's target.
2. Remove MyAppXPCService.xpc from the Frameworks and Libraries.
3. Go to your extension's target.
4. Add MyAppXPCService.xpc to Frameworks and Libraries by dragging it in from the products folder in the Project Navigator. Leave it on the default "Embed Without Signing".
  1. 在XPC服务中,将其转换为Swift,如果您希望不转换为Swift,则使用混合目标,只需创建Swift文件,并在提示时选择创建桥接头,然后在桥接头中包含主要按照这里的说明Note:
代码语言:javascript
复制
1. Create `main.swift`, `MyService.swift`, `MyServiceDelegate.swift`, `MyServiceProtocol.swift` normally.
代码语言:javascript
复制
2. Set the following build settings:
代码语言:javascript
复制
    - **Install Objective-C Compatibility Header**: `NO`
    - **Objective-C Generated Interface Header Name**: `` (blank)
代码语言:javascript
复制
1. Choose your desired **Swift Language Version** in Build Settings.
代码语言:javascript
复制
2. In Build Settings, _add_ (don't replace): `@loader_path/../../../../Frameworks` to **Runtime Search Paths**.

如果您意外地替换,并使用嵌入式框架XPC将在发射时坠毁

  1. 在扩展目标中:
代码语言:javascript
复制
1. `import MyAppXPCService` so that it can see the protocol.
代码语言:javascript
复制
2. Create the connection, **using your XPC target's bundle identifier for** **`serviceName`**:

私有let连接={ () -> NSXPCConnection in let connection = NSXPCConnection(serviceName:<#"com.example.MyAppXPCService"#>) connection.remoteObjectInterface = NSXPCInterface(with: MyAppXPCServiceProtocol.self)返回连接}()

代码语言:javascript
复制
3. Call your XPC service:

私有函数xpcUpperCase(输入:字符串){ connection.resume()延迟{ connection.suspend() }保护,让xpcService = connection.remoteObjectProxy作为?MyAppXPCServiceProtocol output {引发NSError() }xpcService.upperCaseString(输入){输出在打印(输出)}

创建连接的好处是它将自动启动您的XPC服务,而不需要运行UI应用程序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67491521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档