How can I add a Custom Intent which requires iOS 12 while targeting an older iOS version?










1














I am trying to add a Custom Intent to support Siri Shortcuts in my app which targets iOS 10.3. Xcode automatically generates the intent classes and protocols, but all the generated classes and protocols have the attribute below:



@available(iOS 12.0, watchOS 5.0, *)


I am aware of #available(...) but it is not used for including or excluding code at compile time, so I am not sure how to go about adding a Custom Intent if my target is set to pre-iOS 12.



In the snippet below, MyIntentHandling and MyIntentResponse are generated automatically by Xcode. However, there is no way to use #available here.



public class MyIntentHandler: NSObject, MyIntentHandling 

func confirm(intent: MyIntent, completion: @escaping (MyIntentResponse) -> Void) ...

func handle(intent: MyEntryIntent, completion: @escaping (MyIntentResponse) -> Void) ...



Does anyone have a good solution?










share|improve this question




























    1














    I am trying to add a Custom Intent to support Siri Shortcuts in my app which targets iOS 10.3. Xcode automatically generates the intent classes and protocols, but all the generated classes and protocols have the attribute below:



    @available(iOS 12.0, watchOS 5.0, *)


    I am aware of #available(...) but it is not used for including or excluding code at compile time, so I am not sure how to go about adding a Custom Intent if my target is set to pre-iOS 12.



    In the snippet below, MyIntentHandling and MyIntentResponse are generated automatically by Xcode. However, there is no way to use #available here.



    public class MyIntentHandler: NSObject, MyIntentHandling 

    func confirm(intent: MyIntent, completion: @escaping (MyIntentResponse) -> Void) ...

    func handle(intent: MyEntryIntent, completion: @escaping (MyIntentResponse) -> Void) ...



    Does anyone have a good solution?










    share|improve this question


























      1












      1








      1







      I am trying to add a Custom Intent to support Siri Shortcuts in my app which targets iOS 10.3. Xcode automatically generates the intent classes and protocols, but all the generated classes and protocols have the attribute below:



      @available(iOS 12.0, watchOS 5.0, *)


      I am aware of #available(...) but it is not used for including or excluding code at compile time, so I am not sure how to go about adding a Custom Intent if my target is set to pre-iOS 12.



      In the snippet below, MyIntentHandling and MyIntentResponse are generated automatically by Xcode. However, there is no way to use #available here.



      public class MyIntentHandler: NSObject, MyIntentHandling 

      func confirm(intent: MyIntent, completion: @escaping (MyIntentResponse) -> Void) ...

      func handle(intent: MyEntryIntent, completion: @escaping (MyIntentResponse) -> Void) ...



      Does anyone have a good solution?










      share|improve this question















      I am trying to add a Custom Intent to support Siri Shortcuts in my app which targets iOS 10.3. Xcode automatically generates the intent classes and protocols, but all the generated classes and protocols have the attribute below:



      @available(iOS 12.0, watchOS 5.0, *)


      I am aware of #available(...) but it is not used for including or excluding code at compile time, so I am not sure how to go about adding a Custom Intent if my target is set to pre-iOS 12.



      In the snippet below, MyIntentHandling and MyIntentResponse are generated automatically by Xcode. However, there is no way to use #available here.



      public class MyIntentHandler: NSObject, MyIntentHandling 

      func confirm(intent: MyIntent, completion: @escaping (MyIntentResponse) -> Void) ...

      func handle(intent: MyEntryIntent, completion: @escaping (MyIntentResponse) -> Void) ...



      Does anyone have a good solution?







      ios swift xcode swift4.2 sirishortcuts






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 11 at 16:56

























      asked Nov 11 at 5:58









      mkwon

      7081714




      7081714






















          1 Answer
          1






          active

          oldest

          votes


















          -1














          No,



          #available


          is for compile and runtime checks.



          The Swift compiler checks at compile time, that no methods are called that are not supported for your chosen deployment target and forces you to use #available conditions. So, since Xcode 9 it's much safer to support older iOS deployment targets and use new features.



          At runtime, there is a check, if an #available condition matches your current running iOS version and it will execute only the matching code.



          So, you are safe, with your additional intent support.






          share|improve this answer






















            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53246243%2fhow-can-i-add-a-custom-intent-which-requires-ios-12-while-targeting-an-older-ios%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            -1














            No,



            #available


            is for compile and runtime checks.



            The Swift compiler checks at compile time, that no methods are called that are not supported for your chosen deployment target and forces you to use #available conditions. So, since Xcode 9 it's much safer to support older iOS deployment targets and use new features.



            At runtime, there is a check, if an #available condition matches your current running iOS version and it will execute only the matching code.



            So, you are safe, with your additional intent support.






            share|improve this answer



























              -1














              No,



              #available


              is for compile and runtime checks.



              The Swift compiler checks at compile time, that no methods are called that are not supported for your chosen deployment target and forces you to use #available conditions. So, since Xcode 9 it's much safer to support older iOS deployment targets and use new features.



              At runtime, there is a check, if an #available condition matches your current running iOS version and it will execute only the matching code.



              So, you are safe, with your additional intent support.






              share|improve this answer

























                -1












                -1








                -1






                No,



                #available


                is for compile and runtime checks.



                The Swift compiler checks at compile time, that no methods are called that are not supported for your chosen deployment target and forces you to use #available conditions. So, since Xcode 9 it's much safer to support older iOS deployment targets and use new features.



                At runtime, there is a check, if an #available condition matches your current running iOS version and it will execute only the matching code.



                So, you are safe, with your additional intent support.






                share|improve this answer














                No,



                #available


                is for compile and runtime checks.



                The Swift compiler checks at compile time, that no methods are called that are not supported for your chosen deployment target and forces you to use #available conditions. So, since Xcode 9 it's much safer to support older iOS deployment targets and use new features.



                At runtime, there is a check, if an #available condition matches your current running iOS version and it will execute only the matching code.



                So, you are safe, with your additional intent support.







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Nov 11 at 16:06

























                answered Nov 11 at 14:04









                messeb

                17118




                17118



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53246243%2fhow-can-i-add-a-custom-intent-which-requires-ios-12-while-targeting-an-older-ios%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Darth Vader #20

                    How to how show current date and time by default on contact form 7 in WordPress without taking input from user in datetimepicker

                    Ondo