New Beta for Pythonista 3.3
-
There's now a public beta for the upcoming Pythonista 3.3. If you signed up for a Pythonista 3 beta previously, you should have received a notification from TestFlight. If you're not a beta tester yet, but would be interested in testing, you can just use this link to sign up (I no longer need to collect your email address for this):
https://testflight.apple.com/join/qDkBu2ur
It's a beta, and I wanted to have it out before the holidays, so some things aren't quite done yet, others aren't polished yet, but it should overall be quite usable and not worse than the App Store version in any significant way. If you're new to this: If you install the beta, it replaces the App Store version on your device, but you won't lose data. It works like a regular App Store update in that regard.
I'm really curious what you'll create with the custom keyboard extension!
Full release notes below:
New Features
-
New scriptable keyboard extension and associated
keyboard
module:- First off, this is not intended to replace the system keyboard or your preferred third-party keyboard for most of your typing. It's much more like the emoji picker, i.e. you'd typically switch to it just for specific tasks. The keyboard does not support any kind of AutoCorrect or QuickType suggestions. Just switch to the system keyboard if you need those (hold the 'globe' key).
- You can enable the keyboard in the Settings app (General > Keyboard > Keyboards > Add New Keyboard). It already includes various script shortcuts from the examples folder that you can try right away. If you want to add your own scripts, use the new "Shortcuts..." option from the 'wrench' menu.
- You can use the keyboard for simple things, like quickly inserting the current date/time in your favorite format, or even show a custom UI, like a calculator, in the keyboard view (or above a standard QWERTY keyboard). Have a look at the included examples to get an idea of what's possible.
- The
keyboard
module includes keyboard-specific functionality for inserting text, modifying the cursor position, showing user interfaces in the keyboard, and more. - Generally, the Pythonista keyboard does not require that you enable 'Full Access', but you can't use some functionality in your scripts then (e.g. clipboard or network access).
- Note: If you have a hardware keyboard connected to your iPad, and the Pythonista keyboard does not show up on screen when you select it, please tap and hold the
˅
button in the bottom-right corner of the screen. This should normally not happen when you set the Pythonista keyboard's primary language to 'Emoji'.
-
Support for Siri & Search shortcuts:
- This allows you to integrate Python scripts in various places on iOS. You can invoke shortcuts using Siri with custom voice commands, run them from Spotlight Search, or add them to larger automation workflows in the iOS 12 Shortcuts app.
- Please note that "background" shortcuts (i.e. those that don't launch the Pythonista app) have very limited resources (RAM) available to them, so you're somewhat limited in what you can do without launching the full app. Also, you cannot implement any interaction within Siri, except for reacting to a tap on the Siri result.
- The
shortcuts
module provides useful utilities for shortcut scripts, but you can also just use theprint
function and e.g.ui.Image.show
to produce simple output, as you would in a script that runs in the app.
-
Improved and unified UI for creating shortcuts and Pythonista URLs -- This allows you to create script shortcuts for Siri & Search, the new Pythonista keyboard, the share sheet extension, editor actions, and home screen icons, all from one place: The new "Shortcuts..." option in the 'wrench' menu. This also contains a new Pythonista URL generator for creating various kinds of
pythonista3://...
URLs more easily. -
Revamped
notification
module with support for custom actions (buttons), location-based and repeating notifications, and more. The module also works in Pythonista's app extensions now (it was previously main app only). -
The console's history is now persistent (i.e. saved when you quit the app). You can also delete the console history by tapping and holding the '^' button now.
-
Scripts stored in iCloud are now compatible with the built-in "Run Script" and "Edit Script" actions of the (Apple) Shortcuts app. Just prefix the script name/path with "iCloud/", e.g. use "iCloud/MyScript.py" (without quotes).
Built-in Modules
-
Added
location.render_map_snapshot
function to thelocation
module for generating map images (using Apple Maps data). -
Improved
photos.capture_image
function with the option to use the selfie camera by default. -
Added
cb.Peripheral.manufacturer_data
incb
(CoreBluetooth) module. -
Added
ui.Label.scales_font
andui.Label.min_font_scale
attributes toui.Label
. -
Added
reminders.Reminder.priority
andreminders.Reminder.url
attributes in thereminders
module. -
Changed the default file type for
dialogs.pick_document
to'public.item'
(instead of'public.data'
, this works better for unknown file types). -
Added (third-party)
emoji
module. -
Added documentation for
ui.TextField.begin_editing
,ui.TextField.end_editing
, andui.TextField.secure
.
Bugfixes
-
Fixed a crash when saving images from the console when access to the photo library has not been granted yet.
-
Fixed an issue with the extra key row hiding console input on 2018 iPad Pros.
-
Fixed a crash when using arrow keys on an external keyboard while the on-screen keyboard is visible.
-
Fixed problems with using iCloud scripts in the share sheet extension.
-
Fixed triple-quoted byte strings and f-strings not being syntax-highlighted correctly.
-
Fixed 'wrench' actions not being saved when invoked from the script library.
-
Fixed broken
turtle.pen
function.
Miscellaneous
- Selecting Python 2.7 as the default interpreter shows an "end of life" warning now (Python 2.7 will cease to be officially supported by the Python Software Foundation in 2020).
Have fun testing!
-
-
@cvp said:
Oh... on iPhone it's not very intuitive to find... :( Thanks though.
-
@sashk In general, you tap on the
(?)
button in the console, or on the "Documentation" button in new tabs to get to the documentation. You can then search forshortcuts
(or other module names) there.
-
@sashk said:
@lpl said:
@sashk And python 2.7.15
Nope, Python 2 is dead. Use Python 3 instead.
Specifically, 2.7 will receive bugfix support until January 1, 2020. Not yet, not now.
-
@omz Would it be possible to add some basic Apple Watch support because Apple removed the Shortcuts app on the watch so there's currently no easy way to do some basic programmable stuff on the watch without Siri interaction, at least that I am aware off.
For example I have a shortcut which gets a json via a secret https url and formats the output nicely or another one which triggers same IoT actions.
It would be nice to do this with Pythonista.
General question: Does the TestFlight Beta override the installed app or is this separated?
-
Some Apple Watch support would be a great addition and (as has been said) would help fill the void that Apple created when they replaced Workflow with Shortcuts.
-
@ttobias said:
General question: Does the TestFlight Beta override the installed app or is this separated?
The beta replaces the App Store version. If you already have the App Store version installed and then install the beta through TestFlight, you'll get a warning message saying that you may lose your data - this is generally not the case for Pythonista. (I've been in the Pythonista TestFlight beta since the beginning, and installing a beta has never overwritten my data. But if possible you should make an iTunes backup beforehand, just in case.)
You can also go back to the latest App Store release at any time, by going into your purchases and redownloading Pythonista there. This will replace the beta version, but also leaves your data intact (except perhaps for features that were introduced in the beta).
-
Just to say: the new keyboard is opening up some really exciting possibilities, and aside from everything else that Pythonista offers, this is the kind of functionality I've been wishing for on the iPad for a long time now. I've tried a number of third party keyboards to do more with text in iOS and the vast majority of them have proven disappointing, but this... there's more possible than all of those others put together. Happy days ahead. Hats off to OMZ.
-
New BETA crashes when I use the new introduced key_command feature
Pythonista completely exists when pressing the a key on the external BT keyboard
# coding: utf-8 import ui import console class UIView (ui.View): def get_key_commands(self): print('get_key_commands') return [{'input': 'a'}] #return [{'input': 'a', 'modifiers':'cmd'}] def key_command(self,sender): print('key_command='+str(sender)) def main(): main_view = UIView(frame=(0, 0, 400, 400)) main_view.name = 'Key Commands Demo' main_view.present('sheet') if __name__ == '__main__': main()
-
@mithrendal I see thanks. I'll look into it tomorrow, but I think you might be able to move the
main_view
creation into the global scope (i.e. out of themain
function) to make it work, but it's getting pretty late here, and my iPad is busy, so I can't really test this theory right now. I definitely had a working example (just not very pretty) when I posted the last beta.
-
Hi @omz ,
if I move the main_view creation into the global scope (i.e. out of the main function) it also crashes.There is another issue with the newest BETA: When you create a custom view (extending ui.View) and add with the help of objc_util a native KeyCommandsView as a subview into that custom view. With the newest BETA that does not work anymore. Whereas it worked with the Beta before and with the current production version. I guess that you also added a KeyCommandsView into the ui.View and it consumes all key events, so the self-done-native way is not working anymore when using a custom view. When not extending the ui.View (e.g. using a pure ui.View) and adding the KeyCommandsView to it, the self-done-native way still works.
Could you also do something for this second issue ?
test case example of the second issue:
# coding: utf-8 from objc_util import * import ui import console UIKeyCommand = ObjCClass('UIKeyCommand') modifiers = {(1<<17): 'Shift', (1<<18): 'Ctrl', (1<<19): 'Alt', (1<<20): 'Cmd', (1<<21): 'NumPad'} def keyCommands(_self, _cmd): keys =['A'] cmd_key_flag = 0 key_commands = [] for k in keys: key_commands.append(UIKeyCommand.keyCommandWithInput_modifierFlags_action_(k, cmd_key_flag, 'keyCommandAction:')) commands = ns(key_commands) return commands.ptr def canBecomeFirstResponder(_self, _cmd): return True def keyCommandAction_(_self, _cmd, _sender): self = ObjCInstance(_self) key_cmd = ObjCInstance(_sender) flags = key_cmd.modifierFlags() modifier_str = ' + '.join(modifiers[m] for m in list(modifiers.keys()) if (m & flags)) key_input = key_cmd.input() console.hud_alert(str(key_input)) KeyCommandsView = create_objc_class('KeyCommandsView', UIView, [keyCommands, canBecomeFirstResponder, keyCommandAction_]) class CustomUIView (ui.View): def will_close(self): pass @on_main_thread def main(): #this does not work anymore in latest Beta. E.g console.hud_alert('A') is not called anymore main_view = CustomUIView(frame=(0, 0, 400, 400)) #this still works. console.hud_alert('A') is called #main_view = ui.View(frame=(0, 0, 400, 400)) v = KeyCommandsView.alloc().init() v.becomeFirstResponder() ObjCInstance(main_view).addSubview_(v) main_view.present('sheet') if __name__ == '__main__': main()
-
Hi @omz,
I have a weird bug... I was working on one of my projects with pyui files. I wanted to change the name of the component (a table view) and to my surprise it deleted the component. Actually, it deleted the component because of the backspace keystroke (since I wanted to change the name). Then I realized that also, any of the direction keys (up, down, left, right) weren’t working as well. All the other keys however are working. I then realized it was the physical keyboard that didn’t work in the pyui file. When I use the on-screen keyboard, everything works including the backspace. And only in the pyui fille display because if, for example, I try to use the backspace key from the physical keyboard from, let’s say the run text field (when you press a few seconds on the « play » icon), it’ll work.Let me know if you need more info.
D
-
I tested the new BETA build 330012
it still crashes when I use the in 330007 new introduced key_command feature
Pythonista.app completely exists when pressing the 'a' key on the external BT keyboard
# coding: utf-8 import ui import console class UIView (ui.View): def get_key_commands(self): print('get_key_commands') return [{'input': 'a'}] #return [{'input': 'a', 'modifiers':'cmd'}] def key_command(self,sender): print('key_command='+str(sender)) def main(): main_view = UIView(frame=(0, 0, 400, 400)) main_view.name = 'Key Commands Demo' main_view.present('sheet') if __name__ == '__main__': main()
@omz Do you still have some working example code of the new keycommand API ?
EDIT: OMZ wrote me. Although title is optional as written in the documentation, it must be set in the BETA otherwise it crashes.
so the statement
return [{'input': 'a', 'title': 'a'}]
repairs keycommands for the BETA. It will be fixed in the coming builds...
-
Ole Zorn has released the first Beta of the next version of Pythonista which has shortcuts support.
http://www.sirihacks.net/
-
@omz regarding passing output: iOS 13 has API's for that! Please support them! :takemymoney:
-
@omz when is this releasing? Can we get an ipa for the beta cos it’s full
-
Could I also please request that the new "open external file" and "open external directory" api be supported, so I can use Pythonista to access files AND directories in WorkingCopy. Yay Cheers Dave.
-
Will this version will support Pandas ?
-
@manitsy, no.
Use Google to search for ”Pythonista issues Pandas”.
-
Just purchased Pythonista 3 and its 3.2 (I had an earlier version as well)
Is this correct 3.3 still not released?
Many Thanks
-
@eskdale yes, 3.3 is in beta mode, hoping released soon