Добавили поддержку Swift 4.2, сделали Generate и навигацию к определению типа для Swift, улучшили форматирование, поддержали iOS-расширения в отладчике, стали лучше работать в проектах с несколькими таргетами, и еще сделали кучу крутых и полезных фич.


КПДВ



Swift


Поддержали все возможности версии 4.2, которые могли отразиться на работе IDE:


  • SE-0192 (Handling Future Enum Cases)
  • SE-0193 (Cross-module inlining and specialization)
  • SE-0194 (Derived Collection of Enum Cases)
  • SE-0195 (User-defined “Dynamic Member Lookup” Types)
  • SE-0196 (Compiler Diagnostic Directives)
  • SE-0212 (Compiler Version Directive)

Если что-то все-таки пропустили, обязательно напишите в комментариях. А про Swift 5 можно прочитать тут.


Генерация


Сделали все стандартные действия для генерации, которые есть для Objective-C — инициализаторы, description/debugDescription, hashValue и оператор сравнения:


Генерация


Для всех действий, кроме инициализатора можно еще и выбрать шаблон, используемый для генерации.


Навигация к определению типа


Тут все просто — жмем ??B и сразу попадаем к определению типа:


Навигация к определению типа


Подсветка точек выхода


Научились подсвечивать точки выхода по установке курсора на break, continue, try, throw или return:


Подсветка точек выхода


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


Почти в каждом релизе мы улучшаем что-то в движке форматирования, вот что успели в этом:


  • поправили формирование отступов для многострочных строковых литералов: Форматирование строковых литералов
  • добавили настройки форматирования кода внутри препроцессорных директив:Настройки препроцессорных директив
  • сделали возможность менять выравнивание выражений с тернарным оператором в Preferences | Editor | Code Style | Swift | Wrapping and Braces | Ternary conditional operation

Поддержка Swift Package Manager в CLion


С CLion у нас не только общая поддержка C/C++, но еще и общая поддержка Swift. Долгое время плагин, который добавляет поддержку SPM-проектов в CLion, использовал CMake в качестве проектной модели. В этом году решили, что жить так больше нельзя — пользоваться неудобно, и поддержали SPM напрямую. Теперь можно работать вот так:



Получилось действительно хорошо, осталось только доработать интеграцию с тестами. А учитывая тот факт, что в CLion есть функциональность WebStorm для редактирования HTML/JavaScript, с базами данных можно работать так же, как и в DataGrip, доступен Docker-плагин и многое другое, получаем, что теперь в нем еще можно писать бэкенды на Swift:



Нет, с SourceKit-LSP пока работать не планируем. Причина проста: и так почти все есть, что он несет с собой (и то, что еще не несет, тоже).


Objective-C/C/C++


Проекты с несколькими таргетами


Наконец-то починили проблемы с подсветкой и автодополнением для классов с одним и тем же именем подключенным к разным таргетам в проекте. Навигацию тоже планируем починить.


Change Signature


Раньше при изменении сигнатуры в C/C++ AppCode терял дефолтные значения аргументов — а теперь обрабатывает их корректно:


Change Signature


Документация


Стали нормально форматировать макроподстановки в Quick Documentation (F1):


Форматирование макроподстановок


Многострочные TODO


В AppCode все комментарии вида //FIXME / //TODO можно быстро посмотреть через ?6. Здесь же можно задать шаблоны для своих сообщений, что бывает удобно:


Настройки TODO


Теперь мы добавили поддержку многострочных TODO для Objective-C/C/C++ — достаточно для каждой строки, кроме первой, добавить отступ:


Многострочные TODO


Смешанный код


Поправили проблемы при переименовании конструкций с swift_name в Objective-C и перечислений в Swift / Objective-C.


Быстродействие


Починили фризы при вызове диалогов, связанных с запуском тестов, например Run Configurations с тестовыми конфигурациями.


Запуск и отладка


Расширения iOS


AppCode научился отлаживать расширения iOS — так же, как это делает Xcode:


Поддержка расширений iOS


Консоль LLDB для Swift


Починили автодополнение в консоли отладчика для Swift (для Objective-C/C/C++ все и так работало). Все сторонники p/po и expression радуются, остальные, как и раньше, пользуются Evaluate Expression (?F8):


Автодополнение в консоли LLDB


Плагин IDE Features Trainer


IDE Features Trainer


Часто слышим на конференциях просьбу дать материалы о миграции с Xcode на AppCode, о том, какие возможности IDE надо знать в первую очередь. В процессе релиза сделали первый крупный шаг в эту стороны — добавили часть для Swift в IDE Features Trainer. Суть простая — ставим плагин, открываем уроки, следуем инструкциям и на простых примерах видим, какие возможности есть, как их использовать, и где их найти. Всем рекомендуем пройти — даже если пользуетесь IDE уже давно. С большой вероятностью, что-то новое и полезное все равно найдется :).


IDE


Search Everywhere


Объединили Search Everywhere, Go to Class / File / Symbol / Action:


Search Everywhere


Run Anything


Теперь любую конфигурацию можно запустить через двойное нажатие ?:


Run Anything


Или открыть проект, напечатав open.


Плагины


Полностью переработали вид раздела с плагинами в IDE:


