AppCode 2017.1: Swift 3 support, Create from usage for types and initializers, Override/Implement improvements, better completion and more!

AppCode 2017.1 is here, so download and try it right now! The patch update is also available if you are using previous 2016.3.3 or 2017.1 RC2 version.


To summarize this update:

Download AppCode 2017.1


Language support

This release delivers support for a huge part of Swift 3 features in AppCode:

  • SE-0005 (Better translation of Objective-C APIs into Swift) brings correct resolution, completion and navigation for entities aliased with __attribute__(swift_name("..."))NS_SWIFT_NAME or CF_SWIFT_NAME together with more accurate resolution for Objective-C code constructs in general:SE-0005
    NS_ENUM and NS_OPTIONS are now also correctly translated into Swift. As for the same features in refactorings/usages search functionality, we’re still working on them.
  • SE-0062 (Referencing Objective-C key-paths) brings correct parsing, resolution, navigation and find usages for #keyPath(...) expressions:SE-0062
  • SE-0064 (Referencing the Objective-C selector of property getters and setters) adds support for new #selector(...) overrides in the parser, navigation, and resolution:
  • SE-0060 (Enforcing order of defaulted parameters)
  • SE-0057 (Importing Objective-C Lightweight Generics)
  • SE-0037 (Clarify interaction between comments & operators)
  • SE-0116 (Import Objective-C id as Swift Any type)
  • SE-0096 (Converting dynamicType from property to operator) brings correct parsing and completion for the new type(of:) function:type(of:)
  • SE-0033 (Import Objective-C Constants as Swift Types) brings correct resolution, completion and navigation for Objective-C constants wrapped into Swift types using __attribute__((swift_wrapper(struct))) or __attribute__((swift_wrapper(enum)))
  • SE-0091 (Improving operator requirements in protocols) brings correct parsing, сompletion, and generation for prefix, infix and postfix operators:SE-0091
  • Better translation of Objective-C nullability attributes in Swift (OC-11980), together with support for nullability audited regions in Objective-C (OC-13932)
  • Metatypes support (OC-14366)
  • Correct resolve and completion for self.init() and super.init() calls

Create from usage

AppCode 2016.3 added intentions for generating functions, variables, and properties from their usages in Swift. Now the corresponding actions are also available for Swift types (such as classes, structs, enums and protocols) and their initializers:

Create from usage

Read this blog post for more details.


Override/Implement (^O/^I) helps you quickly implement all required protocol methods and override multiple methods at once. In this release, we’ve significantly improved the usability of the Override/Implement popup and the correctness of generated code:

  • All the members in Override/Implement popup are now shown hierarchically:Override/Implement
  • Designated/convenience/required initializers are marked with the appropriate keyword
  • Class methods in extensions are correctly overridden
  • Dynamic methods in extensions are offered for overriding
  • Static methods are not suggested anymore
  • Optional methods from superclass are now offered only for overriding and not for implementation


Now AppCode takes into account argument names when completing Swift methods and functions:

Completion improvements

Besides, dynamic, lazy, postfix, prefix and indirect keywords are added to the completion list.

Structure view

There are plenty of navigation views in AppCode to help you find your way through your code faster. Structure view (⌘7) and File Structure popup (⌥F12) show the structure of the current file, allowing you to quickly jump to the particular symbol. In this version we’ve added support for showing //MARK, //TODO, and //FIXME comment tags in this view:

Structure view

In case you need to see only //TODO and //FIXME comment tags, use ⌘6 (TODO view):

TODO view

Want to learn more about all the different navigation features in AppCode? Read our tutorial here.


As usual, all the C++ language features that our CLion team supported are also available in AppCode:

  • C++14:
    • auto return type
    • generic lambdas
    • variable templates
    • generalized lambda captures
  • C++17: correct parsing and resolution for nested namespaces
  • Make auto intentions

Read more about them in this blog post.


Build messages

Filter compiler messages in your application – select the necessary message types with the Filter messages button on the left-hand side of the Build Messages tool window:

