omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    Xcode Template for Pythonista

    Pythonista
    29
    68
    65695
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • xino386
      xino386 @peterdougstuart last edited by

      @peterdougstuart
      Hi, i am interested in your templates which is submitted to itunesConnect successfully, can you send me a zip ?

      1 Reply Last reply Reply Quote 0
      • peterdougstuart
        peterdougstuart last edited by

        Hi @xino386 can you PM on twitter and I’ll send you a zip of my scripts (same handle as here). Note that my scripts have been trimmed down to match the subset of the libraries used in my app so you might be better off following the steps above to get it to work.

        1 Reply Last reply Reply Quote 1
        • stepper
          stepper @omz last edited by stepper

          @omz
          I have a succes storey with your fix script (June 19/18). Here’s what I did. Pasted approx 400 #\input texinfo ‘s into a text file. Pasted the contents (all one line, no line breaks) into your script as a string (replacing the existing ‘#\input texinfo’. Changed the folder permissions for the two lib folders to read/write (temporarily).ran your script. It fixed all but a half dozen of the files. Went into the folders manually. The unchanged files stood out cause they didn’t have today’s date of modification. Manually pasted in the approx 400 from the original text file into those few.
          Successfully uploaded to app connect where my app is now in Beta on test flight.
          Thank You very much!

          1 Reply Last reply Reply Quote 1
          • omz
            omz last edited by

            @stepper That's interesting, though I've found a better solution recently: You can add something like #import pythonista as the first line, and it'll be recognized as Objective-C source code (which isn't directly executable, so it doesn't cause issues with code signing).

            1 Reply Last reply Reply Quote 1
            • RomSpy
              RomSpy last edited by

              @omz
              Any chance we will see an updated template that uses all the great new features in version 3?

              1 Reply Last reply Reply Quote 1
              • omz
                omz last edited by

                @RomSpy Yes, that's something I'd really like to do soon, and I've already done some of the work required, but it's still kind of a mess.

                1 Reply Last reply Reply Quote 2
                • bg2b
                  bg2b last edited by

                  Is there an up-to-date summary of the idea for packaging up a Pythonista project to make an app? I see that the template linked from

                  https://forum.omz-software.com/topic/1911/new-xcode-template-beta

                  doesn't exist anymore, and I'm not sure where to begin learning.

                  1 Reply Last reply Reply Quote 0
                  • yueqiw
                    yueqiw last edited by

                    @sreyemnayr I tried your re-worked script and it worked well.
                    I used #import pythonista\n rather than #\input texinfo\n
                    To make it run faster I prepend 10 strings in each iteration, e.g.f.write("#import pythonista\n" * 10 + source) and set counter to increment by 10.

                    1 Reply Last reply Reply Quote 0
                    • amdescombes
                      amdescombes last edited by

                      Hello everyone,

                      Here is a reworked script that adds the comments at the top but preservers coding= comments.
                      It is not perfect, but it helped me succesfully submit an app to the Appstore, I hope it is of help to every one.

                      #import pythonista
                      # Change the ********** to point to the directory containing the Pythonista framework :
                      project_path = '**********/PythonistaAppTemplate'
                      pylib_path1 = '%s/PythonistaKit.framework/pylib' % project_path
                      pylib_path2 = '%s/PythonistaKit.framework/pylib_ext' % project_path
                      MAX_REPEATS = 10
                      
                      import shutil
                      import os
                      import subprocess
                      
                      def check_is_executable(file_path):
                          file_output = subprocess.check_output(['file', file_path])
                          if 'executable' in file_output:
                              return True, file_output
                          return False, file_output
                      
                      def fix_executable(file_path, dry_run=False):
                          with open(file_path, 'r') as f:
                              source = f.readlines()
                              if 'coding:' in source[0].lower():
                                  firstline = source[0]
                                  start = 1
                              else:
                                  firstline = ''
                                  start = 0
                          if dry_run:
                              if firstline:
                                  print(firstline)
                          else:
                              with open(file_path, 'w') as f:
                                  f.write(firstline + '#import pythonista\n' * MAX_REPEATS + ''.join(source[start:]))
                          is_executable, out = check_is_executable(file_path)
                          return not is_executable
                      
                      def fix_pylib(pylib_path, dry_run=False):
                          print ("fixing", pylib_path)
                          for path, dirs, files in os.walk(pylib_path):
                              print(path, dirs, files)
                              for filename in files:
                                  full_path = full_path = os.path.join(path, filename)
                                  is_executable, file_output = check_is_executable(full_path)
                                  if is_executable:
                                      extension = os.path.splitext(full_path)[1].lower()
                                      if extension in ['.py', '.pym'] or filename == 'command_template':
                                          if dry_run:
                                              print '### Executable found: %s' % (filename,)
                                              fixed = fix_executable(full_path, dry_run)
                                          else:
                                              print 'Fixing %s...' % (filename,)
                                              fixed = False
                                              counter = 0
                                              while not fixed:
                                                  fixed = fix_executable(full_path)
                                                  counter += MAX_REPEATS
                      
                                              print 'Fixed with '+str(counter)+' dummy lines.'
                                      else:
                                          print '### Executable found, but does not seem to be Python code: %s' % (full_path,)
                      
                      if __name__ == '__main__':
                          fix_pylib(pylib_path1, False)
                          fix_pylib(pylib_path2, False)
                      
                      

                      Cheers
                      Andre

                      1 Reply Last reply Reply Quote 1
                      • JonB
                        JonB last edited by JonB

                        so, this may be a stupid question, but my understanding of this problem is that file is running locally, and is getting rejected locally.

                        so, why not just edit /usr/share/file/magic (or copy it, edit it, then file -C to compile it to a new .mgc), or create an alias to file with a -m argument pointing to your custom magic file. It should be possible to edit the entry for pythonm or add custom search for the shebang or coding lines, to simply output a safe mimetype,

                        1 Reply Last reply Reply Quote 1
                        • amdescombes
                          amdescombes last edited by

                          Hi Jon,

                          I think that is a very good question and a very interesting option to explore as it would avoid modifying the framework. I'll look into it as soon as I get a chance and report my findings back.

                          Cheers
                          Andre

                          1 Reply Last reply Reply Quote 0
                          • TheRealBret
                            TheRealBret last edited by

                            I really want to have a new Xcode template for Pythonista 3. I realize that I've already bought Pythonista so I'm not generating new income for @omz.... so I hereby pledge to send money via Paypal/Zelle (or any other method) to @omz to help support his time for the production of a new Xcode template. I'd gladly pay $25 for a new template. I'd even pay this annually if it would be updated regularly.

                            Thoughts anyone? @omz?? How can we help get a new Xcode template made?

                            vignesh 1 Reply Last reply Reply Quote 0
                            • vignesh
                              vignesh @TheRealBret last edited by

                              @TheRealBret Good news!
                              @omz said:

                              Here's a first attempt at a Python 3-based Xcode template: https://www.dropbox.com/s/5l94m0xjbot5je0/Pythonista3AppTemplate.zip?dl=1

                              This is roughly equivalent to the current App Store version (not the 3.3 beta), and not final, just something to play around with for people interested in the Xcode template. Let me know if anything's unclear.

                              1 Reply Last reply Reply Quote 0
                              • TheRealBret
                                TheRealBret last edited by

                                Indeed - I’m very happy to see the new template. Thank you!

                                My offer still stands - I would like a way to give a donation to @omz to help offset continued development of Pythonista. I can’t see how my payment a year ago is helping today.

                                eliotradisa 1 Reply Last reply Reply Quote 0
                                • vignesh
                                  vignesh last edited by

                                  Is it possible for someone to upload a version of the template for python3 with the fix to include the line at the top of all the files already done? I am having lots of trouble doing it myself.

                                  1 Reply Last reply Reply Quote 0
                                  • ruohola
                                    ruohola last edited by ruohola

                                    Any update on the template? As of April 2020 the template is completely broken since it uses the deprecated UIWebView API which is not allowed anymore: https://forum.omz-software.com/topic/6474/python3-xcode-template-broken-because-of-deprecated-uiwebview

                                    1 Reply Last reply Reply Quote 0
                                    • JonB
                                      JonB last edited by

                                      Is the binary signed in some way? I wonder if you were to edit it in a hex editor, and replace UIWebView with some other nonsense class name (same number of characters).
                                      Since objc is message based, there is nothing linked to support UIWebView, just a runtime call with a c string with the classname. As long as you never instantiate a webview, things won't crash.

                                      1 Reply Last reply Reply Quote 2
                                      • eliotradisa
                                        eliotradisa @TheRealBret last edited by

                                        This post is deleted!
                                        1 Reply Last reply Reply Quote 0
                                        • eliotradisa
                                          eliotradisa last edited by eliotradisa

                                          This post is deleted!
                                          1 Reply Last reply Reply Quote 0
                                          • coltonboyd
                                            coltonboyd last edited by

                                            @ruohola sorry this is a little late and I hope this information is still relevant for you. I took @JonB 's advice and went into the P3kit framework and edited the P3kit file. For me it popped up as a unix executable, so I needed to download a hex editor to go in and modify it.

                                            All I did was command-F and find all the instances of UIWebView and replace them all with UIBarItem. This is an API with the same character length and the API isn't deprecated. Save the file and make sure it is still in your project directory.

                                            I archived and uploaded my build last night and the App Store did not reject the build. so this is a good working solution. My app is a 2D shooting game called Flyboy Adventure Game and it is currently under beta review as we speak. I've tested my game on Testflight and it works great, so hopefully there is no long term repercussions from using this workaround.

                                            mikael JonB 2 Replies Last reply Reply Quote 1
                                            • First post
                                              Last post
                                            Powered by NodeBB Forums | Contributors