Плагины


Контроль версий


Теперь умеем работать с подмодулями Git и удобно показывать пулл-реквесты с Github:


Окно пулл-реквестов для Github


Высококонтрастная тема


Теперь она есть — как для редактора, так и для IDE (можно выбрать в Preferences | Appearance & Behavior | Appearance):


Высококонтрастная тема


Что дальше?


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


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

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


  1. house2008
    05.12.2018 19:24

    Здравствуйте. Ежедневно использую AppCode, замечательный продукт. Но на больших проектах очень тяжело в нем писать код, поэтому в основном использую только для навигации по проекту, так как он замечательно с этим справляется. Что немного раздражает, что даже базовый автокомплит очень медленный, пишешь let a: Str и ждешь секунд 5 чтобы он дополнил String, про функцию print() он видимо вообще ничего не знает — никогда ее не комплитит. Комплит имен локальных переменных во время их использования тоже очень долгое, благодаря вам я почти освоил слепую печать, ибо это намного быстрее чем ждать пока IDE дополнит, что я пишу. Про Rx я вообще молчу, дальше одной .map он сам вывести тип не может (да и с коллекциями также часто бывает), поэтому Rx в 80% случаев пишу в Xcode. Еще неверно переходит на тип associatedType у протоколов если тип в иплементаторе совпадает с именем associatedType, IDE переходит в описание протокола, но Xcode переходит куда надо. Самое забавное, что подобных проблем с автокомплитом в Xcode нет вообще — работает молниеносно по сравнению с AppCode. Всё выше написанное относится только к swift, в objc проблем нет. Что очень нравится, это поддержка git и автокомплит к сфивтовым enum'ам, Xcode c дополнениями кейсов, почему-то, работает довольно криво. Пока у меня такая статистика, что 60% времени провожу в AppCode (пишу в слепую, так как комплит не работает, но просто привычно после Java (IntelliJ Idea)), остальное время в Xcode. Уже который месяц (или год) надеюсь, что всё таки всё это почините. Когда писал на objc всегда коллегам хвалил ваш продукт, после перехода на свифт не вижу существенных преимуществ over Xcode.

    Еще переименование методов приватных протоколов или классов может зафризить IDE очень долго, как будто идет поиск по всему проекту, ведь это всё private, что там так долго делать я до сих пор понять не могу. Приходится убивать IDE так как на cancel она не отменяет renaming. После перезапуска она может не сохранить последнюю минуту работы. Вот эти мелкие косяки портят общее впечатление о продукте.


    1. yeswolf Автор
      05.12.2018 23:12

      пишешь let a: Str и ждешь секунд 5 чтобы он дополнил String

      Есть такое чувство, что у вас стоит дефолтные 2000Mb в Xmx и их не сильно хватает на ваш проект. Пробовали смотреть, сколько памяти съедено через Preferences | Appearance & Behavior | Appearance | Windows Options | Show Memory Indicator? Если мало, надо бы увеличить Xmx через Help | Edit Custom VM Options и рестартовать IDE.
      Про Rx я вообще молчу, дальше одной .map он сам вывести тип не может (да и с коллекциями также часто бывает)

      Так быть не должно. По логике — где-то должна быть проблема с дженериками и надо бы пример.
      Еще неверно переходит на тип associatedType у протоколов если тип в иплементаторе совпадает с именем associatedType

      Либо я неправильно вас понял, либо поведение в Xcode такое же. Надо минимальный foobarbaz-пример.


      1. house2008
        06.12.2018 09:50

        — Про Xmx проверил показывает 1700 из 4000 (выставлено у меня в 4096).
        — По rx будут примеры, сейчас с ходу не могу найти.
        — Про associatedType еще раз проверил в чистом проекте и поведение отличное от Xcode.

        protocol Service {
            associatedtype Item
            func apply(_ item: Item)
        }
        
        class UserService: Service {
            func apply(_ item: Item) { }
        }
        
        struct Item {  }
        


        Перейдите в definition для Item в UserService и AppCode перейдет в протокол, а Xcode перейдет в структуру.


        1. yeswolf Автор
          07.12.2018 17:04

          Про associatedType еще раз проверил в чистом проекте и поведение отличное от Xcode.

          За пример спасибо, завели OC-18148. Что-то не доделали в резолве, поэтому так.
          — Про Xmx проверил показывает 1700 из 4000 (выставлено у меня в 4096).
          — По rx будут примеры, сейчас с ходу не могу найти.

          Давайте вот как. Надо снять CPU snapshot и в процессе его снятия повторить раз 5-6 медленное автодополнение. Это даст понять, где просадка. Ссылку на CPU snapshot надо отправить в наш саппорт (через Submit Request) вместе с ссылкой на переписку здесь. Уже там лучше обсудить проблемы по Rx — так сможем решить скорее.


    1. sacred
      07.12.2018 05:19

      >Когда писал на objc всегда коллегам хвалил ваш продукт, после перехода на свифт не вижу существенных преимуществ over Xcode.
      Про комплит и фрзи +100

      Сейчас правда с ребята из JB пытаемся решить некоторые проблемы, мб что и пофиксится.
      Потому что ну реально на сфивте просто деградация и плюсы почти не перевешивают минусы