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

На прошлой неделе вышел AppCode 2016.1. Изначально мы анонсировали его как 3.4, но потом совместно с другими десктопными продуктами JetBrains перешли на новую схему версионирования и теперь будем использовать ее.



С момента выпуска версии 3.3 прошло еще два минорных релиза, в которых появилось много полезного (например, Evaluate Expression и Set Value для отладчика в Swift). В 2016.1 мы в основном продолжали работать над поддержкой Swift — и вот что получилось.

Swift


Теперь AppCode умеет корректно обрабатывать следующие языковые конструкции:

  • Типы, соответствующие протоколу OptionSetType:



  • Тип Self:



  • Variadic-параметры в функциях и замыканиях.
  • Объявления альтернативных имен для существующих типов с помощью ключевого слова typealias.
  • Типы, представляющие собой массивы функций.

Code folding в Swift


Теперь декларации в коде на Swift можно сворачивать при необходимости. Сделать это можно несколькими способами:

  • Кликнуть значок +/- в левой части окна редактора:



    Кстати, если потом навести мышь на свернутый участок кода, AppCode покажет свернутый фрагмент:



  • Поставить курсор на участок кода и развернуть/свернуть его, нажав ?+/?-:



  • Если нужно сделать то же самое для вложенных деклараций, используем ??+/??-:



  • А если потребовалось развернуть-свернуть все возможные участки кода в текущем файле, достаточно нажать ??+ или ??-:




Поддержка CocoaPods


Начиная с версии 2.5, в AppCode есть встроенный менеджер CocoaPods, который позволяет создавать pod-файлы прямо из IDE, подсвечивает синтаксис в них, показывает автодополнение для ключевых слов и помогает следить за актуальностью зависимостей для проекта, показывая в нужный момент intention или inspection (например, о том, что есть новая версия для конкретной библиотеки). В этой версии мы решили актуализировать список автодополнения для ключевых слов в pod-файлах и добавили недостающие, такие как:

  • use_frameworks!
  • install!
  • source
  • project
  • abstract_target
  • inherit! и abstract!
  • plugin

Посмотреть, как все это работает, можно в коротком видео ниже:



Сообщения сборки


В AppCode есть окно Build messages (?0), которое показывает сообщения сборки для конкретного проекта. Для проектов, написанных на Swift, часть сообщений, которые выдает при сборке xcodebuild (а именно он используется в AppCode для сборки проектов), оставались не вполне корректно обработанными, что по понятным причинам не нравилось большому количеству пользователей. В 2016.1 мы это исправили — теперь ошибки, предупреждения и сообщения типа note отображаются намного более понятно и удобно.

Поддержка C++ и управление директориями проекта


Все изменения и улучшения по работе с кодом на C++, реализованные в последней версии CLion, также вошли в новую версию AppCode. Это относится и к поддержке variadic templates, и к отображению документации для кода, и к улучшенной работе автоимпорта для символов из STL. Объясняется это просто — часть функциональности, относящаяся к редактированию C++-кода, одинакова для обоих продуктов и используется каждым из них.

Поэтому мы не будем повторяться и предлагаем тем, для кого важны изменения в поддержке C++, прочитать о них в отличном посте anastasiak2512. Отметим также, что меню Mark directory as…, позволяющее дополнительно контролировать индексацию тех или иных директорий проекта и работу рефакторингов в них, в AppCode доступно в режиме Files для проектного навигатора (?1).

