{"id":283624,"date":"2022-10-07T12:16:01","date_gmt":"2022-10-07T11:16:01","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=appcode&#038;p=283624"},"modified":"2022-10-10T10:36:57","modified_gmt":"2022-10-10T09:36:57","slug":"appcode-starts-the-2022-3-eap","status":"publish","type":"appcode","link":"https:\/\/blog.jetbrains.com\/zh-hans\/appcode\/2022\/10\/appcode-starts-the-2022-3-eap","title":{"rendered":"AppCode Starts the 2022.3 EAP"},"content":{"rendered":"<p>Hi everyone,<\/p>\n<p>Today we are starting the Early Access Program for AppCode 2022.3, and the first build (223.6160.86) is already <a href=\"https:\/\/www.jetbrains.com\/objc\/nextversion\" target=\"_blank\" rel=\"noopener\">available for download<\/a>.<\/p>\n<p>Give the free EAP builds a try and let us know what you think about the changes! Share your feedback in the comments or submit it to our <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/OC\" target=\"_blank\" rel=\"noopener\">issue tracker<\/a>.<\/p>\n<p><img decoding=\"async\" alt=\"AppCode starts the 2022.3 EAP\" width=\"1024\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/09\/Blog_Featured_image_1280x600_AppCode-2x.png\"><\/p>\n<p align=\"center\"><a class=\"jb-download-button\" href=\"https:\/\/www.jetbrains.com\/appcode\/nextversion\" target=\"_blank\" rel=\"noopener\"><i class=\"download-icon\"><\/i>DOWNLOAD APPCODE EAP<\/a><\/p>\n<p>Here are the main highlights:<\/p>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/appcode\/2022\/09\/appcode-starts-the-2022-3-eap\/#uml_diagrams_enhancements\">UML diagrams enhancements<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/appcode\/2022\/09\/appcode-starts-the-2022-3-eap\/#inject_languages_into_strings\">Inject SQL, HTML, RegExp, and other languages into strings<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/appcode\/2022\/09\/appcode-starts-the-2022-3-eap\/#build_destinations_for_swift_packages\">Build destinations for Swift packages<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/appcode\/2022\/09\/appcode-starts-the-2022-3-eap\/#quick_fixes_and_intention_previews\">Quick-fixes and intention previews<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/appcode\/2022\/09\/appcode-starts-the-2022-3-eap\/#swift_language_improvements\">Inline function refactoring and other Swift language improvements<\/a><\/li>\n<\/ul>\n<h2 id=\"uml_diagrams_enhancements\">UML diagrams enhancements<\/h2>\n<p><a href=\"https:\/\/www.jetbrains.com\/help\/objc\/class-diagram.html\" target=\"_blank\" rel=\"noopener\">UML diagrams<\/a> for Swift and Objective-C classes were introduced in AppCode 2022.2. In this EAP they get a few fixes and improvements. You can now drag items from files in the <em>Project View<\/em> to the diagram:<br \/>\n<img decoding=\"async\" alt=\"Drag and drop on UML\" width=\"600\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/09\/drag_and_drop.gif\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/09\/drag_and_drop.png\"><\/p>\n<p>You can also now filter nodes on the diagram by scope (project files, opened files, and so on):<br \/>\n<img decoding=\"async\" alt=\"Filter diagram by scope\" width=\"600\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/09\/filter_diagram_scope.png\"><\/p>\n<h2 id=\"inject_languages_into_strings\">Inject SQL, HTML, RegExp, and other languages into strings<\/h2>\n<p>When coding in Swift, there can sometimes be pieces of code inside string literals, such as SQL strings, HTML code, or regular expressions. Wouldn\u2019t it be nice if an IDE could treat them as code, and not as text? We thought it would, so we\u2019ve made it possible in AppCode!<\/p>\n<p>Language injections let you work with pieces of code inside string literals (for example, with SQL queries or regular expressions), as well as tags or attributes in XML-like languages. To enable it, set the caret on a string, press <em>Alt+Enter<\/em>, and select the language you want to inject there.<\/p>\n<p>AppCode provides accurate code highlighting based on the language chosen. It also has language-specific intentions and actions, and you can edit a code fragment in the dedicated editor section. For example, for regular expressions you can check whether a string matches the RegExp right in the IDE:<br \/>\n<img decoding=\"async\" alt=\"Language injections\" width=\"600\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/09\/injections.gif\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/09\/injections.png\"><\/p>\n<h2 id=\"build_destinations_for_swift_packages\">Build destinations for Swift packages<\/h2>\n<p>For Swift packages, AppCode can now build for macOS and other build destinations like the iPhone, simulators, and more:<br \/>\n<img decoding=\"async\" alt=\"Build destinations\" width=\"419\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/09\/build_destinations.png\"><\/p>\n<h2 id=\"quick_fixes_and_intention_previews\">Quick-fixes and intention previews<\/h2>\n<p>A platform-wide preview for quick-fixes and intentions is now enabled in AppCode. If you call the <em>Quick Documentation<\/em> (<code>F1<\/code>) for a selected quick-fix in the <em>Alt+Enter<\/em> menu, you\u2019ll see how the code is going to be updated with the fix applied:<br \/>\n<img decoding=\"async\" alt=\"Intentions preview\" width=\"800\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/09\/create_preview.png\"><br \/>\nOnce activated, the preview will appear every time you open the list of available intention actions. To close the preview, press <code>F1<\/code> again while the list of intentions is open.<\/p>\n<h2 id=\"swift_language_improvements\">Swift language improvements<\/h2>\n<p>With AppCode 2022.3 EAP, you can now easily inline the Swift function and substitute all its usages across the codebase. Use the <em>Inline function<\/em> refactoring via <code>\u2325\u2318N<\/code>. AppCode will suggest you inlinining all invocations and removing the original function or inlining only the selected invocation and keeping the original function:<br \/>\n<img decoding=\"async\" alt=\"Inline function refactoring in Swift\" width=\"600\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/09\/inline_swift.gif\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/09\/inline_swift.png\"><\/p>\n<p>When creating from usage or extracting a property, AppCode now suggest you a choice between <code>var<\/code> and <code>let<\/code> property declarations:<br \/>\n<img decoding=\"async\" alt=\"Let or var selection\" width=\"455\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/09\/var_let_property.png\"><\/p>\n<p>Other improvements:<\/p>\n<ul>\n<li>AppCode now supports a <a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/main\/proposals\/0345-if-let-shorthand.md\" target=\"_blank\" rel=\"noopener\">shorthand syntax<\/a> for optional binding.<\/li>\n<li>Extracting from <code>static subscript<\/code> now generates a <code>static<\/code> method (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/OC-23073\" target=\"_blank\" rel=\"noopener\">OC-23073<\/a>).<\/li>\n<li>Smart completion now ignores <code>@autoclosure<\/code> for assignability (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/OC-22948\" target=\"_blank\" rel=\"noopener\">OC-22948<\/a>).<\/li>\n<li>Using <em>Copy Reference<\/em> on a Swift symbol no longer creates Objective-C code (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/OC-15741\" target=\"_blank\" rel=\"noopener\">OC-15741<\/a>).<\/li>\n<li>The <em>Unwrap Optional<\/em> quick-fix now uses the shorthand syntax for optional binding from Swift 5.7 where possible.<\/li>\n<li><em>Generate init<\/em> has been fixed to avoid the redundant <code>required<\/code> keyword for protocol init in struct.<\/li>\n<li><em>Generate equals<\/em> actions that use a single<em> expression<\/em> template no longer produce an incomplete <code>return<\/code> statement (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/OC-18774\" target=\"_blank\" rel=\"noopener\">OC-18774<\/a>).<\/li>\n<li>Extracting protocol conformance to <code>extension<\/code> no longer loses the documentation comments (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/OC-22923\" target=\"_blank\" rel=\"noopener\">OC-22923<\/a>).<\/li>\n<\/ul>\n<p>The full release notes are available <a href=\"https:\/\/youtrack.jetbrains.com\/articles\/OC-A-223445215\/AppCode-20223-EAP-1-223616086-build-Release-Notes\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<p><em>Those who previously used the <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/17098-kotlin-multiplatform-mobile-for-appcode\/\" target=\"_blank\" rel=\"noopener\">Kotlin Multiplatform Mobile (KMM) plugin for AppCode<\/a> may need to manually install the <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/8195-toml\/versions\" target=\"_blank\" rel=\"noopener\">JetBrains Toml<\/a> plugin from JetBrains Marketplace and ensure they have updated the <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/6954-kotlin\/versions\/appcode\" target=\"_blank\" rel=\"noopener\">Kotlin<\/a> plugin to its latest version.<\/em><\/p>\n<p align=\"center\"><a><\/a><a class=\"jb-download-button\" href=\"https:\/\/www.jetbrains.com\/appcode\/nextversion\" target=\"_blank\" rel=\"noopener\"><i class=\"download-icon\"><\/i>DOWNLOAD APPCODE EAP<\/a><\/p>\n<p>Your AppCode team<br \/>\nJetBrains<br \/>\n<em>The Drive to Develop<\/em><\/p>\n","protected":false},"author":266,"featured_media":283598,"comment_status":"closed","ping_status":"closed","template":"","categories":[826,89],"tags":[7086,600,3587,7108,91,6988],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/appcode\/283624"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/appcode"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/types\/appcode"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/users\/266"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/comments?post=283624"}],"version-history":[{"count":9,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/appcode\/283624\/revisions"}],"predecessor-version":[{"id":285101,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/appcode\/283624\/revisions\/285101"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/media\/283598"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/media?parent=283624"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/categories?post=283624"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/tags?post=283624"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/cross-post-tag?post=283624"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}