问题标签 [xcode-extension]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
868 浏览

macos - Xcode Extension + Helper Mac App + Launch Arguments?

注意:这里似乎存在类似的问题:Launch Helper Application with Launch Arguments in the Sandbox,但我在下面提供了一个更详尽的示例和源代码。

简短的前言:

我想编写一个 Xcode 源代码编辑器扩展(Xcode 8 中的新功能),它在触发时会启动我正在编写的配套 Mac 应用程序,并将用户在触发扩展时正在查看的源文件的行传递给 Mac 应用程序.

然后,助手 Mac 应用程序将为用户提供一个界面,用于执行其编辑功能。当用户完成他们的更改时,他们按下某种“保存”或“提交”按钮,然后这些更改被传播回 Xcode 扩展,然后返回到原始源文件本身。

到目前为止我所拥有的:

我为我的助手 mac 应用程序创建了一个简单的 Mac 应用程序。它目前所做的只是,在它的 Application Delegate 中的 applicationDidFinishLaunching(...) 实现中,尝试构建传入的启动参数的字符串,并将该字符串显示为警报的消息正文。见下文(注意我尝试使用 ProcessInfo.processInfo.arguments 和 CommandLine.arguments):

我创建了一个相当样板的 Xcode 扩展,当通过 perform(with ...) 函数调用它时,会启动我的配套 Mac 助手应用程序。我尝试了多种方式启动助手应用程序,包括:

使用 NSWorkSpace 的 launchApplication(at: options: configuration:) :

使用自定义 Process 实例运行 bash 命令,同时尝试“open”和“fork”:

问题

我已经存档/导出了帮助程序 Mac 应用程序并将其放在 Applications 文件夹中。当我构建并运行 Xcode 扩展并对其进行测试时,帮助程序 Mac 应用程序成功启动,但它从未在 applicationDidFinishLaunching(...) 中获取自定义启动参数。

我已经在几个地方阅读过,包括此处的 NSWorkSpace 配置选项的常量键的文档:https ://developer.apple.com/reference/appkit/nsworkspacelaunchconfigurationarguments “此常量不适用于沙盒应用程序。”

当我从终端运行相同的 bash 时:

帮助应用程序成功读取传递的 --args 并将它们显示在警报中。我担心的是,由于应用沙盒,这根本不可能,但我希望还有另一种我缺少的解决方案。如果可能的话,其他一些也可以使用的替代方法:

  1. 如果可以让 Xcode 扩展本身具有接口,而不是帮助 Mac 应用程序,那么这将解决问题。但是我不相信这是可能的。

  2. 我也可以启动助手 Mac 应用程序,然后在启动后与它进行通信,尽管我再次认为沙盒问题可能会发挥作用。

就其价值而言,我主要是一名 iOS 开发人员。

谢谢你的帮助,

  • 亚当·艾斯菲尔德
0 投票
0 回答
65 浏览

xcode-extension - Xcode 代码扩展正在工作,现在它变灰了

这非常令人沮丧。我终于设法让我的 Xcode 源代码扩展在 Xcode(而不是调试器)中工作。

我已经快乐了一个星期。

我发现了几个错误。我修好了第一个,一切都继续工作。当我修复第二个 bug 时,Xcode 将我的扩展显示为灰色。

重新启动并没有解决它。Xcode-select 没有修复它。哦,现在苹果的“评论选择”也变灰了。

有没有有一个好的解决方案来确保这个工作?

0 投票
1 回答
136 浏览

swift - XCSourceEditorCommandInvocation swift 扩展导致“无法识别的选择器发送到实例”异常

当我尝试向(添加 Xcode 扩展的框架)中的类添加 swift 扩展时,XcodeKit编译器很乐意构建而没有任何错误,但是当代码运行时,我得到以下异常:

下面是可以重现异常的示例代码:

我过去在 swift 中扩展了 ObjC 类,没有任何问题,所以我有点卡在这里。

