Repository: beeware/toga

Issue:
iOS App has no attribute 'hide_cursor'
**Describe the bug**
Calling the method `hide_cursor()` on a `toga.App` causes the app to crash with:
```
2021-03-28 13:35:22.700314-0700 Find [938:323815] AttributeError: 'App' object has no attribute 'hide_cursor'
```

**To Reproduce**
Steps to reproduce the behavior:
1. Create a simple iOS App
2. inside the main method of your application class (derived from `toga.App`) call: `self.hide_cursor()`
3. App crashes with stacktrace
4. See error

```
 Error in long running handler: 'App' object has no attribute 'hide_cursor'
 Traceback (most recent call last):
   File "/private/var/containers/Bundle/Application/75DCDE12-8E7D-4D0A-97D1-B999813DBD9B/Find.app/Library/Application Support/app_packages/toga/handlers.py", line 13, in long_running_task
     delay = next(generator)
   File "/private/var/containers/Bundle/Application/75DCDE12-8E7D-4D0A-97D1-B999813DBD9B/Find.app/Library/Application Support/app/find/app.py", line 84, in select_distance_task
     self.hide_cursor()
   File "/private/var/containers/Bundle/Application/75DCDE12-8E7D-4D0A-97D1-B999813DBD9B/Find.app/Library/Application Support/app_packages/toga/app.py", line 412, in hide_cursor
     self._impl.hide_cursor()
 AttributeError: 'App' object has no attribute 'hide_cursor'
```

**Expected behavior**
The method is documented [here](https://toga.readthedocs.io/en/latest/reference/api/app.html#toga.app.App.hide_cursor)

Not sure what to expect, really, (the description, rather tautologically, says "hides cursors") but at the very least not to crash?

What I was really trying to achieve was to hide the keyboard from view (also because the `focus()` method on non-input fields seems to be a no-op?).

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Environment:**
 - Operating System: iOS 14.4
 - Python version: 3.8
 - Software versions:
 toga==0.2.15
toga-cocoa==0.2.15
toga-core==0.2.15

**Additional context**

It would be good to have a way to make the "soft" keyboard disappear in iOS, as it obscures half the screen, and Toga does not appear to have a means to achieve that.



Discussion:
Also, just noticed:
```
[iOS] Not implemented: Widget.focus()
```
which pretty much explains why this is not working.

At the moment, I'm really stuck, I'd be curious to know if anyone has ever used Toga for a real-life iOS app?

Resolving patch:
diff --git a/android/src/toga_android/app.py b/android/src/toga_android/app.py
--- a/android/src/toga_android/app.py
+++ b/android/src/toga_android/app.py
@@ -233,3 +233,9 @@ async def intent_result(self, intent):
             return result_future.result()
         except AttributeError:
             raise RuntimeError("No appropriate Activity found to handle this intent.")
+
+    def hide_cursor(self):
+        pass
+
+    def show_cursor(self):
+        pass
diff --git a/iOS/src/toga_iOS/app.py b/iOS/src/toga_iOS/app.py
--- a/iOS/src/toga_iOS/app.py
+++ b/iOS/src/toga_iOS/app.py
@@ -89,3 +89,9 @@ def beep(self):
 
     def exit(self):
         pass
+
+    def hide_cursor(self):
+        pass
+
+    def show_cursor(self):
+        pass


Test patch: