Добавили поддержку 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 терял дефолтные значения аргументов — а теперь обрабатывает их корректно:
Документация
Стали нормально форматировать макроподстановки в Quick Documentation (F1
):
Многострочные TODO
В AppCode все комментарии вида //FIXME
/ //TODO
можно быстро посмотреть через ?6
. Здесь же можно задать шаблоны для своих сообщений, что бывает удобно:
Теперь мы добавили поддержку многострочных TODO для Objective-C/C/C++ — достаточно для каждой строки, кроме первой, добавить отступ:
Смешанный код
Поправили проблемы при переименовании конструкций с swift_name
в Objective-C и перечислений в Swift / Objective-C.
Быстродействие
Починили фризы при вызове диалогов, связанных с запуском тестов, например Run Configurations с тестовыми конфигурациями.
Запуск и отладка
Расширения iOS
AppCode научился отлаживать расширения iOS — так же, как это делает Xcode:
Консоль LLDB для Swift
Починили автодополнение в консоли отладчика для Swift (для Objective-C/C/C++ все и так работало). Все сторонники p
/po
и expression
радуются, остальные, как и раньше, пользуются Evaluate Expression (?F8
):
Плагин IDE Features Trainer
Часто слышим на конференциях просьбу дать материалы о миграции с Xcode на AppCode, о том, какие возможности IDE надо знать в первую очередь. В процессе релиза сделали первый крупный шаг в эту стороны — добавили часть для Swift в IDE Features Trainer. Суть простая — ставим плагин, открываем уроки, следуем инструкциям и на простых примерах видим, какие возможности есть, как их использовать, и где их найти. Всем рекомендуем пройти — даже если пользуетесь IDE уже давно. С большой вероятностью, что-то новое и полезное все равно найдется :).
IDE
Search Everywhere
Объединили Search Everywhere, Go to Class / File / Symbol / Action:
Run Anything
Теперь любую конфигурацию можно запустить через двойное нажатие ?:
Или открыть проект, напечатав open
.
Плагины
Полностью переработали вид раздела с плагинами в IDE:
Контроль версий
Теперь умеем работать с подмодулями Git и удобно показывать пулл-реквесты с Github:
Высококонтрастная тема
Теперь она есть — как для редактора, так и для IDE (можно выбрать в Preferences | Appearance & Behavior | Appearance
):
Что дальше?
Следующий релиз мы планируем целиком посвятить исправлению проблем. Исключение — поддержка новых версий Swift. В общем, больше стабильности, лучше автодополнение с навигацией и подсветкой, меньше помех работе.
На этом все! Как и всегда, скачивать — тут, баги — в трекер, вопросы общего характера задаем прямо здесь.
house2008
Здравствуйте. Ежедневно использую 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. После перезапуска она может не сохранить последнюю минуту работы. Вот эти мелкие косяки портят общее впечатление о продукте.
yeswolf Автор
Есть такое чувство, что у вас стоит дефолтные 2000Mb в Xmx и их не сильно хватает на ваш проект. Пробовали смотреть, сколько памяти съедено через Preferences | Appearance & Behavior | Appearance | Windows Options | Show Memory Indicator? Если мало, надо бы увеличить Xmx через Help | Edit Custom VM Options и рестартовать IDE.
Так быть не должно. По логике — где-то должна быть проблема с дженериками и надо бы пример.
Либо я неправильно вас понял, либо поведение в Xcode такое же. Надо минимальный foobarbaz-пример.
house2008
— Про Xmx проверил показывает 1700 из 4000 (выставлено у меня в 4096).
— По rx будут примеры, сейчас с ходу не могу найти.
— Про associatedType еще раз проверил в чистом проекте и поведение отличное от Xcode.
Перейдите в definition для Item в UserService и AppCode перейдет в протокол, а Xcode перейдет в структуру.
yeswolf Автор
За пример спасибо, завели OC-18148. Что-то не доделали в резолве, поэтому так.
Давайте вот как. Надо снять CPU snapshot и в процессе его снятия повторить раз 5-6 медленное автодополнение. Это даст понять, где просадка. Ссылку на CPU snapshot надо отправить в наш саппорт (через Submit Request) вместе с ссылкой на переписку здесь. Уже там лучше обсудить проблемы по Rx — так сможем решить скорее.
sacred
>Когда писал на objc всегда коллегам хвалил ваш продукт, после перехода на свифт не вижу существенных преимуществ over Xcode.
Про комплит и фрзи +100
Сейчас правда с ребята из JB пытаемся решить некоторые проблемы, мб что и пофиксится.
Потому что ну реально на сфивте просто деградация и плюсы почти не перевешивают минусы