Build messages

Xcode-like breakpoints

Sometimes with the default IntelliJ behavior for breakpoints, you can accidentally remove parameterized breakpoints with complex conditions. To avoid this, turn on the Drag to the editor area option in Preferences | Build, Execution, Deployment | Debugger | Remove breakpoint. After that, click on a breakpoint to enable/disable it, or drag a breakpoint to the editor area to remove it:


Emoji support

Like all IntelliJ IDEs, AppCode now correctly renders Emoji characters in the editor and IDE views and lets you quickly insert them with ⌥⌘Space:

Emoji support

Find in Path

The Find in Path dialog has been significantly re-worked by the IntelliJ Platform team. Now it shows all the options on a single pane, together with a preview of the results:

Find in Path

Other changes

  • The Remote hosts access plugin is bundled in AppCode.
  • The Branches popup has been redesigned and can now mark important branches as Favorites.
  • VCS Log viewer now allows you to use regular expressions and match or ignore case when searching.
  • Fixes for Dvorak as well as Korean, Chinese and Japanese keyboard layouts.
  • Zero-latency typing enabled by default.

That wraps it up! Check out this short demo to see the new features in action:

Download AppCode 2017.1

Your AppCode team
The Drive to Develop

Comments below can no longer be edited.

9 Responses to AppCode 2017.1: Swift 3 support, Create from usage for types and initializers, Override/Implement improvements, better completion and more!

  1. Stanislav Dombrovsky

    Stanislav Dombrovsky says:

    March 28, 2017

    Short update about Xcode 8.3. We are checking AppCode for compatibility issues right now and will deliver Xcode 8.3 support in one of 2017.1.x updates.

    Right now we have only 2 issues related (,

    • Avatar

      Mux says:

      March 29, 2017

      Why do you always wait until after Apple releases a new Xcode before making AppCode compatible?

      The first 8.3 beta was released on januari 24, so you’ve had over 2 months to check this and fix things. The same delay happened with Xcode 8.2.

      I would expect a new already compatible AppCode release shortly before a new Xcode release.

      • Avatar

        Tatiana Shabaeva says:

        March 30, 2017

        This has been discussed in, please add your comments to the issue (if you wish). In short: it’s not possible to be sure that AppCode is compatible with Xcode release until we actually test our IDE with the Xcode release build. There is always a diff between Xcode betas, there is also a chance that something can unexpectedly change in the final release.

  2. Avatar

    mike says:

    March 30, 2017

    I totally agree with MUX.

    This morning I was happy to that there’s a AppCode update – but then I was disappointed to see that XCode 8.3 isn’t supported.

    AppCode is a paid IDE, but we can’t use for several weeks every time XCode is updated. That’s not the way things should work.

  3. Avatar

    Ivan says:

    March 30, 2017

    Code completion not working!
    This worked in EAP versions!

  4. Avatar

    ych says:

    March 31, 2017

    A keymap problem occurred on my Japanese keyboard.
    I mapped “Select Next Tab” to “Shift + Command + ]” and “Select Previous Tab” to “Shift + Command + [“, but actually “Select Next Tab” is ‘Shift + Command + [‘ and ‘Previous tab’ was mapped to ‘shift + command + @’ on my keyboard.
    The ‘[‘, ‘]’ keys on the English keyboard is located at ‘@’, ‘[‘ on the Japanese keyboard, so it is misinterpreted?

    • Avatar

      Tatiana Shabaeva says:

      March 31, 2017

      What JRE/JVM version is displayed in “About” window? The issue is likely related to ongoing rework of national keyboard layouts, it makes sense to add a comment with JRE information there. Likely a workaround suggested by Denis should help (JB runtime build #801).

  5. Avatar

    ych says:

    April 3, 2017

    My environment is
    JRE: 1.8.0_112-release-736-b14 x86_64
    JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
    Mac OS X 10.12.4

    I will try out a workaround. Thanks.

Discover more