Привет, Хабр!

Совсем недавно вышел AppCode 2016.3, и в этом посте мы расскажем о самых интересных изменениях в нем.



Swift


Поддержка Swift 3


Одной из основных задач, над которыми мы работали в этом релизе, была поддержка Swift 3. Многое мы успели реализовать, а над оставшимися задачами продолжим работать в будущих обновлениях.

Create from usage


В каждом новом обновлении мы стараемся расширить возможности кодогенерации для Swift. Это и Live Templates, в том числе позволяющие «обернуть» выделенный участок кода, и рефакторинг Introduce Variable, и Override/Implement (^O/^I), с помощью которого можно сгенерировать определения сразу для нескольких методов.

В этом релизе мы добавили возможность создавать переменные, функции, методы и даже свойства классов из их использований. Особенно это удобно, если нужно что-то быстро cпрототипировать. Пусть метода ещё нет, напишем его, передадим нужные аргументы, вызовем ?? — и все, остается лишь немного исправить автоматически сгенерированную сигнатуру функции, если это необходимо:



Как видно на гифке, используя тот же принцип можно создавать и другие сущности в коде. Аналогичную возможность для генерации типов (классов, структур и т. п.) мы планируем добавить для Swift чуть позже. А вот в Objective-C/C/C++ все эти возможности уже давно есть, и пользоваться ими можно и нужно прямо сейчас.

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


Для Objective-C/C/C++ в AppCode есть масса настроек форматирования:



Применить их можно, вызвав ??L на выделенном участке кода (а если код не выделен, будет отформатирован файл целиком). Базовые возможности для Swift были реализованы еще в версии 3.1, при этом многих настроек форматирования, специфичных для языка, среди них не было. В этом релизе мы решили их добавить.

Теперь в AppCode можно настраивать различные правила переноса для:

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



  • Параметров в объявлениях методов и функций
  • Аргументов методов и функций, используемых в коде
  • Последовательных вызовов методов:



  • Нескольких условных конструкций на одной и той же строке

Также добавлен блок для пробелов до и после двоеточий в спецификациях типов переменных, словарей и парах «ключ: значение» в самих словарях:



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


Мы улучшили быстродействие AppCode при работе со Swift по нескольким основным направлениям.

Первое — вывод типов. От него в AppCode зависит и скорость подсветки кода, и скорость автодополнения, и многое другое. В итоге удалось даже для сложных конструкций кода его существенно ускорить.

Второе — скорость автодополнения. Здесь мы основательно поработали над кэшированием списка вариантов, что позволило сделать его значительно более быстрым.

Также удалось исправить несколько проблем в интеграции с SourceKit, которые отражались на скорости показа ошибок, предупреждений и исправлений (fix-it).

UI-тесты


Теперь в AppCode можно запускать (^?R) и отлаживать (^?D) UI-тесты. Упавшие тесты можно отфильтровать от пройденных и после исправлений перезапустить только их:



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



Все они сохраняются во встроенной истории, и позже их можно просмотреть прямо в IDE:



Семантическая подсветка


Как и во многих других продуктах JetBrains, в AppCode появилась возможность подсветки параметров функций и переменных уникальными цветами. Включить ее можно для Swift/Objective-C/C/C++ в настройках Editor > Colors & Fonts > Language Defaults > Semantic highlighting:



C/C++


По традиции, улучшения поддержки C/C++, реализованные командой CLion, доступны и в AppCode. Про них можно прочитать в этом посте в разделах Поддержка C и Поддержка С++, соответственно. Кстати, различные платформенные изменения (такие как улучшения в поддержке контроля версий, San Francisco в качестве дефолтного шрифта в меню и другие), описанные в этом посте, также доступны в AppCode.

Демо


Небольшое демо (на английском) с демонстрацией новых возможностей от нашего девелопер-адвоката Фила Нэша:


