Swift 的 Xcode 7.3 语法高亮和代码完成问题


我在使用 XCode

7.3 时遇到了一个非常令人沮丧的问题(但是,自从我安装 XCode 7.2 以来,这个问题一直存在)和 Swift 代码,我希望其他人有这个问题并知道如何解决它。 语法高亮和代码完成在 Objective-C 文件中工作得很好,在 Swift 代码中调用其他 Swift 对象时也能正常工作。 但是,Swift 代码中提到的任何 Objective-C 对象或方法都不会得到语法突出显示,XCode 也不会完成任何 Objective-C 声明的方法或属性。 一切都可以编译和运行。

我还应该补充一点,我也尝试过完全干净地安装XCode。 我删除了所有派生数据,删除了所有XCode缓存,并删除了我的XCode首选项文件(除了在重新安装之前明显删除了 XCode.app 存档)。

这使得在 Swift 中进行开发变得极其困难。 我不想这样做,但是如果我找不到解决这个问题的方法,我将被迫回到使用Objective-C。

我有同样的问题。但最终解决了。我做了两个更改,不确定哪个是关键点,但您可以尝试所有更改。

  1. 删除模块缓存

在与项目的派生数据相同的文件夹中有一个模块 缓存。当代码完成停止工作时,删除它修复了它。

关闭 Xcode 并删除 ~/library/Developer/Xcode/DerivedData/ModuleCache 目录。

  1. 更改"启用模块"值

转到目标的"生成设置",然后搜索"启用" 模块

如果为"",请将其更改为"否",你可能会得到一些构建 错误,只需将其改回

在上述两个步骤之后,您应该清理(Shift+Command+K)您的项目。

现在,您可以解决问题。

所以问题似乎出在CocoaPods上。 我使用 Cocoapods 作为静态库而不是框架。 切换到框架(使用我的 Podfile 中的use_frameworks!)并将库导入 Swift 解决了我所有的问题。 我猜所有这些第三方库标头对于 XCode 来说太多了,无法处理。 无论哪种方式,问题现在都已解决。 我希望这对将来的某人有所帮助。

这可能不再需要了,但我仍然想发布这个:

在撰写本文时,最新版本的cocoapods(1.0.0.beta.8)要求您为每个Xcode目标定义Pod。

就我而言,我为项目目标和测试目标编译了一个类。由于懒惰,我只在主要目标中添加了一个 pod。

现在在类A的代码中,我使用 import NAME 添加了 pod 框架,并尝试使用该框架的类。Xcode 不会突出显示我使用新类的特定代码,但编译和运行工作正常。在完成对话框中,变量的类型<<error type>>

解决此问题的方法:在 Podfile 中将新添加的 Pod 添加到所有目标中,A所属的类。

现在 Xcode 为所有目标找到了必要的框架,代码突出显示再次起作用。

编辑 1:

一个可能的解决方案是定义共享 Pod 的列表,如我的示例所示:

platform :ios, '8.4'
use_frameworks!
inhibit_all_warnings!
def all_pods
    pod 'MPMessagePack'
    pod 'SwiftyDispatch'
    pod 'BFKit'
    pod 'Timepiece'
    pod 'Alamofire'
    pod 'AlamofireSwiftyJSON'
end
def testing_pods
    pod 'Quick'
    pod 'Nimble'
end
target 'App' do
    all_pods
end
target 'AppLogicTests' do
    all_pods
    testing_pods
end
target 'AppUITests' do
    pod 'RxTest'
    all_pods
    testing_pods
end
post_install do |installer|
    installer.pods_project.targets.each do |target|
        puts target.name
    end
end

这会将所有 Pod 添加到所有目标,并将所有测试 Pod 添加到目标。在这些旁边,我将"RxTest"添加到AppUITests中。

(选择的豆荚是我的项目示例,无意做广告:-) )

我们在混合的 ObjC/Swift 项目中遇到了同样的问题。尝试了有关删除派生数据等的所有建议,但无济于事。有时它会有所帮助,但不是以可重现的方式,一段时间后它停止工作。这篇文章中 Galvin 的帖子让我走上了与模块相关的构建设置的轨道。然而,这是另一种以可重现的方式解决代码完成/着色的设置:将我们主项目的DEFINES_MODULE(在打包下)从 YES 设置为 NO 是解决方案。

笔记:

  • 我预计这会破坏我们项目中的 ObjC/Swift 互操作性,但这仍然有效。似乎该设置仅用于框架目标。(https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html)
  • 这个项目设置已经几个月没有改变过了,但代码完成问题直到最近才出现,无论是对我还是我的同事来说。

如果以上方法都不适合您,并且您正在使用Cocoapods,则可以尝试切换到迦太基。

我尝试了我在谷歌上能找到的所有建议,但无济于事。但一直以来,Cocoapods似乎都是许多黑客试图修复它的原因。我一直在阅读迦太基,以及它如何不修改您的项目,强迫您使用工作区,或者可能用头文件填充您的构建文件夹(这会混淆 Xcode,并可能导致语法突出显示和自动完成中断)。

进行切换后,我还没有遇到任何问题,老实说,我更喜欢一点开销来有一个干净的解决方案。这篇文章真的让我回家了。

相关内容

  • 没有找到相关文章

最新更新