我试过了:

  • @objc在方法声明之前添加。
  • 添加public到扩展和方法。
  • 我没有扩展类集群,所以它可能不是这个问题
  • 我没有扩展协议,所以可能不是这个问题
0 投票
1 回答
151 浏览

xcode - 是否可以一次将 Xcode 扩展应用于多个源文件?如果是这样,怎么做?

我想编写一个 Xcode 扩展来扫描特定代码片段的源代码。但是,这种扩展似乎只能在每个文件的基础上工作。例如,在这里您可以看到在按下按钮时,只有当前源文件被更改。有没有办法一次扫描多个源文件?

0 投票
1 回答
392 浏览

swift - 获取 Xcode 扩展的项目位置

我正在开发一个 Xcode 扩展,它需要获取项目路径,即运行我正在制作的扩展命令的项目/工作区的路径。我试过这样的事情:

但它只是返回零。我也尝试通过 FileManager 获取它,但它只返回扩展的路径。

0 投票
1 回答
138 浏览

swift3 - Xcode 不显示来自自定义编辑器扩展的错误文本

我创建了一个自定义 Xcode 编辑器扩展,如果未满足某些条件,它可能无法运行。

具体来说,它是一个排序行命令,如果有多个选择,或者选择的行少于两行,它将拒绝运行。

我已经定义了一个符合错误的枚举来定义我的错误也符合 LocalizedError。

在我的 perform(with:completionHandler:) 方法中,我使用适当的错误之一调用完成处理程序:

我期待显示错误的文本(“选择太多”)。相反,错误显示为:

操作无法完成。(Ext01.SortLinesCommand.CommandError 错误 1。)

我这样做是否不正确,或者这是 XcodeKit 或 Xcode 中的问题?

0 投票
1 回答
195 浏览

swift - 您可以在生成的 Xcode 扩展命令的菜单项中插入分隔符(在“编辑器”菜单下)吗?

在编写 Xcode 扩展时,您定义的任何命令都会自动显示为 Xcode 的“Editor/”菜单下的一个长列表。

例如,如果你用八个命令定义了一个名为“我的第一个 Xcode 扩展”的扩展,它看起来像这样......

但是,有些命令是相关的,所以我想将它们分组,像这样......

这是我在扩展类之后的示例: NSObject, XCSourceEditorExtension {

是否可以添加分隔符?

0 投票
1 回答
91 浏览

swift4 - Xcode Source Editor Extension 可以提示用户输入吗?

简单的问题。我编写了一个 Xcode 源代码编辑器扩展,作为我的一个命令的一部分,我必须提示用户输入以知道他们想要哪个选项。

我希望有一种简单的方法来显示警报,但我猜情况并非如此,我将不得不从扩展程序(通过 URL 方案)启动应用程序,然后使用进程间通信。

就像我说的,希望我是错的。我也是?

0 投票
1 回答
330 浏览

ios - Spotify 和 Google 的 Waze 集成组件如何工作?

最近,我看到 Waze 在其地图上显示了一个 Spotify 的按钮。我想知道它是如何工作的?

在此处输入图像描述

首先,当您按下 Spotify 按钮时,您将通过 url 方案(可能是 spotify://waze?example)重定向到 Spotify,然后您批准使用并返回会话(使用 waze://)我猜测。

所以我了解绑定过程,但 Spotify 组件如何在 Waze 应用程序中工作。假设我正在按下暂停按钮或下一首歌曲。发生了什么?

我注意到一件事。要继续播放,请转到下一首歌曲或添加到收藏夹,他们正在使用我不认识的其他功能

0 投票
0 回答
47 浏览

xcode - 如何分发 Xcode 扩展?

我创建了简单的 Xcode 扩展,我想将它发送给其他团队成员。我可以将整个项目发送给他们,让他们构建它。但是如何将该扩展导出为应用程序?我只想向他们发送一些文件,他们双击它并安装了该扩展程序。感谢帮助!