Xcode 7.3 Синтаксис Подчеркивание и завершение кода с помощью Swift
У меня очень сложная проблема с XCode 7.3 (однако эта проблема сохранилась с тех пор, как я установил XCode 7.2) и код Swift, и я надеюсь, что у других возникла эта проблема и вы знаете, как ее разрешить. Выделение синтаксиса и завершение кода отлично работают в файлах Objective-C, а также отлично работают при вызове других объектов Swift в коде Swift. Однако любые объекты или методы Objective-C, упомянутые в коде Swift, не выделяют подсветку синтаксиса, а XCode не будет выполнять ЛЮБЫЕ Objective-C объявленные методы или свойства. Все компилируется и работает отлично.
Я также должен добавить, что я также пробовал сделать полностью чистую установку XCode. Я удалил все полученные данные, удалил все кеши XCode и удалил файлы настроек XCode (в дополнение к явно удалению архива XCode.app перед повторной установкой).
В Swift чрезвычайно сложно развиваться. Я не хочу этого делать, но если я не могу найти способ решить эту проблему, я буду вынужден вернуться к использованию Objective-C.
Ответы
Ответ 1
Так кажется, проблема была в CocoaPods. Я использовал Cocoapods как статическую библиотеку, а не как фреймворки. Переключение на фреймворки (используя use_frameworks!
в моем подфайле) и импорт библиотек в Swift разрешил все мои проблемы. Я предполагаю, что все те заголовки сторонних библиотек были слишком большими для обработки XCode. В любом случае проблема решена. Надеюсь, это поможет кому-то в будущем.
Ответ 2
У меня та же проблема. Но, наконец, решил.
Я делаю два изменения, не уверен, что является ключевым моментом, но вы можете попробовать их все.
В той же папке, что и ваш проект. Производные данные - это модуль Кэш. Когда завершение кода перестало работать, удаление этого исправлено.
Закрыть Xcode и удалите ~/Library/Разработчик/Xcode/DerivedData/ModuleCache.
- измените значение Enable Modules
Перейдите в Настройки сборки вашей цели, затем выполните поиск Включить Модули
Если он Да, измените его на Нет, и вы можете получить некоторую сборку, просто измените его на Да.
После двух шагов выше вы должны Очистить (Shift + Command + K) ваш проект.
Теперь вы можете устранить проблему.
Ответ 3
Это может быть необязательно, но я все же хочу опубликовать это:
Во время этого сообщения самая последняя версия cocoapods (1.0.0.b.8) требует, чтобы вы определяли контейнеры для каждой цели Xcode.
В моем случае у меня была компиляция класса для целевой цели проекта и для цели тестирования. Я добавил стручок только к главной цели из-за лени.
Теперь, работая в коде класса A
, я добавил инфраструктуру pod с помощью import NAME
и попытался использовать классы фреймворка. Xcode не выделяет конкретный код, где я использую новые классы, но компиляция и работа отлично работают. В диалоговом окне завершения тип переменной был <<error type>>
Способ решения этой проблемы: в подфайле добавляет новый добавленный код ко всем целям, класс A
является членом.
Теперь Xcode находит необходимые фреймворки для всех целей и подсветки кода снова.
РЕДАКТИРОВАТЬ 1:
Возможное решение - это определение списка общих контейнеров, как в моем примере:
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
Это добавит все стручки ко всем целям и добавит все целевые объекты для тестирования. Рядом с ними я добавил "RxTest" в AppUITests.
(Избранные стручки - примеры моих проектов, не реклама:-))
Ответ 4
У нас была такая же проблема в смешанном проекте ObjC/Swift. Пробовал все предложения об удалении полученных данных и т.д., Но безрезультатно. Иногда это помогало, но не воспроизводимым образом, а через некоторое время перестало работать.
Должность Галвина в этом посте поставила меня на путь настроек сборки, связанных с модулем. Однако это была другая настройка, которая разрешила выполнение/окраску кода воспроизводимым способом: установка DEFINES_MODULE (под упаковкой) от YES до NO для нашего основного проекта была решением.
Примечания:
Ответ 5
Если ни один из вышеперечисленных не работал для вас, и вы используете Cocoapods, вы можете попробовать переключиться на Карфаген.
Я пробовал каждое предложение, которое я мог найти в Google, безрезультатно. Но последовательно Cocoapods, казалось, возникал как причина со многими хаками, пытаясь исправить это. Я читал в Карфагене и не изменяю ваш проект, заставляю вас использовать рабочее пространство или потенциально заполнять вашу папку с файлами заголовков (что путает Xcode и может вызвать разрывы синтаксиса и автозаполнение).
После создания коммутатора я еще не столкнулся с какими-либо проблемами, и, честно говоря, я предпочитаю немного накладных расходов, чтобы иметь чистое решение. Этот пост действительно загнал его домой для меня.