company_banner

Что нового в AppCode 2018.1

    Привет!


    Этот пост, конечно же, про 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-коммиты лишь часть изменений.

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

    JetBrains 177,48
    Делаем эффективные инструменты для разработчиков
    Поделиться публикацией
    Похожие публикации
    Комментарии 2
    • 0
      Есть ли в планах вынести проверки IDE в инспектор?

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

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

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


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

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

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

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

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

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

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

      Самое читаемое