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

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

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

这使得Swift非常难以开发。 我不想这样做,但是如果我找不到解决这个问题的方法,我将被迫回到使用Objective-C。

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

  1. 删除模块caching

在您的项目的派生数据是一个模块caching相同的文件夹。 当代码完成停止工作,删除这个固定它。

closuresXcode并删除〜/ Library / Developer / Xcode / DerivedData / ModuleCache目录。

  1. 更改启用模块值

转到目标的“ 生成设置” ,然后search“ 启用模块”

如果 ,请将其更改为“ 否” ,并且可能会出现一些构build错误,请将其更改回“ 是”

经过两步以上,你应该清理(​​Shift + Command + K)你的项目。

现在你可以解决这个问题。

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

这可能没有必要了,但我仍然想发布这个:

在这篇文章发布的时候,最新版本的cocoapods(1.0.0.beta.8)要求你为每个Xcode目标定义pod。

就我而言,我有一个针对项目目标和testing目标的类编译。 因为懒惰,我只在主要目标上加了一个吊舱。

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

解决此问题的方法是: 在Podfile中将新添加的窗格添加到所有目标,类A是其成员。

现在,Xcode为所有目标和代码高亮再次find必要的框架。

编辑1:

一个可能的解决scheme是定义一个共享窗格的列表,如我的例子:

 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 

这将把所有的豆荚添加到所有的目标,并将所有的testing豆荚添加到目标。 在这些旁边,我添加了“RxTest”到AppUITests。

(select豆荚是我的项目的例子,没有广告打算:-))

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

笔记:

如果以上都没有为你工作 ,你正在使用Cocoapods,你可以尝试切换到迦太基。

我试着在Google上find的每一个build议都无济于事。 但一直坚持Cocoapods似乎是一个原因与许多黑客试图解决它。 我一直在阅读迦太基,如何不修改您的项目,迫使您使用工作区,或可能填充您的生成文件夹的头文件(这会混淆Xcode,可以导致语法高亮和自动完成破坏)。

做完开关后,我还没有遇到任何问题,说实话,我更喜欢有一点干净的解决scheme。 这篇文章真的把它开回家了。