Читайте о других возможностях продукта у нас на сайте, следите за обновлениями в нашем англоязычном блоге, и задавайте любые возникшие вопросы в комментариях к этому посту.
Поделиться с друзьями
-->

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


  1. DartNyan
    23.12.2016 19:12

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


    1. gadfi
      27.12.2016 16:58

      не холивара ради, а что не так с внешним видом?


  1. sacred
    27.12.2016 16:58

    Это все конечно круто, но вы случайно не починили кривое выравнивание кода для блоков и всяких комплишен хенделеров?


    1. yeswolf
      27.12.2016 17:09

      Вы не могли бы показать на примере, что имеете в виду (скриншотом)?


      1. sacred
        27.12.2016 17:23

        вот есть кусок кода, который я форматнул в хкоде. теперь я выделяю его тут и нажимаю Ctrl+Alt+I и внизу строки сдвигаются. это выглядит криво и получается что форматирование в аппкоде на всем файле юзать нельзя


        1. yeswolf
          27.12.2016 17:50

          Так, проблема есть, спасибо за пример. Постараемся поправить.


  1. ABIvan
    27.12.2016 16:58

    У меня почем-то Semantic highlighting не работает на macOS 10.12.2 ((


    1. yeswolf
      27.12.2016 17:33

      Можете проверить, включено ли оно для того языка, на котором смотрите в Preferences -> Editor -> Colors and Fonts -> ? От версии macOS не должно зависеть.


  1. Boggard
    27.12.2016 16:58

    Все здорово, и продукт привычный, и отладка не чета xcode.
    Но в последнее время так получается, что appcode выходит или с большой задержкой от релиза xcode, или только выйдет, как обновится xcode.
    Вышел 8й xcode — appcode обновился через приличное кол-во времени. Сейчас только вышел 2016.3, как xcode обновился до 8.2, опять appcode ругается, что 8.1 только поддерживается.
    Печалька (


    1. yeswolf
      27.12.2016 17:37

      Предупреждение в IDE есть потому, что мы интегрируемся с некоторыми частями Xcode, и изменения в них предсказать невозможно. Поэтому в каждом случае требуется время на проверку — его пока уменьшить, увы, не получается. Как только мы уверены, что проверили совместимость, мы отключаем предупреждение, обычно стараемся сделать это в процессе текущего EAP, либо выпустить минорным апдейтом.


  1. fanticqq
    27.12.2016 16:58

    image literals все еще не поддерживаются :(


    1. yeswolf
      27.12.2016 17:23

      Уже поддерживаются в 2016.3.1 RC, обновление в пути.


  1. Virasio
    27.12.2016 16:58

    У меня на последних проектах AppCode всё сильнее путается с тем какие методы где определены. Очень часто подсвечивает методы как неопределённые, хотя заголовочный файл вот он здесь же. Делаю поиск использования метода класса, а он мне находит использование метода с таким же именем, но другого класса, и общее у них только наследование от NSObject (где нет метода с таким именем). У меня ощущение, что JetBrains впиливая поддержку Swift выпиливает поддержку Objective-C, но при этом и за Swift не успевает. Если честно, то конечно самые проблемы в коде, который перемешан с чисто сишным кодом, где есть «небольшая» кучка дефаинов.
    И мне интересно, почему JetBrains не тестирует свой продукт на совместимость с beta-версиями Xcode? Ставлю самый свежий AppCode, а он мне говорит «переключитесь на Xcode 8.1», хотя 8.2 в бете был доступен очень-очень давно, а сейчас даже 8.2.1 уже вышел. При этом отлаживать приложение нужно в том числе на последней версии iOS, для чего нужна последняя версия Xcode. И это я не про беты. Кстати, в связи с этим жил я на EAP-версии некоторое время, но решил всё же перейти на подписку на будущие 2 года, а моя лицензия ещё в апреле закончилась. Как же интересно у них работает обновление лицензии: она обновляется не с момента оплаты, а с конца предыдущей лицензии. Оплатил за 2 года, а получил полтора. Удивительно, что Parallels до этого не догадались. :)


    1. yeswolf
      27.12.2016 18:19

      Рука дрогнула, ответил ниже.


  1. yeswolf
    27.12.2016 18:10

    У меня ощущение, что JetBrains впиливая поддержку Swift выпиливает поддержку Objective-C, но при этом и за Swift не успевает.

    Регрессии есть, связка Objective-C/Swift достаточно плотная и часто меняется. Здесь сильно бы помог тестовый проект с описанными проблемами, по вашему описанию дать какую-либо конкретику сложно.
    И мне интересно, почему JetBrains не тестирует свой продукт на совместимость с beta-версиями Xcode? Ставлю самый свежий AppCode, а он мне говорит «переключитесь на Xcode 8.1», хотя 8.2 в бете был доступен очень-очень давно, а сейчас даже 8.2.1 уже вышел.

    Тестирует. Только работоспособность чего-либо в бета-версии не дает никакой гарантии того, что то же самое будет работать в релизе. Поэтому пока не будет проверено, что ничего не отломалось — предупреждение остается.


    1. Virasio
      27.12.2016 18:50

      Регрессии есть, связка Objective-C/Swift достаточно плотная и часто меняется. Здесь сильно бы помог тестовый проект с описанными проблемами, по вашему описанию дать какую-либо конкретику сложно.

      К сожалению, не получится, так бы давно зарепортил на сайте. Пока это происходит только в реальных условиях, а код реальных проектов, к сожалению, передавать нельзя. Это замечаю именно на больших проектах.