Can I turn a string into a block of code in swift?












6















Is there any way to turn a string into a block of code? I'm making an Ajax request to a website of mine that has an endpoint that returns some swift code as a string. I can get that code back as a string, but I can't run that code because it doesn't know that it is code.










share|improve this question


















  • 3





    Not a Swift programmer but this sounds like a bad idea for many reasons: 1- If the channel is compromised, an attacker can make your app execute arbitrary code trivially. 2- If this is an App Store app, Apple will reject it since they disallow downloading executable code. 3- You'd have to have your app compile the code which could be slow/impossible depending on the device. Ultimately, you should put that code in your app and have your server send you a message telling the app what code to run.

    – Anthony Vallée-Dubois
    May 5 '15 at 16:53
















6















Is there any way to turn a string into a block of code? I'm making an Ajax request to a website of mine that has an endpoint that returns some swift code as a string. I can get that code back as a string, but I can't run that code because it doesn't know that it is code.










share|improve this question


















  • 3





    Not a Swift programmer but this sounds like a bad idea for many reasons: 1- If the channel is compromised, an attacker can make your app execute arbitrary code trivially. 2- If this is an App Store app, Apple will reject it since they disallow downloading executable code. 3- You'd have to have your app compile the code which could be slow/impossible depending on the device. Ultimately, you should put that code in your app and have your server send you a message telling the app what code to run.

    – Anthony Vallée-Dubois
    May 5 '15 at 16:53














6












6








6


4






Is there any way to turn a string into a block of code? I'm making an Ajax request to a website of mine that has an endpoint that returns some swift code as a string. I can get that code back as a string, but I can't run that code because it doesn't know that it is code.










share|improve this question














Is there any way to turn a string into a block of code? I'm making an Ajax request to a website of mine that has an endpoint that returns some swift code as a string. I can get that code back as a string, but I can't run that code because it doesn't know that it is code.







ios swift






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked May 5 '15 at 16:47









Isaac WassermanIsaac Wasserman

4452729




4452729








  • 3





    Not a Swift programmer but this sounds like a bad idea for many reasons: 1- If the channel is compromised, an attacker can make your app execute arbitrary code trivially. 2- If this is an App Store app, Apple will reject it since they disallow downloading executable code. 3- You'd have to have your app compile the code which could be slow/impossible depending on the device. Ultimately, you should put that code in your app and have your server send you a message telling the app what code to run.

    – Anthony Vallée-Dubois
    May 5 '15 at 16:53














  • 3





    Not a Swift programmer but this sounds like a bad idea for many reasons: 1- If the channel is compromised, an attacker can make your app execute arbitrary code trivially. 2- If this is an App Store app, Apple will reject it since they disallow downloading executable code. 3- You'd have to have your app compile the code which could be slow/impossible depending on the device. Ultimately, you should put that code in your app and have your server send you a message telling the app what code to run.

    – Anthony Vallée-Dubois
    May 5 '15 at 16:53








3




3





Not a Swift programmer but this sounds like a bad idea for many reasons: 1- If the channel is compromised, an attacker can make your app execute arbitrary code trivially. 2- If this is an App Store app, Apple will reject it since they disallow downloading executable code. 3- You'd have to have your app compile the code which could be slow/impossible depending on the device. Ultimately, you should put that code in your app and have your server send you a message telling the app what code to run.

– Anthony Vallée-Dubois
May 5 '15 at 16:53





Not a Swift programmer but this sounds like a bad idea for many reasons: 1- If the channel is compromised, an attacker can make your app execute arbitrary code trivially. 2- If this is an App Store app, Apple will reject it since they disallow downloading executable code. 3- You'd have to have your app compile the code which could be slow/impossible depending on the device. Ultimately, you should put that code in your app and have your server send you a message telling the app what code to run.

– Anthony Vallée-Dubois
May 5 '15 at 16:53












2 Answers
2






active

oldest

votes


















11














No, you can't do that. Swift is a compiled language, not interpreted like Ajax.



The Swift compiler runs on your Mac, not on the iOS device. (The same is true for Objective-C).



Plus, Apple's app store guidelines forbid delivering executable code to your apps, so even if you figured out a way to do it, your app would be rejected.



Edit:



Note that with the advent of Swift playgrounds, it is possible to run the Swift compiler on an iPad. Recent high-end iPhones are probably also up to the job, but you'd have to figure out how to get it installed.



As stated above though, Apple's app store guidelines forbid you from delivering code to your apps at runtime.






share|improve this answer

































    10














    As others have pointed out, if you are creating an iOS app (especially for distribution on the app store), you can not do this. However, if you are writing Swift code for an OS X machine AND you know that XCode is installed on the machine, you can run your Swift code string by running the command-line Swift compiler. Something like this (with proper error checking, of course):



    var str = "let str = "Hello"nprintln("\(str) world")n"    

    let task = Process()

    task.launchPath = "/usr/bin/swift"

    let outpipe = Pipe()
    let inpipe = Pipe()
    inpipe.fileHandleForWriting.write(str.data(using: String.Encoding.utf8, allowLossyConversion: true)!)
    task.standardInput = inpipe
    task.standardOutput = outpipe
    task.launch()
    task.waitUntilExit()
    task.standardInput = Pipe()

    let data = outpipe.fileHandleForReading.readDataToEndOfFile()

    let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String


    Again, this is probably not recommended in nearly all real-world cases, but is a way you can execute a String of Swift code, if you really need to.






    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%2f30058798%2fcan-i-turn-a-string-into-a-block-of-code-in-swift%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      11














      No, you can't do that. Swift is a compiled language, not interpreted like Ajax.



      The Swift compiler runs on your Mac, not on the iOS device. (The same is true for Objective-C).



      Plus, Apple's app store guidelines forbid delivering executable code to your apps, so even if you figured out a way to do it, your app would be rejected.



      Edit:



      Note that with the advent of Swift playgrounds, it is possible to run the Swift compiler on an iPad. Recent high-end iPhones are probably also up to the job, but you'd have to figure out how to get it installed.



      As stated above though, Apple's app store guidelines forbid you from delivering code to your apps at runtime.






      share|improve this answer






























        11














        No, you can't do that. Swift is a compiled language, not interpreted like Ajax.



        The Swift compiler runs on your Mac, not on the iOS device. (The same is true for Objective-C).



        Plus, Apple's app store guidelines forbid delivering executable code to your apps, so even if you figured out a way to do it, your app would be rejected.



        Edit:



        Note that with the advent of Swift playgrounds, it is possible to run the Swift compiler on an iPad. Recent high-end iPhones are probably also up to the job, but you'd have to figure out how to get it installed.



        As stated above though, Apple's app store guidelines forbid you from delivering code to your apps at runtime.






        share|improve this answer




























          11












          11








          11







          No, you can't do that. Swift is a compiled language, not interpreted like Ajax.



          The Swift compiler runs on your Mac, not on the iOS device. (The same is true for Objective-C).



          Plus, Apple's app store guidelines forbid delivering executable code to your apps, so even if you figured out a way to do it, your app would be rejected.



          Edit:



          Note that with the advent of Swift playgrounds, it is possible to run the Swift compiler on an iPad. Recent high-end iPhones are probably also up to the job, but you'd have to figure out how to get it installed.



          As stated above though, Apple's app store guidelines forbid you from delivering code to your apps at runtime.






          share|improve this answer















          No, you can't do that. Swift is a compiled language, not interpreted like Ajax.



          The Swift compiler runs on your Mac, not on the iOS device. (The same is true for Objective-C).



          Plus, Apple's app store guidelines forbid delivering executable code to your apps, so even if you figured out a way to do it, your app would be rejected.



          Edit:



          Note that with the advent of Swift playgrounds, it is possible to run the Swift compiler on an iPad. Recent high-end iPhones are probably also up to the job, but you'd have to figure out how to get it installed.



          As stated above though, Apple's app store guidelines forbid you from delivering code to your apps at runtime.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 12 '18 at 21:56

























          answered May 5 '15 at 16:52









          Duncan CDuncan C

          92.5k13114196




          92.5k13114196

























              10














              As others have pointed out, if you are creating an iOS app (especially for distribution on the app store), you can not do this. However, if you are writing Swift code for an OS X machine AND you know that XCode is installed on the machine, you can run your Swift code string by running the command-line Swift compiler. Something like this (with proper error checking, of course):



              var str = "let str = "Hello"nprintln("\(str) world")n"    

              let task = Process()

              task.launchPath = "/usr/bin/swift"

              let outpipe = Pipe()
              let inpipe = Pipe()
              inpipe.fileHandleForWriting.write(str.data(using: String.Encoding.utf8, allowLossyConversion: true)!)
              task.standardInput = inpipe
              task.standardOutput = outpipe
              task.launch()
              task.waitUntilExit()
              task.standardInput = Pipe()

              let data = outpipe.fileHandleForReading.readDataToEndOfFile()

              let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String


              Again, this is probably not recommended in nearly all real-world cases, but is a way you can execute a String of Swift code, if you really need to.






              share|improve this answer






























                10














                As others have pointed out, if you are creating an iOS app (especially for distribution on the app store), you can not do this. However, if you are writing Swift code for an OS X machine AND you know that XCode is installed on the machine, you can run your Swift code string by running the command-line Swift compiler. Something like this (with proper error checking, of course):



                var str = "let str = "Hello"nprintln("\(str) world")n"    

                let task = Process()

                task.launchPath = "/usr/bin/swift"

                let outpipe = Pipe()
                let inpipe = Pipe()
                inpipe.fileHandleForWriting.write(str.data(using: String.Encoding.utf8, allowLossyConversion: true)!)
                task.standardInput = inpipe
                task.standardOutput = outpipe
                task.launch()
                task.waitUntilExit()
                task.standardInput = Pipe()

                let data = outpipe.fileHandleForReading.readDataToEndOfFile()

                let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String


                Again, this is probably not recommended in nearly all real-world cases, but is a way you can execute a String of Swift code, if you really need to.






                share|improve this answer




























                  10












                  10








                  10







                  As others have pointed out, if you are creating an iOS app (especially for distribution on the app store), you can not do this. However, if you are writing Swift code for an OS X machine AND you know that XCode is installed on the machine, you can run your Swift code string by running the command-line Swift compiler. Something like this (with proper error checking, of course):



                  var str = "let str = "Hello"nprintln("\(str) world")n"    

                  let task = Process()

                  task.launchPath = "/usr/bin/swift"

                  let outpipe = Pipe()
                  let inpipe = Pipe()
                  inpipe.fileHandleForWriting.write(str.data(using: String.Encoding.utf8, allowLossyConversion: true)!)
                  task.standardInput = inpipe
                  task.standardOutput = outpipe
                  task.launch()
                  task.waitUntilExit()
                  task.standardInput = Pipe()

                  let data = outpipe.fileHandleForReading.readDataToEndOfFile()

                  let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String


                  Again, this is probably not recommended in nearly all real-world cases, but is a way you can execute a String of Swift code, if you really need to.






                  share|improve this answer















                  As others have pointed out, if you are creating an iOS app (especially for distribution on the app store), you can not do this. However, if you are writing Swift code for an OS X machine AND you know that XCode is installed on the machine, you can run your Swift code string by running the command-line Swift compiler. Something like this (with proper error checking, of course):



                  var str = "let str = "Hello"nprintln("\(str) world")n"    

                  let task = Process()

                  task.launchPath = "/usr/bin/swift"

                  let outpipe = Pipe()
                  let inpipe = Pipe()
                  inpipe.fileHandleForWriting.write(str.data(using: String.Encoding.utf8, allowLossyConversion: true)!)
                  task.standardInput = inpipe
                  task.standardOutput = outpipe
                  task.launch()
                  task.waitUntilExit()
                  task.standardInput = Pipe()

                  let data = outpipe.fileHandleForReading.readDataToEndOfFile()

                  let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String


                  Again, this is probably not recommended in nearly all real-world cases, but is a way you can execute a String of Swift code, if you really need to.







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Feb 3 '18 at 20:53









                  Shaheen Ghiassy

                  5,05223137




                  5,05223137










                  answered May 5 '15 at 17:56









                  Jeff HayJeff Hay

                  2,4202330




                  2,4202330






























                      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.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f30058798%2fcan-i-turn-a-string-into-a-block-of-code-in-swift%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

                      Full-time equivalent

                      Bicuculline

                      さくらももこ