company_banner

Что нового в AppCode 2018.3

    Добавили поддержку 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. В общем, больше стабильности, лучше автодополнение с навигацией и подсветкой, меньше помех работе.


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

    JetBrains

    376,00

    Делаем эффективные инструменты для разработчиков

    Поделиться публикацией
    Комментарии 5
      +3
      Здравствуйте. Ежедневно использую 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. После перезапуска она может не сохранить последнюю минуту работы. Вот эти мелкие косяки портят общее впечатление о продукте.
        0
        пишешь 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-пример.
          0
          — Про 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
            Про associatedType еще раз проверил в чистом проекте и поведение отличное от Xcode.

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

            Давайте вот как. Надо снять CPU snapshot и в процессе его снятия повторить раз 5-6 медленное автодополнение. Это даст понять, где просадка. Ссылку на CPU snapshot надо отправить в наш саппорт (через Submit Request) вместе с ссылкой на переписку здесь. Уже там лучше обсудить проблемы по Rx — так сможем решить скорее.
          +2
          >Когда писал на objc всегда коллегам хвалил ваш продукт, после перехода на свифт не вижу существенных преимуществ over Xcode.
          Про комплит и фрзи +100

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

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

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