Другие изменения


  • Улучшена работа localization intentions в Objective-C
  • Появилась поддержка Git worktrees
  • В Diff viewer теперь есть возможность просмотра изменений для отдельных слов в составе строки (опция Highlight words)
  • Переработан интерфейс окна Attach to local process…

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

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


  1. Anisotropic
    05.04.2016 15:15

    >перешли на новую схему версионирования
    Значит ли это, что продукты теперь будут САМИ обновляться до новой версии?

    Сейчас webstorm (11.0.3) радостно сообщает, что 2016.1.1 is now available и предлагает мне самому поискать где его скачать. Ладно бы это была какая-нибудь взломаная версия, а это честно купленная рабочая копия.


    1. gibson_dev
      05.04.2016 16:30

      Она предлагает не поискать а отправляет на страницу загрузки


      1. Anisotropic
        06.04.2016 11:06

        Ещё вчера хотел скинуть скриншот, где диалог апдейт отправляет поискать где его скачать на блог разработчиков, а не на страницу загрузки.
        Только вот теперь вообще диалога о новой версии вылазит это:

        Заголовок спойлера


    1. MeGaPk
      05.04.2016 16:33

      Нет, просто поменяли номера релизов.


    1. prigara
      05.04.2016 16:38
      +1

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

      > Сейчас webstorm (11.0.3) радостно сообщает, что 2016.1.1 is now available и предлагает мне самому поискать где его скачать.

      По кнопке More info на диалоге должна быть доступна информация о новых фичах и ссылка на скачивание. Извините, что нет прямой ссылки на скачивание прямо на диалоге, он сейчас в процессе изменений, не доглядели.


  1. MEFILT
    05.04.2016 18:36
    +2

    Приобрел и пожалел. Очень сильно лагает по сравнение XCode.
    Много вкусный плюх, но delay autocompleted вымораживает.


    1. yeswolf
      05.04.2016 18:39

      А подскажите пожалуйста:

      1. На какой версии наблюдаете такое поведение?
      2. Код на каком языке преобладает в проекте (ObjC/C++/Swift)?
      3. В коде на каком языке воспроизводится?


      1. YGeorge
        06.04.2016 09:07

        Второй год заканчивается, продлеваем лицензии на третий. Лагов не замеченно ни на одной из машин. Вообще, xcode использую лишь для работы с интерфесом приложения либо загрузки приложения в аппстор. Работа с кодом — исключительно AppCode.
        (простите, ответил немного не туда)


      1. pingvin_i
        06.04.2016 12:40

        У меня такая же проблема,
        1. 2016.1 (RC2) — я как понимаю это и есть релизная версия
        2. 50% swift — 50% objc
        3. Swift


        1. yeswolf
          06.04.2016 15:08

          Давайте попробуем проверить, достаточно ли памяти для IDE. Можете включить Preferences -> Appearance -> Show memory indicator (в правом нижнем углу должен появиться индикатор памяти, доступной для IDE) и сказать — насколько этот объем использован (доступно vs использовано)?


          1. pingvin_i
            06.04.2016 19:59

            Загрузил занято 719 из 4083


            1. yeswolf
              07.04.2016 15:57

              Тогда — т.к. с памятью все вроде бы ок — быстрого решения найти не получится, нужно снять CPU snapshot и сделать тикет здесь. Если получится сам проект приложить, было бы совсем хорошо.


            1. yeswolf
              07.04.2016 17:28

              Забыл дать ссылку на то, как именно снять CPU snapshot — прочитать про это можно вот тут


              1. pingvin_i
                08.04.2016 07:05

                Спасибо, в выходные все сниму и создам тикет. Проект, к сожалению, приложить не могу.


    1. evgen_sichkar
      06.04.2016 12:41

      Вы выделяли больше памяти для AppCode в appcode.vmoptions?


  1. Mecid
    06.04.2016 09:45

    Сделайте нормальное дополнение для лейблов параметров функций.


    1. yeswolf
      06.04.2016 14:51

      Подскажите пожалуйста, вы про Swift или есть проблемы в Objective-C? Если Objective-C, то пример был бы полезен. По Swift — после текущих задач поймем, сможем ли мы это выдать в будущем релизе или нет.


      1. Mecid
        06.04.2016 16:20

        Про Swift конечно же, с Obj-C все хорошо. Но новые проекты начинаем на Swift'e делать.
        А какие у вас текущие задачи по Swift и когда будет следующий EAP Build?


        1. yeswolf
          07.04.2016 15:55

          Текущие задачи по Swift сейчас следующие:

          1. Поддержать дополнения в Swift 2.2 (OC-13365)
          2. Научиться отображать те же сообщения типа warning/error, что и Xcode в окне редактора (по сути переиспользовав их)
          3. Улучшить resolve в mixed-code (типы Swift из Objc и наоборот), что в прикладном плане должно улучшить навигацию, Find Usages, Rename, да и просто необходимо для корректной реализации рефакторингов в будущем.
          4. Сделать часть рефакторингов — Introduce variable, Inline variable.

          Плюсом нужно доработать часть задач по generics в Objective-C (в основном это кейзы вроде OC-13178) и performance в редакторе для Swift. То, о чем вы спрашивали — parameter placeholders — понятно, что необходимо сделать, но пока то, о чем я сказал выше, для нас более приоритетно. Сделать постараемся, но гарантировать здесь что-либо сложно — в силу сложности всех остальных задач.


  1. iLLuzor
    06.04.2016 11:03

    Как правильно установить cocoapods gem?
    Выскакивает предупреждение «Cocoapods gem is not installed», жму install gem. Проходит прогрессбар «1 gem installed», но предупреждение не пропадает. Повторная установка тоже ни к чему не приводит. В чём может быть проблема?


    1. yeswolf
      06.04.2016 14:08

      Пока похоже на вот эту проблему, причину пока точно установить не удалось. Если сможете в тот же тикет приложить лог из Help -> Show log in finder для момента, когда устанавливали gem, это бы нам помогло.


      1. iLLuzor
        07.04.2016 09:45

        Не понял, как именно, но установилось. Теперь другая проблема:

        Скриншот
        image


        1. yeswolf
          07.04.2016 15:42

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


          1. iLLuzor
            07.04.2016 16:34

            Хорошо. Напишу тикет.


  1. deej
    06.04.2016 12:41

    Когда вы наконец почините import в Objective-C?


    1. yeswolf
      06.04.2016 12:43

      Если вы про этот тикет, то ближайший апдейт это поправит. Если про другой — дайте пожалуйста ссылку в трекер.


      1. deej
        06.04.2016 12:55

        1. yeswolf
          06.04.2016 14:26

          Пока пытаемся понять, почему clang в этом случае ругается. Как только поймем — исправим, задача в процессе.


  1. bronenos
    06.04.2016 15:36
    +1

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

    Но мою ситуацию может описать картинка:
    image


    1. yeswolf
      07.04.2016 17:27

      Частично поможет Preferences -> Editor -> Code Style -> Swift -> Wrapping and braces -> Method call arguments -> Align when multiline, но сделать indent для аргументов с помощью этой опции не получится. Вообще, для форматтера Swift пока есть достаточно много нереализованного и в ближайшее время мы этими задачами с большой вероятностью заняться не сможем.