@JonB strikes again! On his advice, Gestures now uses retain_global for added robustness and ease of use. Here are the updated notes from the readme:
To facilitate the gesture handler callbacks from Objective-C to Python, the Gestures instance used to create the gesture must be live. You do not need to manage that as objc_util.retain_global is used to keep a global reference around. If you for some reason must track the reference manually, you can turn this behavior off with a retain_global_reference=False parameter for the constructor.
Single Gestures instance can be used to add any number of gestures to any number of views, but you can just as well create a new instance whenever and wherever you need to add a new handler - Gestures().add_swipe(...).
If you need to create millions of dynamic gestures in a long-running app, it can be worthwhile to explicitly remove them when no longer needed, to avoid a memory leak.