company_banner

Релиз AppCode 2016.1: улучшенная поддержка Swift и C++

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

    На прошлой неделе вышел 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…

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

    Comments 30

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

      Сейчас webstorm (11.0.3) радостно сообщает, что 2016.1.1 is now available и предлагает мне самому поискать где его скачать. Ладно бы это была какая-нибудь взломаная версия, а это честно купленная рабочая копия.
        0
        Она предлагает не поискать а отправляет на страницу загрузки
          0
          Ещё вчера хотел скинуть скриншот, где диалог апдейт отправляет поискать где его скачать на блог разработчиков, а не на страницу загрузки.
          Только вот теперь вообще диалога о новой версии вылазит это:
          Заголовок спойлера

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

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

            По кнопке More info на диалоге должна быть доступна информация о новых фичах и ссылка на скачивание. Извините, что нет прямой ссылки на скачивание прямо на диалоге, он сейчас в процессе изменений, не доглядели.
            +2
            Приобрел и пожалел. Очень сильно лагает по сравнение XCode.
            Много вкусный плюх, но delay autocompleted вымораживает.
              0
              А подскажите пожалуйста:

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

                0
                Второй год заканчивается, продлеваем лицензии на третий. Лагов не замеченно ни на одной из машин. Вообще, xcode использую лишь для работы с интерфесом приложения либо загрузки приложения в аппстор. Работа с кодом — исключительно AppCode.
                (простите, ответил немного не туда)
                  0
                  У меня такая же проблема,
                  1. 2016.1 (RC2) — я как понимаю это и есть релизная версия
                  2. 50% swift — 50% objc
                  3. Swift
                    0
                    Давайте попробуем проверить, достаточно ли памяти для IDE. Можете включить Preferences -> Appearance -> Show memory indicator (в правом нижнем углу должен появиться индикатор памяти, доступной для IDE) и сказать — насколько этот объем использован (доступно vs использовано)?
                      0
                      Загрузил занято 719 из 4083
                        0
                        Тогда — т.к. с памятью все вроде бы ок — быстрого решения найти не получится, нужно снять CPU snapshot и сделать тикет здесь. Если получится сам проект приложить, было бы совсем хорошо.
                          0
                          Забыл дать ссылку на то, как именно снять CPU snapshot — прочитать про это можно вот тут
                            0
                            Спасибо, в выходные все сниму и создам тикет. Проект, к сожалению, приложить не могу.
                    0
                    Вы выделяли больше памяти для AppCode в appcode.vmoptions?
                    0
                    Сделайте нормальное дополнение для лейблов параметров функций.
                      0
                      Подскажите пожалуйста, вы про Swift или есть проблемы в Objective-C? Если Objective-C, то пример был бы полезен. По Swift — после текущих задач поймем, сможем ли мы это выдать в будущем релизе или нет.
                        0
                        Про Swift конечно же, с Obj-C все хорошо. Но новые проекты начинаем на Swift'e делать.
                        А какие у вас текущие задачи по Swift и когда будет следующий EAP Build?
                          0
                          Текущие задачи по 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 — понятно, что необходимо сделать, но пока то, о чем я сказал выше, для нас более приоритетно. Сделать постараемся, но гарантировать здесь что-либо сложно — в силу сложности всех остальных задач.
                      0
                      Как правильно установить cocoapods gem?
                      Выскакивает предупреждение «Cocoapods gem is not installed», жму install gem. Проходит прогрессбар «1 gem installed», но предупреждение не пропадает. Повторная установка тоже ни к чему не приводит. В чём может быть проблема?
                        0
                        Пока похоже на вот эту проблему, причину пока точно установить не удалось. Если сможете в тот же тикет приложить лог из Help -> Show log in finder для момента, когда устанавливали gem, это бы нам помогло.
                          0
                          Не понял, как именно, но установилось. Теперь другая проблема:
                          Скриншот
                          image

                          Не вижу похожих багов в вашем трекере.
                            0
                            Видимо, такое еще не встречалось. Давайте заведем тикет вместе с логом из IDE — для того, чтобы стало чуть более понятно, что происходит, постараемся помочь.
                              0
                              Хорошо. Напишу тикет.
                        0
                        Когда вы наконец почините import в Objective-C?
                          0
                          Если вы про этот тикет, то ближайший апдейт это поправит. Если про другой — дайте пожалуйста ссылку в трекер.
                            0
                              0
                              Пока пытаемся понять, почему clang в этом случае ругается. Как только поймем — исправим, задача в процессе.
                          +1
                          Имею проблемы с форматированием кода на Swift, которые пока не удалось решить через настройки. Возможно, я не понял, где следует менять поведение.

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

                          Only users with full accounts can post comments. Log in, please.