- PVSM.RU - https://www.pvsm.ru -

Что нового в AppCode 2018.1

Привет!

Этот пост, конечно же, про AppCode 2018.1. Впрочем нет, в этот раз он еще и про первый апдейт. У нас много нового и полезного, все в картинках под катом.

Splash

Swift

Swift 4.1

Мы реализовали поддержку большей части Swift 4.1:

  • SE-0185 [1] (Synthesizing Equatable and Hashable conformance)
  • SE-0143 [2] (Conditional conformances)
  • SE-0190 [3] (Target environment platform condition):Target environment platform condition
  • SE-0075 [4] (Build Configuration Import Test):Build Configuration Import Test
  • SE-0186 [5] (Remove ownership keyword support in protocols)

Swift 4.0 мы в основном сделали [6] в AppCode 2017.3. Если интересно, как мы движемся к светлому будущему поддержке Swift 4.2 и 5.0, подписывайтесь на этот тикет [7] и его следующие шаги [8].

Неявно подключенные модули

Здесь стоит пояснить на примере. Если подключен UIKit, значит автоматически подключены, например, CoreGraphics и Dispatch. Все символы из этих библиотек должны быть доступны. Логика подсказывает, что оба модуля должны быть явно импортированы где-то внутри UIKit. Но если мы просто рекурсивно пройдемся по всему дереву подключенных к UIKit модулей, ни одного импорта мы не найдем.

Почему? Потому что все они подключены в версии UIKit на Objective-C, а в Swift они пробрасываются неявно. AppCode строит автодополнение и навигацию исходя из дерева символов — нужных символов нет — нет ни автодополнения, ни навигации для таких библиотек без явного импорта. Думаю, можно даже не объяснять, насколько сильно это отражалось на работе IDE.

В этом релизе мы все поправили:

Implicit modules

Попутно улучшили навигацию с автодополнением для некоторых сторонних библиотек (например, Firebase и PureLayout).

Поддержка RxSwift

В основе RxSwift [9] лежит конструкция, описанная вот тут [10]. В AppCode 2018.1 мы научились ее корректно обрабатывать, что принесло счастливым пользователям нормальное автодополнение и навигацию:

RxSwift support

Часть проблем остается [11], мы над ними продолжаем работать. Всем, кто помогал нам в канале #appcode-users в слэке RxSwift [12], — спасибо!

Поддержка Quick

Сделали правильное и удобное отображение тестов:

Quick hierarchy

Реализовали навигацию к конкретному месту в тесте:

Quick navigation

Для Objective-C то же самое пока не сделали [13], перезапуск неудачных тестов пока сделать нельзя [14]. А вот для обычных тестов на XCTest, а также Kiwi, Catch, Boost.Test и Google Test эта фича работает, вместе с кучей других [15].

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

Добавили несколько новых настроек в Preferences | Editor | Code Style | Swift | Code Generation для форматирования комментариев:

Comments settings

Поправили отображение многострочных комментариев в попапе Quick Documentation (F1):

Multiline comments

Смешанный код (Objective-C/Swift)

Улучшили трансляцию Objective-C/Swift:

  • Стали правильно преобразовывать типы Class и SEL/IMP, generic pointers и некоторые типы параметров отсюда [16] из Objective-C в Swift.
  • Рефакторинг Rename и Find Usages стали работать для свойств Swift-классов, используемых в Objective-C.

Еще ускорили работу Go to class/symbol в проектах со смешанным кодом и наконец-то поправили проблемы с OCMock [17].

C++

Про улучшения поддержки C/C++ можно прочитать в посте @anastasiak2512 [18] в разделе Поддержка языка C++, отличий в этой части между AppCode и CLion почти нет.

Header maps

Пока писали пост, вышла версия  AppCode 2018.1.1. В ней добавили поддержку Xcode header maps [19], что автоматически сделало построение символов для массы проектов (в частности, для сгенеренных с помощью BUCK [20]) более корректным.

Беспроводная отладка

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

Симуляция местоположения

Добавили настройки для симуляции местоположения в Run/Debug Configurations:

Location in the Run Configuration

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

Change location on the fly

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

Custom locations

Стали автоматически обрабатывать .gpx-файлы как XML:

XML assistance

Project scopes

У проектного дерева в AppCode было два режима отображения:

  • Project (показывает все файлы в составе проекта Xcode)
  • Files (все файлы в директории, в которой находится проектный файл, и связанные директории вроде DerivedSources)

