What's New in AppCode

AppCode supports the first big part of Swift 4.1, and provides better completion and navigation for implicitly imported Swift modules and Objective-C frameworks used from Swift.

It also offers Quick and RxSwift support, improved parsing and resolve for OCMock, and support for wireless debugging and location simulation.

Download
Free 30-day trial
2018.1 Mar 28

Swift

Modern Swift

AppCode 2018.1 comes with the first part of Swift 4.1 support including conditional conformances, build configuration import tests and more.

Implicit modules

Implicit modules

Dispatch, CoreGraphics and lots of other silently imported frameworks are now correctly resolved to provide you with much improved completion and navigation.

Quick support

Quick support

Have Quick tests displayed hierarchically in the test runner, and easily jump to the source of the specific test.

RxSwift support

RxSwift support

Completion and navigation now work correctly for RxSwift and other frameworks that use Swift extension type bounds.

Documentation comments

Use new indentation options for comments in Preferences | Editor | Code Style | Swift | Code Generation and reformat your code easily.

See multiline comments formatted properly in Quick Documentation (F1).

Adopted protocols and where clauses

See adopted protocols and where clauses right in the Structure view, File Structure dialog, and Go To Class/Symbol popups.

Objective-C and mixed code

Breadcrumbs

Breadcrumbs

Keep track of your location in Objective-C/C/C++ code with the breadcrumbs – small markers at the bottom of the editor that help you navigate around your code.

Resolution improvements

Resolution improvements

Benefit from the correct translation of Class runtime type, SEL/IMP types and generic pointers in Objective-C to Swift.

Use the Rename refactoring and Find Usages for Swift properties in Objective-C code and rest assured these actions are working correctly.

C++ support

All the latest C++ language support improvements implemented by our colleagues from the CLion team are available in AppCode:

  • Support for C++17 structured bindings
  • Support for C++17 if and switch with initializers
  • Proper support for ternary operator
  • Reliable refactorings (Rename and Change Signature) for hierarchies

The editor is now more responsive thanks to incremental highlighting and changes to typing handlers.

Performance

Navigation to class/symbol works much faster in Swift, Objective-C and mixed projects.

Wireless debugging

AppCode now supports wireless debugging introduced in Xcode 9, so you can run and debug your application on devices in your local network.

Location simulation

Use predefined locations in Run or Debug configurations.

Change the location on the fly using the Simulate Location button in the Run or Debug tool window.

Create your custom location setup and use it in the same way as in Xcode.

Project scopes

Use built-in custom scopes and create your own to filter the specific subset of files in the Project view, Inspection Scope dialog, or Find in Path dialog.

Set your custom color for the scope to easily distinguish files in this scope from others.

Color schemes

We've re-worked our bundled color schemes and fixed all the issues with code highlighting for Objective-C/C/C++/Swift.

We've also added several new color schemes (such as Github) and improved Xcode scheme import.

Code folding

Code folding for control flow

Fold control flow statements (if/else, do/while, for, switch) using ⇧⌘. in Objective-C/C/C++/Swift. It works for both multi-line blocks and blocks inside braces.

Xcode behavior

Xcode keymap

Use the updated bundled Xcode keymap to get most Xcode shortcuts in AppCode. We've fixed a lot of conflicts with system macOS shortcuts.

Xcode behavior

When switching from Xcode to AppCode, select Xcode behavior and have completion, breakpoint, tabs behavior, code style, and font size carefully tuned to match Xcode settings. Learn more

Version control

Code chunks to commit

Select code chunks to commit

Want to commit only the selected changes from files and leave others for later? Partial Git commits (git add -p) can help, and now AppCode supports them!

To include code chunks in a commit, use the check-boxes in the Diff pane of the Commit Changes dialog.

Changelists

Move a change to the changelist

While editing a file, you can see change markers in the left gutter. These not only let you overview the change and roll it back, but also move it to any existing changelist or create a new one and add the current code chunk to it.

Download
Free 30-day trial
2017.3 Nov 30

Swift

Modern Swift

AppCode 2017.3 comes with support for all the latest Swift 4 features including multi-line string literals, smart keyPaths, class and subtype existentials, and more.

Inspections and intentions

Add or remove explicit types in variable declarations with the new Add/Remove explicit type intention.

Remove redundant @objc attributes in your code base simply by running the corresponding inspection on the whole project or by using the quick-fix in your code.

Parsing and resolution correctness

Focusing on parser and resolution accuracy, this release brings support for access modifiers in Swift together with multiple improvements in the resolution engine.

Completion of optionals

When completing an optional candidate, press ? or ! to have it inserted in the code right after the currently selected item in the completion list.

Mixed code

