{"id":4189,"date":"2019-07-24T15:44:44","date_gmt":"2019-07-24T15:44:44","guid":{"rendered":"https:\/\/blog.jetbrains.com\/objc\/?p=7086"},"modified":"2019-09-19T19:50:49","modified_gmt":"2019-09-19T19:50:49","slug":"appcode-2019-2-release","status":"publish","type":"appcode","link":"https:\/\/blog.jetbrains.com\/fr\/appcode\/2019\/07\/appcode-2019-2-release","title":{"rendered":"AppCode 2019.2 is Here With Initial Swift 5.1 Support, Code Coverage for Unit Tests, LLDB Disassembly View, Create From Usage for Enum Cases&#8230; and Even More!"},"content":{"rendered":"<p>Please welcome the release of our second major update this year, AppCode 2019.2!<\/p>\n<p><img decoding=\"async\" alt=\"Splash\" width=\"800\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/07\/objc-blog@2x.png\"\/><\/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 2019.2<\/a><\/p>\n<p><!--more--><\/p>\n<h1 id=\"swift\">Swift<\/h1>\n<h2 id=\"language_support\">Language Support<\/h2>\n<p>AppCode 2019.2 brings initial support for Swift 5.1 including:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/master\/proposals\/0242-default-values-memberwise.md\" target=\"_blank\" rel=\"noopener\">SE-0242<\/a>: Synthesize default values for the memberwise initializer.<\/li>\n<li><a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/master\/proposals\/0254-static-subscripts.md\" target=\"_blank\" rel=\"noopener\">SE-0254<\/a>: Static and class subscripts.<\/li>\n<li><a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/master\/proposals\/0068-universal-self.md\" target=\"_blank\" rel=\"noopener\">SE-0068<\/a>: Expanding Swift <code>Self<\/code> to class members and value types.<\/li>\n<li><a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/master\/proposals\/0260-library-evolution.md\" target=\"_blank\" rel=\"noopener\">SE-0260<\/a>: Library Evolution for Stable ABIs.<\/li>\n<li><a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/master\/proposals\/0258-property-wrappers.md\" target=\"_blank\" rel=\"noopener\">SE-0258<\/a>: Property Wrappers<\/li>\n<\/ul>\n<p>See a complete overview of Swift 5.1 support <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/OC-18443\" target=\"_blank\" rel=\"noopener\">here<\/a>. <\/p>\n<h2 id=\"folding\">Folding<\/h2>\n<p>Closures in Swift often contain a lot of statements. We\u2019ve implemented code folding for them to make it easier for you to write and read your code:<\/p>\n<p><img decoding=\"async\" alt=\"Closure folding\" width=\"456\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/05\/objc-closure_folding@2x.gif\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/05\/objc-closure_folding@2x.png\"\/><\/p>\n<h2 id=\"highlighting\">Highlighting<\/h2>\n<p>Code highlighting depends on the code resolution; without code entities being resolved, we don\u2019t know how to highlight them. However, even without this information, we can highlight Swift keywords \u2013 and that\u2019s exactly what we\u2019ve done to make the code more readable:<\/p>\n<p><img decoding=\"async\" alt=\"Keywords\" width=\"455\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/05\/objc-keywords@2x.png\"\/><\/p>\n<h2 id=\"create_from_usage\">Create From Usage<\/h2>\n<p>We introduced Create From Usage intentions for Swift <a href=\"https:\/\/blog.jetbrains.com\/objc\/2016\/12\/appcode-2016-3-release\/#cfu\">variables, functions and properties<\/a> in AppCode 2016.3 and added <a href=\"https:\/\/blog.jetbrains.com\/objc\/2017\/03\/appcode-2017-1-release\/#cfu\">types and initializers<\/a> to the family back in 2017.1 version. In AppCode 2019.2, we\u2019ve added an intention for Swift enum cases:<\/p>\n<p><img decoding=\"async\" alt=\"Create From Usage\" width=\"455\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/06\/objc-create_enum@2x.gif\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/06\/objc-create_enum@2x.png\"\/><\/p>\n<h2 id=\"find_usages\">Find Usages<\/h2>\n<p>When searching for a code construct, it\u2019s important to see not only <em>where<\/em> the particular code construct is used, but also <em>how<\/em> you use it in the code. Are you assigning the value to the variable or reading it? Do you create a new class instance or have a subclass extending its functionality? These details help reduce the number of code usages you need to look through. <\/p>\n<p>In AppCode 2019.2, you can see <em>how<\/em> your Swift code is used \u2013 right in the <strong>Find Usages<\/strong> (<code>\u2325F7<\/code>) tool window:<\/p>\n<p><img decoding=\"async\" alt=\"Find Usages\" width=\"455\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/07\/objc-find_usages@2x.png\"\/><\/p>\n<h2 id=\"join_lines\">Join Lines <\/h2>\n<p>Easily merge variable declaration and initialization using <strong>Join Lines<\/strong> (<code>\u2303\u21e7J<\/code>):<\/p>\n<p><img decoding=\"async\" alt=\"Join Lines\" width=\"456\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/05\/objc-join_lines@2x.gif\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/05\/objc-join_lines@2x.png\"\/><\/p>\n<h1 id=\"auto_import\">Auto-Import <\/h1>\n<p>We\u2019ve added <a href=\"https:\/\/blog.jetbrains.com\/objc\/2018\/04\/appcode-2018-1-1\/\">header maps<\/a> support a year ago, primarily for projects using <a href=\"https:\/\/buck.build\/\" target=\"_blank\" rel=\"noopener\">BUCK<\/a>. After initial implementation, there was a problem with auto-import functionality when a long and incorrect path was added when importing a header. In AppCode 2019.2, we have fixed it and now auto-import should add a correct <code>import<\/code> directive.<\/p>\n<h1 id=\"debug\">Debug<\/h1>\n<h2 id=\"disassembly_view\">Disassembly View<\/h2>\n<p>When the source code is not available, <strong>Force Step Into<\/strong> (<code>\u2325\u21e7F7<\/code>) the disassembled code (or select the frame in the <strong>Debug<\/strong> tool window):<\/p>\n<p><img decoding=\"async\" alt=\"Disassembly View\" width=\"455\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/07\/objc-disasm@2x.png\"\/><\/p>\n<h2 id=\"completion\">Completion<\/h2>\n<p>Completion for code constructs has worked in LLDB console for a long time; now you can complete debugger commands as well by using <code>\u21e5<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"LLDB commands completion\" width=\"455\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/07\/objc-lldb_completion@2x.gif\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/07\/objc-lldb_completion@2x.png\"\/><\/p>\n<h1 id=\"code_coverage\">Code Coverage<\/h1>\n<p>It\u2019s finally here! This top-requested feature has finally made its way into AppCode. No additional configuration is required \u2013 just <strong>Run With Coverage<\/strong>:<\/p>\n<p><img decoding=\"async\" alt=\"Run With Coverage\" width=\"742\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/07\/objc-cov1@2x.gif\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/07\/objc-cov1@2x.png\"\/><\/p>\n<p>See the coverage results in the left editor gutter:<\/p>\n<p><img decoding=\"async\" alt=\"Coverage Results\" width=\"744\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/07\/objc-cov_editor@2x.png\"\/><\/p>\n<p>Click the coverage color indicator to see the hit count or hide the coverage:<\/p>\n<p><img decoding=\"async\" alt=\"Hit Count\" width=\"744\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/07\/objc-hit_count@2x.png\"\/><\/p>\n<p>View coverage statistics in the <strong>Project <\/strong>view or in a separate tool window:<\/p>\n<p><img decoding=\"async\" alt=\"Toolwindows\" width=\"795\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/07\/objc-toolwindows@2x.png\"\/><\/p>\n<h1 id=\"build_run_debug_and_test_during_indexing\">Build, Run, Debug, and Test During Indexing<\/h1>\n<p>In large projects, initial indexing and caching can take a lot of time. And sometimes you don\u2019t even need to write the code, you just need to build the project and make a small change. In AppCode 2019.2, you can build, run, debug, and test your project immediately, even when you open it for the first time:<\/p>\n<p><img decoding=\"async\" alt=\"Build, Run, Debug and Test during indexing\" width=\"800\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/07\/objc-run_debug@2x.gif\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/07\/objc-run_debug@2x.png\"\/><\/p>\n<h1 id=\"integrations\">Integrations<\/h1>\n<h2 id=\"textmate_bundles_plugin\">TextMate Bundles Plugin<\/h2>\n<p>Sometimes your projects may include bits of code in other languages. For some of these, AppCode offers full-featured support, including:<\/p>\n<ul>\n<li>Bundled support for JavaScript, XML, HTML, CSS, and YAML.<\/li>\n<li>A plugin supporting <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/10619-kotlin-native-for-appcode\" target=\"_blank\" rel=\"noopener\">Kotlin\/Native<\/a>.<\/li>\n<li>Plugins for <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/7793-markdown\" target=\"_blank\" rel=\"noopener\">Markdown<\/a> and <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/8149-applescript-support\" target=\"_blank\" rel=\"noopener\">AppleScript<\/a>.<\/li>\n<\/ul>\n<p>&#8230;and more. Still, for some languages support is not available, and for those, we now provide basic code completion and highlighting out of the box via TextMate bundles:<\/p>\n<p><img decoding=\"async\" alt=\"TextMate Bundles Plugin\" width=\"455\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/07\/objc-ruby@2x-1.png\"\/><\/p>\n<p>Most Ruby DSLs will also work after a <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/OC-13269\" target=\"_blank\" rel=\"noopener\">bit of configuration<\/a>. <\/p>\n<h2 id=\"shell_script_plugin\">Shell Script Plugin<\/h2>\n<p>Code assistance for shell scripts works out of the box:<\/p>\n<p><img decoding=\"async\" alt=\"Shell Script Plugin\" width=\"455\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/07\/objc-shell@2x.png\"\/><\/p>\n<h1 id=\"commit_window\">Commit Window<\/h1>\n<p>Thanks to the IntelliJ Platform team, it\u2019s possible to commit your changes directly from <strong>Local Changes<\/strong>:<\/p>\n<p><img decoding=\"async\" alt=\"Commit Window\" width=\"455\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2019\/07\/objc-local_changes@2x.png\"\/><br \/>\nTo give it a go, select the <strong>Commit from the Local Changes without showing a dialog<\/strong> checkbox in <code>Preferences | Version Control | Commit Dialog<\/code>.<\/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 free 30-day evaluation to try them in action!<\/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 2019.2<\/a><\/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":4181,"comment_status":"open","ping_status":"open","template":"","categories":[89],"tags":[754,441,632,719,477,671,207],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/appcode\/4189"}],"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=4189"}],"version-history":[{"count":0,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/appcode\/4189\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/4181"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=4189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=4189"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=4189"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=4189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}