Files view сильно облегчает работу с проектом. Нужно изменить какой-нибудь README.md или скрипт — переключился, открыл, отредактировал, вернулся к написанию кода. Учитывая количество плагинов для различных языков, это удобно.

Project и Files — это частный случай Project Scopes, дающих возможность отфильтровать произвольное подмножество проектных файлов. Например, чтобы отображать только часть файлов в Project view или чтобы ограничить область работы инспекций / поиска.

Теперь большинство стандартных фильтров можно использовать в AppCode:

Standard scopes

  • Project Source Files — все файлы в составе проекта Xcode.
  • Project Non-Source Files — все файлы из директории с проектным файлом, не включенные в состав проекта Xcode.
  • Changed Files — отображается в списке фильтров, только если в проекте включен контроль версий, и включает в себя все измененные файлы.
  • Default — включает в себя все файлы из дефолтного списка изменений (пользовательские списки тоже показываются):Custom changelists

В Preferences | Appearance & Behavior | Scopes можно создавать свои фильтры:

Custom scope

В Preferences | Appearance & Behavior | File Colors для каждого фильтра можно выставить свой цвет при отображении в режиме Files:

Scole colors

Миграция из Xcode

В этом релизе проработали наиболее очевидное:

  • Стали автоматически выставлять больше настроек [21] при выборе варианта Xcode на экране настройки темы и поведения IDE (показывается при самом первом запуске IDE).
  • Провели первую итерацию доработки раскладки [22]Xcode [22].
  • Улучшили импорт цветовых схем и немного доработали встроенную цветовую схему Xcode.

Если у вас есть идеи улучшений по каждому из пунктов, стоит сразу же создавать тикет в нашем трекере [23] и прикладывать к нему свои настройки экспортированные с помощью File → Export Settings...

Всякое

  • Добавили сворачивание управляющих конструкций if/else, do/while, for, switch в Objective-C/C/C++ (⇧⌘.).
  • Переработали все встроенные цветовые схемы, добавили несколько платформенных (например, Github):
    Что нового в AppCode 2018.1 - 18
  • Стало возможным включать в Git-коммиты лишь часть изменений.

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

Автор: yeswolf

Источник [25]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ios/277944

Ссылки в тексте:

[1] SE-0185: https://github.com/apple/swift-evolution/blob/master/proposals/0185-synthesize-equatable-hashable.md

[2] SE-0143: https://github.com/apple/swift-evolution/blob/master/proposals/0143-conditional-conformances.md

[3] SE-0190: https://github.com/apple/swift-evolution/blob/master/proposals/0190-target-environment-platform-condition.md

[4] SE-0075: https://github.com/apple/swift-evolution/blob/master/proposals/0075-import-test.md

[5] SE-0186: https://github.com/apple/swift-evolution/blob/master/proposals/0186-remove-ownership-keyword-support-in-protocols.md

[6] сделали: https://blog.jetbrains.com/objc/2017/11/2017-3-release/#swift

[7] этот тикет: https://youtrack.jetbrains.com/issue/OC-15947

[8] следующие шаги: https://youtrack.jetbrains.com/issue/OC-16951

[9] RxSwift: https://github.com/ReactiveX/RxSwift

[10] тут: https://youtrack.jetbrains.com/issue/OC-14763

[11] остается: https://youtrack.jetbrains.com/issue/OC-16594

[12] RxSwift: http://slack.rxswift.org/

[13] пока не сделали: https://youtrack.jetbrains.com/issue/OC-16560

[14] сделать нельзя: https://github.com/Quick/Quick/issues/552

[15] кучей других: https://habrahabr.ru/company/JetBrains/blog/318304/

[16] отсюда: https://youtrack.jetbrains.com/issue/OC-14693

[17] проблемы с OCMock: https://youtrack.jetbrains.com/issue/OC-12734

[18] посте @anastasiak2512: https://habrahabr.ru/company/JetBrains/blog/352388/

[19] Xcode header maps: https://habrahabr.ru/post/144834/

[20] BUCK: https://github.com/facebook/buck

[21] больше настроек: https://blog.jetbrains.com/objc/2018/01/xcode-behavior/#interface_settings

[22] раскладки : https://blog.jetbrains.com/objc/2018/01/xcode-behavior/#xcode_keymap

[23] нашем трекере: https://youtrack.jetbrains.com/issues/OC

[24] тут: https://www.jetbrains.com/appcode/download/

[25] Источник: https://habrahabr.ru/post/353468/?utm_source=habrahabr&utm_medium=rss&utm_campaign=353468