Подтвердить что ты не робот

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.

4b9b3361

Ответ 1

Так кажется, проблема была в CocoaPods. Я использовал Cocoapods как статическую библиотеку, а не как фреймворки. Переключение на фреймворки (используя use_frameworks! в моем подфайле) и импорт библиотек в Swift разрешил все мои проблемы. Я предполагаю, что все те заголовки сторонних библиотек были слишком большими для обработки XCode. В любом случае проблема решена. Надеюсь, это поможет кому-то в будущем.

Ответ 2

У меня та же проблема. Но, наконец, решил. Я делаю два изменения, не уверен, что является ключевым моментом, но вы можете попробовать их все.

  • удалить кеш модуля

В той же папке, что и ваш проект. Производные данные - это модуль Кэш. Когда завершение кода перестало работать, удаление этого исправлено.

Закрыть Xcode и удалите ~/Library/Разработчик/Xcode/DerivedData/ModuleCache.

  1. измените значение 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 для нашего основного проекта была решением.

Примечания:

  • Я ожидал, что это нарушит совместимость ObjC/Swift в нашем проекте, но это все еще работает. Кажется, что настройка предназначена только для базовых целей. (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html)
  • Этот проект не изменился в течение нескольких месяцев, но проблемы с завершением кода возникли совсем недавно, как для моего коллеги, так и для меня.

Ответ 5

Если ни один из вышеперечисленных не работал для вас, и вы используете Cocoapods, вы можете попробовать переключиться на Карфаген.

Я пробовал каждое предложение, которое я мог найти в Google, безрезультатно. Но последовательно Cocoapods, казалось, возникал как причина со многими хаками, пытаясь исправить это. Я читал в Карфагене и не изменяю ваш проект, заставляю вас использовать рабочее пространство или потенциально заполнять вашу папку с файлами заголовков (что путает Xcode и может вызвать разрывы синтаксиса и автозаполнение).

После создания коммутатора я еще не столкнулся с какими-либо проблемами, и, честно говоря, я предпочитаю немного накладных расходов, чтобы иметь чистое решение. Этот пост действительно загнал его домой для меня.