This release makes code analysis, completion, navigation, and refactorings in mixed Objective-C/Swift code more accurate thanks to the following improvements:

  • Correct resolve for Swift initializers coming from Objective-C
  • Better Objective-C/Swift translation
  • Resolve for Objective-C classes imported via .pch from Swift code

С++

Boost tests

Boost and Catch support

Support for Catch and Boost.Test test frameworks is now available in AppCode for C++. Easily create test run configurations, run separate tests directly from the source file, rerun failed tests, and do more cool things.

JUCE support

JUCE support

JUCE is widely used to develop multiplatform audio applications. AppCode 2017.3 comes with multiple fixes to the JUCE library support to avoid various incorrect code analysis warnings and allow proper navigation through the code.

List initialization

Since C++11, list initialization has been the standard way to initialize an object from braced-init-list. AppCode 2017.3 has reworked support for this language feature, including fixes for many of the incorrect code analysis warnings:

  • Invalid “parameter type mismatch” error for boost weak pointer initialization
  • Failed resolve for the members of auto variables initialized with uniform initialization
  • Invalid warnings when C99 union initializers are used
  • Missing “too few arguments” warning in case of invalid list initialization
  • And others

Name lookup

Name lookup is a standard C++ procedure to associate a name with a declaration. This release fixes the following situations when the procedure previously failed in AppCode:

  • Resolving a name before the corresponding declaration from the same scope
  • Resolving a name imported via using in some cases
  • Resolving symbols brought into the scope by class inheritance
  • And others

Build and Run

Build performance

We’ve reworked our support for the Xcode build system to make incremental builds much faster than before.

"Unlock the device" notification

AppCode now waits for the device to be unlocked and shows the corresponding notification when running/debugging your application.

Color schemes

Color schemes

Easily distinguish method/function declarations and calls in Swift, Objective-C, C, and C++ by configuring different colors for them in Preferences | Editor | Color Scheme

Testing

Testing

Now it’s even easier to run a single test or all tests in your test file, by using special icons in the editor’s left gutter for Swift, Objective-C, and C++.

Project wizard

Project wizard

Icons in project, file and target wizards are now pixel-perfectly rendered.

And even more

  • When switching between branches, the IDE preserves your workspace and automatically restores it when necessary.
  • When committing Git patches from the IDE, the IDE reads the author and commit details provided by the patch.
  • When using Tasks & Contexts, you can now shelve the changes related to your current task when you start a new task; unshelve the changes when you switch back.
  • And some more
2017.2 Jul 26

Swift

Extract method

Extract method

Easily extract methods and functions from your Swift code just by pressing ⌥⌘M, and have the signature suggested automatically together with parameter names.

Override/Implement completion

Override/Implement completion

Type the entity name you need to override or implement, select it in the completion list, and have the corresponding stub automatically generated by AppCode.

Code style

Benefit from new formatting options for Swift, including:

  • separate Blank Lines sections for protocol properties and methods
  • spaces within code braces for single-line closures
  • ability to keep simple methods and functions in one line
Inline type hints

Inline type hints

Turn on Show Swift type hints in Preferences | Editor | General | Appearance and have type hints displayed for variables without an explicit type annotation.

Objective-C

__auto_type support

__auto_type support

AppCode is now able to parse __auto_type expressions in Objective-C/C/C++ and shows the __auto_type keyword in the completion list.

C++

Code analysis correctness

Focusing on correctness, AppCode 2017.2 improves its C++ code analysis across the board. For example:

  • Fixes for incorrect code analysis in cases when std::enable_if is used
  • Fixes for the issues with resolving STL containers with nested template type
  • Proper support for va_* macros was added
  • Correct handling of functions that take parameter pack arguments and non-template arguments

Intentions and quick-fixes

Even when variable is unused, constructor might still have some side effects. A new quick-fix was added to preserve non-trivial constructor call on unused variable.

Intentions and quick-fixes in C++ code suggest C++ type casts (static_cast, dynamic_cast, reinterpret_cast, const_cast) instead of C-style casts.

Documentation

Documentation

AppCode 2017.2 brings support for the Xcode 8.x-9.x documentation format for Objective-C/C/C++ and Swift. Press F1 and have the documentation displayed for a symbol under the caret.

Build messages

Build messages

Benefit from improved build messages displaying compiler note messages as a subnode of the corresponding warning or error.

Version control

Reword

Reword

If you committed your changes but not pushed yet and would like to change the commit message, you can do this with the new Reword action.

Revert

Revert

The Git Revert action is now available right from the Log view. Select any number of commits and call Revert from the context menu.

Commit messages

Commit messages

It is important to keep commit messages easy-to-read and expressive, and formatting is quite important here. Configure commit messages inspections in Preferences | Version Control | Commit Dialog, and select whether you want to have a blank line between subject and body, set the maximum text length, or check the spelling in the comments.