Привет!


Этот пост, конечно же, про AppCode 2018.1. Впрочем нет, в этот раз он еще и про первый апдейт. У нас много нового и полезного, все в картинках под катом.


Splash



Swift


Swift 4.1


Мы реализовали поддержку большей части Swift 4.1:


  • SE-0185 (Synthesizing Equatable and Hashable conformance)
  • SE-0143 (Conditional conformances)
  • SE-0190 (Target environment platform condition):Target environment platform condition
  • SE-0075 (Build Configuration Import Test):Build Configuration Import Test
  • SE-0186 (Remove ownership keyword support in protocols)

Swift 4.0 мы в основном сделали в AppCode 2017.3. Если интересно, как мы движемся к светлому будущему поддержке Swift 4.2 и 5.0, подписывайтесь на этот тикет и его следующие шаги.


Неявно подключенные модули


Здесь стоит пояснить на примере. Если подключен UIKit, значит автоматически подключены, например, CoreGraphics и Dispatch. Все символы из этих библиотек должны быть доступны. Логика подсказывает, что оба модуля должны быть явно импортированы где-то внутри UIKit. Но если мы просто рекурсивно пройдемся по всему дереву подключенных к UIKit модулей, ни одного импорта мы не найдем.


Почему? Потому что все они подключены в версии UIKit на Objective-C, а в Swift они пробрасываются неявно. AppCode строит автодополнение и навигацию исходя из дерева символов — нужных символов нет — нет ни автодополнения, ни навигации для таких библиотек без явного импорта. Думаю, можно даже не объяснять, насколько сильно это отражалось на работе IDE.


В этом релизе мы все поправили:


Implicit modules


Попутно улучшили навигацию с автодополнением для некоторых сторонних библиотек (например, Firebase и PureLayout).


Поддержка RxSwift


В основе RxSwift лежит конструкция, описанная вот тут. В AppCode 2018.1 мы научились ее корректно обрабатывать, что принесло счастливым пользователям нормальное автодополнение и навигацию:


RxSwift support


Часть проблем остается, мы над ними продолжаем работать. Всем, кто помогал нам в канале #appcode-users в слэке RxSwift, — спасибо!


Поддержка Quick


Сделали правильное и удобное отображение тестов:


Quick hierarchy


Реализовали навигацию к конкретному месту в тесте:


Quick navigation


Для Objective-C то же самое пока не сделали, перезапуск неудачных тестов пока сделать нельзя. А вот для обычных тестов на XCTest, а также Kiwi, Catch, Boost.Test и Google Test эта фича работает, вместе с кучей других.


Форматирование комментариев


Добавили несколько новых настроек в Preferences | Editor | Code Style | Swift | Code Generation для форматирования комментариев:


Comments settings


Поправили отображение многострочных комментариев в попапе Quick Documentation (F1):


Multiline comments


Смешанный код (Objective-C/Swift)


Улучшили трансляцию Objective-C/Swift:


  • Стали правильно преобразовывать типы Class и SEL/IMP, generic pointers и некоторые типы параметров отсюда из Objective-C в Swift.
  • Рефакторинг Rename и Find Usages стали работать для свойств Swift-классов, используемых в Objective-C.

Еще ускорили работу Go to class/symbol в проектах со смешанным кодом и наконец-то поправили проблемы с OCMock.


C++


Про улучшения поддержки C/C++ можно прочитать в посте @anastasiak2512 в разделе Поддержка языка C++, отличий в этой части между AppCode и CLion почти нет.


Header maps


Пока писали пост, вышла версия  AppCode 2018.1.1. В ней добавили поддержку Xcode header maps, что автоматически сделало построение символов для массы проектов (в частности, для сгенеренных с помощью BUCK) более корректным.


Беспроводная отладка


В Xcode 9 добавили беспроводную отладку, а в AppCode 2018.1 мы ее поддержали у себя. Теперь, если настроить устройство в Xcode, AppCode его тоже покажет и даст на нем отлаживаться и запускать приложение.


Симуляция местоположения


Добавили настройки для симуляции местоположения в Run/Debug Configurations:


Location in the Run Configuration


Реализовали поддержку смены местоположения при запуске и отладке приложения:


Change location on the fly


Поддержали настройки для мест, определенных пользователем:


Custom locations


Стали автоматически обрабатывать .gpx-файлы как XML:


XML assistance


Project scopes


У проектного дерева в AppCode было два режима отображения:


  • Project (показывает все файлы в составе проекта Xcode)
  • Files (все файлы в директории, в которой находится проектный файл, и связанные директории вроде DerivedSources)

Files view сильно облегчает работу с проектом. Нужно изменить какой-нибудь README.md или скрипт — переключился, открыл, отредактировал, вернулся к написанию кода. Учитывая количество плагинов для различных языков, это удобно.


Project и Files — это частный случай Project Scopes, дающих возможность отфильтровать произвольное подмножество проектных файлов. Например, чтобы отображать только часть файлов в Project view или чтобы ограничить область работы инспекций / поиска.


Теперь большинство стандартных фильтров можно использовать в AppCode:


Standard scopes


  • Project Source Files — все файлы в составе проекта Xcode.
  • Project Non-Source Files — все файлы из директории с проектным файлом, не включенные в состав проекта Xcode.
  • Changed Files — отображается в списке фильтров, только если в проекте включен контроль версий, и включает в себя все измененные файлы.
  • Default — включает в себя все файлы из дефолтного списка изменений (пользовательские списки тоже показываются):Custom changelists

В Preferences | Appearance & Behavior | Scopes можно создавать свои фильтры:


Custom scope


В Preferences | Appearance & Behavior | File Colors для каждого фильтра можно выставить свой цвет при отображении в режиме Files:


Scole colors


Миграция из Xcode


В этом релизе проработали наиболее очевидное:


  • Стали автоматически выставлять больше настроек при выборе варианта Xcode на экране настройки темы и поведения IDE (показывается при самом первом запуске IDE).
  • Провели первую итерацию доработки раскладки Xcode.
  • Улучшили импорт цветовых схем и немного доработали встроенную цветовую схему Xcode.

Если у вас есть идеи улучшений по каждому из пунктов, стоит сразу же создавать тикет в нашем трекере и прикладывать к нему свои настройки экспортированные с помощью File > Export Settings...


Всякое


  • Добавили сворачивание управляющих конструкций if/else, do/while, for, switch в Objective-C/C/C++ (??.).
  • Переработали все встроенные цветовые схемы, добавили несколько платформенных (например, Github):
  • Стало возможным включать в Git-коммиты лишь часть изменений.

На этом всё. Качать — тут, баги — в трекер, вопросы общего характера проще всего поднять прямо тут в комментариях!

Комментарии (2)


  1. qRoC
    17.04.2018 11:11

    Есть ли в планах вынести проверки IDE в инспектор?

    Например поддержка атрибутов, или же просто их эволюцию с «availability» -> «available», или же "_versioned" -> «usableFromInline» и "_inlineable" -> «inlinable».

    В AppCode редактор будет подсвечивать как ошибки «Unknown attribute '...'» до выхода версии с их поддержкой, и это никак нельзя отключить.

    И второй вопрос — будут ли расширяться возможности Code Style, в частности возможность ставить пробел в операторных методах после самого оператора, например:

    static func myFn()
    static func + ()
    



    1. yeswolf Автор
      17.04.2018 12:16

      Есть ли в планах вынести проверки IDE в инспектор?

      Например поддержка атрибутов, или же просто их эволюцию с «availability» -> «available», или же "_versioned" -> «usableFromInline» и "_inlineable" -> «inlinable»

      Это парсерная ошибка, планов выносить парсерные ошибки в настройки с возможностью их отключения нет. Слишком сложно, слишком много времени, в целом — порочная практика, потому что проблемы начнут замалчиваться, а не решаться в итоге. Плюс частые изменения версии Swift.

      Сейчас подобные изменений аттрибутов мы поддерживаем в зависимости от версии. Как только реализуем в очередном апдейте — начнут корректно обрабатываться как старые, так и новые в зависимости от версии Swift. Конкретно по этим — уже сделано, но пока еще не появилось в обновлениях.
      И второй вопрос — будут ли расширяться возможности Code Style

      В следующей версии скорее всего нет, но это не значит, что если задача окажется простой и на нее не появится времени, она не будет сделана по ходу. Заводите тикет, пусть ребята посмотрят, если окажется просто — сделают.

      Но вот что в одном из будущих релизов мы к форматированию обязательно вернемся, в очередной раз серьезно его доработав — это точно, там еще много хорошего можно сделать.