为什么我的 Xcode 插件(例如 clang 格式)在更新到 Xcode 的新版本后不再工作?

Why are my Xcode plugins (such as clang format) installed with Alcatraz no longer working after updating to new version of Xcode?

今天我更新到 Xcode 6.3.2,但我无法 运行 Clang 代码格式化 – 好像还没有安装。每次更新 Xcode 时,我都必须重新安装 Alcatraz 和大部分软​​件包(顺便说一句,为什么?)以使它们在新版本的 Xcode 上工作。

这次我重新安装了所有软件包(如 VVDocumenter、颜色选择器等),但 ClangFormat 不起作用——它甚至没有出现在 "Edit" 菜单中。知道为什么吗?

顺便说一句。我试图重新启动 Xcode 以及 Mac 本身 :)

编辑(解决方案):

Xcode6.3.x的解决方案(如果这不起作用,请使用下面的通用解决方案。)

在终端中,输入以下内容:

find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add 9F75337B-21B4-4ADC-B558-F9CADF7073A7

一般解

通过终端获取新的UUID:

defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID

将新的 UUID 添加到插件中的 DVTPlugInCompatibilityUUIDs 键(你的 xcplugin 文件 --> 显示包内容 --> Contents/Info.plist

通常,以下方法会有所帮助:Re-install Alcatraz、重新启动 Xcode、卸载并重新安装您的插件。有时重新启动 Xcode 会有所帮助。这对我有用。

如果您的插件仍然没有出现,问题可能是您的新 Xcode 的兼容性密钥尚未包含在您的插件的兼容性密钥列表中。

可能的解决方案:

  • 等待包含 Xcode
  • 新 UUID 的插件更新
  • 如果您不想等待(例如,如果您安装了 Xcode 的测试版并且插件更新时间太长),您可以手动添加新的 UUID Xcode 到插件(有关如何执行此操作的详细信息,请参见下文)。当然,不能保证您的插件届时可以正常工作。如果 Xcode 已经改变以至于它真的不再兼容了,那当然是行不通的。但是,通常它会起作用。

添加新的UUID到插件:

如果您使用 Xcode 6.3.2,请在终端中输入以下内容:

find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add E969541F-E6F9-4D25-8158-72DC3545A6C6

对于Xcode的其他版本,通过终端获取Xcode的UUID:defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID并用它来更新上面find命令中的UUID。

[除了使用上面的 find 命令,您还可以手动将新的 UUID 添加到插件包中的 DVTPlugInCompatibilityUUIDs 键(您的 xcplugin 文件 --> show包装内容 --> Contents/Info.plist)]

来源:GitHub and post by "ianmasters"

在终端中使用Xcode的"all version"的通用代码,然后重启Xcode,就可以了:

find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add defaults read /Applications/Xcode.app/Contents/Info.plist DVTPlugInCompatibilityUUID

请注意代码合并了其他答案的代码

如果你的Xcode版本是6.3.2,上面的代码等于

find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add E969541F-E6F9-4D25-8158-72DC3545A6C6

当您的 Xcode 为 6.3 或 6.3.1 时,等于:

find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add 9F75337B-21B4-4ADC-B558-F9CADF7073A7

你会发现不同的是最后的代码,它是Xcode的uuid,所以我们可以得到Xcode的新uuid使用这个

 defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID

并在该代码的末尾进行更改。

如果还是不行,你可能没有在Alcatraz的提示中选择"load bundle"

如果你选择了"skip bundle",你可以这样做

  1. reload Alcatraz
  2. 又会出现Alcatraz的提示,选择load bundle
  3. 在热量中使用上面的代码
  4. 重新加载Xcode
  5. 成功!!

编辑: 我试过了,只需要再次在终端中使用通用代码,警报会再次显示,选择它,就可以了。

插件兼容性密钥不适用于 6.3.2 / 6.4.b2

让我们看看这个线程:https://github.com/omz/Dash-Plugin-for-Xcode/issues/37 - 他们有问题和解决方案。

总体总结: XCode确实改变了加载插件的方式(自定义插件首先加载),因此有必要进行一些代码更改。

尝试从源代码构建而不是使用 curl 命令安装!出于某种原因,我对 curl 命令所做的任何事情都对我不起作用,包括更改 UUID。所以我从插件文件夹中删除了所有内容并下载了母版并进行了构建。重新启动 xCode 并接受对话框。也许这会对你有所帮助。

事实证明,Xcode 现在有一个您启用的捆绑包的白名单/黑名单。您可以通过 运行:

从终端查看
$ defaults read com.apple.dt.Xcode DVTPlugInManagerNonApplePlugIns-Xcode-6.3.2
{
allowed =     {
};
skipped =     {
    "com.mneorr.Alcatraz" =         {
        version = 1;
    };
    "com.onevcat.VVDocumenter-Xcode" =         {
        version = 1;
    };
    "com.travisjeffery.ClangFormat" =         {
        version = 1;
    };
};}

坏消息是加载包的提示不会再次显示,即使您重新安装 Alcatraz。修复很简单,只需删除白名单/黑名单 运行:

defaults delete com.apple.dt.Xcode DVTPlugInManagerNonApplePlugIns-Xcode-6.3.2

并重新打开 Xcode 以再次提示(这次请确保单击“加载包”)。

原始 post 这里: 在 Xcode 6.3.2 或更高版本

上重新启用 Alcatraz

从 Xcode 6.3.2

开始这对我有用

http://pablin.org/2015/05/27/re-enable-alcatraz-on-xcode-6-dot-3-2-or-newer/

您可以使用此脚本在更新后更新您的 Xcode 插件(适用于 Xcode 7.3):

#!/bin/bash
xcodeUUID=`defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID`
echo $xcodeUUID
find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add $xcodeUUID

或从我的要点中复制 https://gist.github.com/MaciejGad/86302b6b8bdb1ee25115

安装Xcode6.4后,我选择"Skip Bundles",找不到Alcatraz

首先我尝试添加 UUID,但 Alcatraz 也不起作用;

然后试试这个:

defaults read com.apple.dt.Xcode DVTPlugInManagerNonApplePlugIns-Xcode-6.4 

在 iTerm 中显示如下:

allowed =     {
};
skipped =     {
    "com.mneorr.Alcatraz" =         {
        version = 1;
    };
};

但是这个文件不能编辑,所以删除:

defaults delete com.apple.dt.Xcode DVTPlugInManagerNonApplePlugIns-Xcode-6.4

接下来,我重新安装Alcatraz,Xcode再次显示“Load Bundles”,这次我不会出错,选择"Load Bundles"。

此脚本既会更新插件的 UDID,又会确保提示您加载包:

#!/bin/bash
xcodeUUID=`defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID`
echo $xcodeUUID
xcodeVersion=`defaults read /Applications/Xcode.app/Contents/Info.plist CFBundleShortVersionString`
echo $xcodeVersion

find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add $xcodeUUID

defaults delete com.apple.dt.Xcode DVTPlugInManagerNonApplePlugIns-Xcode-$xcodeVersion