{"id":4055,"date":"2018-11-28T16:01:02","date_gmt":"2018-11-28T16:01:02","guid":{"rendered":"https:\/\/blog.jetbrains.com\/objc\/?p=6791"},"modified":"2019-03-29T12:37:55","modified_gmt":"2019-03-29T12:37:55","slug":"appcode-2018-3-release","status":"publish","type":"appcode","link":"https:\/\/blog.jetbrains.com\/fr\/appcode\/2018\/11\/appcode-2018-3-release","title":{"rendered":"AppCode 2018.3 is here!"},"content":{"rendered":"<p>Please welcome the release of AppCode 2018.3!<\/p>\n<p>Read on to learn about Swift 4.2 support, new <strong>Generate<\/strong> actions, Navigate to <strong>Type Declaration<\/strong>, and lots of formatting improvements for Swift, iOS extensions support in the debugger, better resolve in multi-target projects, and much more!<br \/>\n<img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-blog@2x.png\" alt=\"Splash\" width=\"800\" \/><\/p>\n<p align=\"center\"><a class=\"jb-download-button\" href=\"https:\/\/www.jetbrains.com\/objc\/download\/\" target=\"_blank\" rel=\"noopener\"><i class=\"download-icon\"><\/i>Download AppCode 2018.3<\/a><\/p>\n<p><!--more--><\/p>\n<h1 id=\"swift\">Swift<\/h1>\n<p>AppCode 2018.3 supports all the Swift 4.2 features affecting the IDE functionality:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/master\/proposals\/0192-non-exhaustive-enums.md\" target=\"_blank\" rel=\"noopener\">SE-0192<\/a> (Handling Future Enum Cases)<\/li>\n<li><a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/master\/proposals\/0193-cross-module-inlining-and-specialization.md\" target=\"_blank\" rel=\"noopener\">SE-0193<\/a> (Cross-module inlining and specialization)<\/li>\n<li><a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/master\/proposals\/0194-derived-collection-of-enum-cases.md\" target=\"_blank\" rel=\"noopener\">SE-0194<\/a> (Derived Collection of Enum Cases)<\/li>\n<li><a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/master\/proposals\/0195-dynamic-member-lookup.md\" target=\"_blank\" rel=\"noopener\">SE-0195<\/a> (User-defined \u201cDynamic Member Lookup\u201d Types)<\/li>\n<li><a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/master\/proposals\/0196-diagnostic-directives.md\" target=\"_blank\" rel=\"noopener\">SE-0196<\/a> (Compiler Diagnostic Directives)<\/li>\n<li><a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/master\/proposals\/0212-compiler-version-directive.md\" target=\"_blank\" rel=\"noopener\">SE-0212<\/a> (Compiler Version Directive)<\/li>\n<\/ul>\n<p>To track our progress with Swift 5.0, star <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/OC-16492\" target=\"_blank\" rel=\"noopener\">this issue<\/a>.<\/p>\n<h3 id=\"generate\">Generate<\/h3>\n<p>Generate initializers, <code>hashValue<\/code> and the equality operator, <code>description<\/code> and <code>debugDescription<\/code> properties in no time using the new <strong>Generate<\/strong> actions (<code>\u2318N<\/code>):<br \/>\n<img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-generate_@2x.png\" alt=\"Generate\" width=\"456\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-generate_@2x.gif\" \/><\/p>\n<h3 id=\"navigate_to_type_declaration\">Navigate to Type Declaration<\/h3>\n<p>Jump directly to the type declaration in Swift using <code>\u21e7\u2318B<\/code>:<br \/>\n<img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-navigate_type@2x.png\" alt=\"Navigate to Type Declaration\" width=\"456\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-navigate_type@2x.gif\" \/><\/p>\n<h3 id=\"exit_point_highlighting\">Exit point highlighting<\/h3>\n<p>Find all the exit points in your code easily by placing the caret on a <code>break<\/code>, <code>continue<\/code>, <code>try<\/code>, <code>throw<\/code>, or <code>return<\/code> keyword:<br \/>\n<img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-exit_points@2x.png\" alt=\"Exit point highlighting\" width=\"455\" \/><\/p>\n<h3 id=\"formatting\">Formatting<\/h3>\n<p>Get multiline strings indented correctly when writing your code and re-formatting:<br \/>\n<img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-indent@2x.png\" alt=\"Multiline strings indent\" width=\"456\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-indent@2x.gif\" \/><\/p>\n<p>Reformat code easily with dedicated indentation settings for preprocessor directives and their children:<br \/>\n<img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-directives@2x.png\" alt=\"Directives formatting\" width=\"800\" \/><\/p>\n<p>Set alignment settings for ternary operator expressions in <code>Preferences | Editor | Code Style | Swift | Wrapping and Braces | Ternary conditional operation<\/code>, and get continued operator expressions re-indented automatically.<\/p>\n<h2 id=\"swift_package_manager_support_in_clion\">Swift Package Manager support in CLion<\/h2>\n<p>Develop your <a href=\"https:\/\/blog.jetbrains.com\/objc\/2018\/10\/server-side-swift-clion-appcode\/\">server-side projects<\/a> using the <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/8240-swift\" target=\"_blank\" rel=\"noopener\">Swift plugin<\/a> for CLion, which <a href=\"https:\/\/blog.jetbrains.com\/objc\/2018\/10\/spm-support-clion\/\">now supports<\/a> Swift Package Manager projects directly on macOS and Linux:<\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/PGgtes-TfrU\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<h2 id=\"objective_c_c_cpp\">Objective-C\/C\/C++<\/h2>\n<h3 id=\"multiple_targets\">Multiple targets<\/h3>\n<p>Highlighting and completion now work correctly for classes with the same name from different targets. Note that there is <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/OC-17859\" target=\"_blank\" rel=\"noopener\">an issue<\/a> when navigation does not work correctly for such classes and we are still working on it.<\/p>\n<h3 id=\"change_signature\">Change Signature<\/h3>\n<p>Refactoring is easier with the <strong>Change Signature<\/strong> correctly handling the default argument values in method\/function declarations:<br \/>\n<img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-change_sig@2x.png\" alt=\"Change signature\" width=\"456\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-change_sig@2x.gif\" \/><\/p>\n<h3 id=\"quick_documentation\">Quick Documentation<\/h3>\n<p>Macro replacements are now properly formatted and highlighted in the <strong>Quick Documentation<\/strong> (<code>F1<\/code>):<br \/>\n<img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-macro_@2x.png\" alt=\"Macro formatting\" width=\"457\" \/><\/p>\n<h3 id=\"multiline_todo\">Multiline TODO<\/h3>\n<p>Add an indent starting from the second line of your multiline <code>TODO<\/code> comment to differentiate it from ordinary comments, and display the complete <code>TODO<\/code> text via <code>\u23186<\/code>:<br \/>\n<img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-todo_@2x.png\" alt=\"Multiline TODO\" width=\"457\" \/><\/p>\n<h2 id=\"mixed_code\">Mixed code<\/h2>\n<p>The Rename refactoring now works correctly for Objective-C declarations aliased with <code>swift_name<\/code> attribute and for various cases with Swift and Objective-C enums.<\/p>\n<h2 id=\"performance\">Performance<\/h2>\n<p>Thanks to performance fixes in unit-testing support, there should be no more freezes when you open top-level menus (such as the <strong>Run Configurations<\/strong> popup with test configurations), run a heap of unit-tests, or navigate to the test code.<\/p>\n<h2 id=\"run_debug\">Run &amp; Debug<\/h2>\n<h3 id=\"ios_extensions\">iOS extensions<\/h3>\n<p>AppCode debugger now supports iOS extensions in the same way Xcode does:<br \/>\n<img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-ios_ext@2x.png\" alt=\"iOS extensions\" width=\"800\" \/><\/p>\n<h3 id=\"lldb_console_for_swift\">LLDB console for Swift<\/h3>\n<p>Completion works now in LLDB console for Swift:<br \/>\n<img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-lldb_console_@2x.png\" alt=\"Completion in LLDB console\" width=\"457\" \/><\/p>\n<h2 id=\"features_trainer_plugin\">Features Trainer plugin<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-learn@2x.png\" alt=\"IDE Features Trainer\" width=\"800\" \/><br \/>\nAppCode has tons of useful actions and shortcuts, and it takes time to become familiar with all of them. To help you learn the most important ones, we\u2019ve created a set of lessons for the <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/8554-ide-features-trainer\" target=\"_blank\" rel=\"noopener\">IDE Features Trainer<\/a> plugin, which is now available for download in <code>Preferences | Plugins | Marketplace | Featured<\/code>.<\/p>\n<h2 id=\"ide\">IDE<\/h2>\n<h3 id=\"search_everywhere\">Search Everywhere<\/h3>\n<p>The updated <strong>Search Everywhere<\/strong> (<code>Double\u21e7<\/code>) now includes multiple actions under the one tool window:<\/p>\n<ul>\n<li>Search Everywhere<\/li>\n<li>Go to Class \/ File \/ Symbol<\/li>\n<li>Find Action<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-search_everywhere_@2x.png\" alt=\"Search Everywhere\" width=\"457\" \/><\/p>\n<p>Each one has its own separate tab in the dialog, and you can use <code>\u21e5<\/code> to switch between them.<\/p>\n<h3 id=\"run_anything\">Run Anything<\/h3>\n<p>Run Anything (<code>Double\u2303<\/code>) is a new universal way to run and debug any configuration in your project, and it can even be used to open a project:<br \/>\n<img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-run_anything_@2x.png\" alt=\"Run Anything\" width=\"457\" \/><\/p>\n<p>To run a configuration, just start typing its name. To debug, hold down the <code>\u21e7<\/code> key to switch to <strong>Debug<\/strong> mode. To open a project, type <code>open<\/code> and select the desired project from the list.<\/p>\n<h3 id=\"activity_monitor\">Activity Monitor<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-activity@2x.png\" alt=\"Activity Monitor\" width=\"455\" \/><\/p>\n<p>This new experimental feature shows how much CPU the subsystems and plugins (both built-in and additionally installed ones) are consuming. To access it, go to <code>Help | Activity Monitor<\/code>. If you see a subsystem whose %CPU is unusually high, feel free to ask our <a href=\"https:\/\/intellij-support.jetbrains.com\/hc\" target=\"_blank\" rel=\"noopener\">support team<\/a> about it or report it to <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/OC\" target=\"_blank\" rel=\"noopener\">our tracker<\/a>.<\/p>\n<h3 id=\"new_plugins_ui\">New Plugins UI<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-plugins@2x.png\" alt=\"Plugins UI\" width=\"800\" \/><\/p>\n<p>The plugins settings under <code>Preferences | Plugins<\/code> have been redesigned from the ground up. The new UI makes it much easier to control the plugins installed and keep them up-to-date.<\/p>\n<h3 id=\"featured_plugins_and_marketplace\">Featured plugins and marketplace<\/h3>\n<p>You can see a list of the most valuable plugins for AppCode located in the <strong>Featured<\/strong> plugins list. Or, sort all the plugins by rating or number of downloads. If you are a plugin writer, check out our <a href=\"https:\/\/plugins.jetbrains.com\/marketplace\" target=\"_blank\" rel=\"noopener\">new platform<\/a> for third-party plugin vendors.<\/p>\n<h2 id=\"version_control\">Version Control<\/h2>\n<h3 id=\"git_submodules\">Git submodules<\/h3>\n<p>AppCode now supports Git repositories with submodules: repository with submodules is cloned recursively; <strong>Diff<\/strong>, <strong>History<\/strong>, and conflict resolution now work for submodule folders; and updating the project correctly updates the submodules.<\/p>\n<h3 id=\"github_pull_requests\">Github Pull Requests<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-github_@2x.png\" alt=\"Github Pull Requests\" width=\"457\" \/><\/p>\n<p>View all the pull requests from your GitHub repository right inside the IDE, thanks to the brand new <strong>GitHub Pull Requests<\/strong> tool window (<code>VCS | Git | View Pull Requests<\/code>).<\/p>\n<h2 id=\"accessibility\">Accessibility<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2018\/11\/objc-high-constrast@2x.png\" alt=\"High-contrast theme\" width=\"800\" \/><br \/>\nTo make our tools accessible to as many people as possible, we\u2019ve added a few new options to the Appearance section in the IDE\u2019s settings (<code>Preferences | Appearance &amp; Behavior | Appearance<\/code>). Here, you\u2019ll find a new <strong>High-contrast<\/strong> IDE theme, expanded support for screen readers (they can now read line numbers, VCS annotations, and gutter icons tooltips), and an option to adjust IDE colors for people with color deficiencies.<\/p>\n<p>That\u2019s it! Explore all the new features in detail on <a href=\"https:\/\/www.jetbrains.com\/objc\/whatsnew\/\" target=\"_blank\" rel=\"noopener\">our website<\/a> and start your 30-day free evaluation to try them!<\/p>\n<p><em>Your AppCode Team<\/em><br \/>\n<em>JetBrains<\/em><br \/>\n<em>The Drive to Develop<\/em><\/p>\n","protected":false},"author":437,"featured_media":4048,"comment_status":"open","ping_status":"open","template":"","categories":[89],"tags":[737,719,735,736,477,671,445],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/appcode\/4055"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/appcode"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/types\/appcode"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/437"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/comments?post=4055"}],"version-history":[{"count":0,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/appcode\/4055\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/4048"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=4055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=4055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=4055"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=4055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}