Xcode 8语法高亮无效。

23

以上代码在Xcode 7中具有正确的语法高亮显示。它是Objective-C + Swift的混合:

输入图像描述

我已将项目更新为支持Xcode 8,只有很少的变化:

  • 在Build Settings中支持Swift 2.3 输入图像描述

  • 并修复了与UIKit中明示解包属性相关的一些错误 输入图像描述

最终,该项目对于Xcode 8进行了成功编译。

但是Swift集成的Objective-C代码没有任何语法高亮显示,反之亦然:

输入图像描述

自动完成存在<< error type >>问题: 输入图像描述

删除派生数据不起作用,重启Xcode也不行:) CocoaPods版本为0.38.2,iOS 7


1
与https://dev59.com/VloV5IYBdhLWcg3wgu9H相关的内容。 - Andrey Banshchikov
同时,https://dev59.com/Mmkw5IYBdhLWcg3wlroa - Andrey Banshchikov
我可以修复Xcode 9的问题。您可以在以下链接找到我的解决方案:https://dev59.com/pVYO5IYBdhLWcg3wEdhO#49228790 - azun
9个回答

20

这个答案对我的一个项目有帮助:https://forums.developer.apple.com/thread/46223

我在WWDC上向一位苹果工程师寻求帮助解决了这个问题。问题源于CocoaPods... 显然,CocoaPods正在将.h文件复制到build目录中,这使得SourceKit感到困惑。我不太确定为什么.h文件会被复制-它们不需要出现在那里。所以解决方法是在您的构建阶段部分添加一个后构建脚本,以删除构建后的标头。
它应该是这样的:

function removeHeaders() {  
    find $BUILD_ROOT/Debug-iphonesimulator/  -name '*.h' -exec rm -f {} \;  
}  
removeHeaders  

1
感谢您的帖子,对我帮助很大。 - ymutlu
1
现在在Github上有一个Cocoapods问题。 - Endama
当我将一个Swift 2.3语法项目转换为Swift 3.0时,遇到了这个问题。添加那个脚本解决了我的问题。我的项目中没有任何CocoaPods。 - Adrian
1
如何添加“后构建脚本”?是在“目标->构建阶段标签->加号单击->新运行脚本阶段”选项单击吗? - Shamsiddin Saidov
1
@Shamsiddin 是的,那就是你需要放置脚本的位置。将其剪切并粘贴到那里,然后按下shift+option+command+K清除缓存,接着点击ctrl+B进行重建,之后它应该能正常工作了。如果这样还不行,尝试重新启动Xcode并重新打开你的项目。 - Adrian
又一个不使用Cocopods的理由,也就是俗称AKA(亦称) - TheCodingArt

14

问题已修复。问题与项目中存在未编译的目标有关。因此,如果您有目标例如A、B和C,而C未编译,则会导致语法高亮出现问题。


谢谢你的更新,我很高兴你解决了这个问题。虽然有时候这种情况仍会发生,但与编译目标无关,每次重启Xcode都可以解决。 - Massimo Polimeni
哇,我觉得这终于解决了我的问题!自从我最近创建了第二个构建目标以来,我一直为Xcode的功能不断出现故障而感到疯狂,但我却没有将两个因素联系在一起。谢谢你!! - Ben Baron
这确实是我的问题。尝试构建所有其他目标都指向了损坏的目标,修复它带回了智能感知。谢谢! - Viktor Kucera

8
我发现当语法高亮出现问题时,在Xcode中切换选项卡可以解决问题¯\_(ツ)_/¯ 有时我需要切换至少4个选项卡才能恢复正常。
否则,退出并重新打开。

4

我在使用Xcode 8 GM时也遇到了这个问题,而且在使用Xcode 7时也经常出现:有时自动补全功能和语法高亮会突然失效。

唯一有效的解决方案是重新启动Xcode,但有几次我需要完全重新启动我的Mac;我仍然不知道是什么原因导致了这个烦人的问题。


6
在Xcode 8中仍然存在这个问题,重新启动并不能解决这个问题。 - 0xKayvan
有时候我也会遇到这种情况,最近的Xcode版本有点太多bug了 :/ 我发现使用CleanMyMac或类似软件清理Xcode缓存非常有用,你可以试试。 - Massimo Polimeni
我知道,这很荒谬。对我来说也是一样,我开始讨厌Xcode了。 - Massimo Polimeni

3

Build Settings中将Use Legacy Swift Language Version设置为YES有助于我解决类似的问题。


1
将其翻转为YES生成了一堆编译器错误,但是将其翻转回NO,清除缓存并重新构建,对于我的自动补全问题进行了修复。 - Adrian

3

对受影响的行进行注释,然后取消注释,这对我很有效。


1
在我的情况下:
我在Finder中导航到 用户->图书馆->开发者->Xcode->派生数据。关闭你的Xcode项目,然后清除派生数据。这对我有用。
编码愉快... :)

0

对我来说,由于在构建阶段的编译源中缺少文件,代码完成/高亮功能无法正常工作。我添加了该文件,现在它可以正常工作。

希望这能帮到任何人。


-1
如其他人所述——如果我创建一个新的选项卡..或者4个然后关闭通常会这样做。有时注释一行然后立即取消注释也可以起到作用。我厌倦了使用几个按键来完成这个操作,并制作了一个简单的AppleScript来为我完成此操作。
创建一个Automator“服务”,并将此脚本添加到其中。在“系统偏好设置”下,找到您的新服务并将其分配给一个空的功能键(我使用了F1),现在您只需要按一个键就可以修复它了!
on run {input, parameters}

tell application "Xcode"
    activate
    tell application "System Events" to keystroke "t" using command down
    delay (0.5)
    tell application "System Events" to keystroke "w" using command down
    delay (0.5)
    tell application "System Events" to keystroke "/" using command down
    delay (0.5)
    tell application "System Events" to keystroke "/" using command down
    delay (0.5)
end tell


return input
end run

这是一个可行的选项,肯定有效。我还没有找到一个“正确”解决这个问题的解决方案,所以作为一个临时的修复,有什么问题呢?一箭双雕。 - Desh__

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接