We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
iOS app not showing content with Rubicon ObjC 0.4.4
### Describe the bug

When running an iOS app with Toga 0.3.0dev39 and Rubicon 0.4.4, the app isn't successfully started, and the main app content is never displayed. When the app runs, you'll see the following in the log:
 
```
2023-01-24 12:14:13.871494+0800 Hello World[94057:4239245] Running app module: helloworld
2023-01-24 12:14:14.399629+0800 Hello World[94057:4239245] /Users/rkm/Library/Developer/CoreSimulator/Devices/84FC86CA-1D89-46EF-9349-29DDCF840143/data/Containers/Bundle/Application/7038F3CE-2212-4C60-9067-1978A80DEC8D/Hello World.app/app_packages/toga_iOS/app.py:95: DeprecationWarning: There is no current event loop
2023-01-24 12:14:14.399738+0800 Hello World[94057:4239245]   self.loop = asyncio.get_event_loop()
```

This is a warning, not an error; the app will continue to run.

### Steps to reproduce

1. Run `examples/tutorial0` on iOS
2. See error

The app won't crash; but the app window will remain black.

### Expected behavior

The app should run and window content should be displayed.

### Screenshots

_No response_

### Environment

- Operating System: iOS
- Python version: All
- Software versions:
  - Briefcase: All
  - Toga: <=0.3.0.dev39
  - Rubicon-objc 0.4.4


### Logs

N/A

### Additional context

The error has been caused because Toga-iOS 0.3.0.dev39 [included a shim](https://github.com/beeware/toga/blob/v0.3.0.dev39/src/iOS/src/toga_iOS/app.py#L112) that reproduced the implementation of `run_forever_cooperatively()`. This was done when the iOS implementation was originally created, with the expectation that this shim would be replaced with the actual call once Rubicon 0.3 was released. This didn't happen, but the old shim continued to work as it matched the implementation in Rubicon.

However, Rubicon 0.4.4 altered the implementation of `run_forever_cooperatively()`. As a result, the shim in Toga-iOS 0.3.0.dev39 no longer does everything it needs to in order to start the app. 

The issue has already been [fixed in the main branch](https://github.com/beeware/toga/blob/main/iOS/src/toga_iOS/app.py#L117) - the shim has been replaced with the actual call to `run_forever_cooperatively()`.

Two workarounds exist:
1. Use the `main` branch of Toga in your app.
2. Block the use of rubicon-objc 0.4.4. If you add `rubicon-objc!=0.4.4` to the requires list in your iOS configuration, this will prevent toga-iOS from using the new version.


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `iOS/setup.py`
Content:
```
1 #!/usr/bin/env python
2 import re
3 
4 from setuptools import setup
5 
6 # Version handline needs to be programatic because
7 # we can't import toga_iOS to compute the version;
8 # and to support versioned subpackage dependencies
9 with open("src/toga_iOS/__init__.py", encoding="utf8") as version_file:
10     version_match = re.search(
11         r"^__version__ = ['\"]([^'\"]*)['\"]", version_file.read(), re.M
12     )
13     if version_match:
14         version = version_match.group(1)
15     else:
16         raise RuntimeError("Unable to find version string.")
17 
18 setup(
19     version=version,
20     install_requires=[
21         "rubicon-objc>=0.4.4",
22         f"toga-core=={version}",
23     ],
24 )
25
```

Path: `cocoa/setup.py`
Content:
```
1 #!/usr/bin/env python
2 import re
3 
4 from setuptools import setup
5 
6 # Version handline needs to be programatic because
7 # we can't import toga_cocoa to compute the version;
8 # and to support versioned subpackage dependencies
9 with open("src/toga_cocoa/__init__.py", encoding="utf8") as version_file:
10     version_match = re.search(
11         r"^__version__ = ['\"]([^'\"]*)['\"]", version_file.read(), re.M
12     )
13     if version_match:
14         version = version_match.group(1)
15     else:
16         raise RuntimeError("Unable to find version string.")
17 
18 setup(
19     version=version,
20     install_requires=[
21         "rubicon-objc>=0.4.4",
22         f"toga-core=={version}",
23     ],
24 )
25
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/cocoa/setup.py b/cocoa/setup.py
--- a/cocoa/setup.py
+++ b/cocoa/setup.py
@@ -18,7 +18,7 @@
 setup(
     version=version,
     install_requires=[
-        "rubicon-objc>=0.4.4",
-        f"toga-core=={version}",
+        "rubicon-objc >= 0.4.5rc1, < 0.5.0",
+        f"toga-core == {version}",
     ],
 )
diff --git a/iOS/setup.py b/iOS/setup.py
--- a/iOS/setup.py
+++ b/iOS/setup.py
@@ -18,7 +18,7 @@
 setup(
     version=version,
     install_requires=[
-        "rubicon-objc>=0.4.4",
-        f"toga-core=={version}",
+        "rubicon-objc >= 0.4.5rc1, < 0.5.0",
+        f"toga-core == {version}",
     ],
 )

{"golden_diff": "diff --git a/cocoa/setup.py b/cocoa/setup.py\n--- a/cocoa/setup.py\n+++ b/cocoa/setup.py\n@@ -18,7 +18,7 @@\n setup(\n     version=version,\n     install_requires=[\n-        \"rubicon-objc>=0.4.4\",\n-        f\"toga-core=={version}\",\n+        \"rubicon-objc >= 0.4.5rc1, < 0.5.0\",\n+        f\"toga-core == {version}\",\n     ],\n )\ndiff --git a/iOS/setup.py b/iOS/setup.py\n--- a/iOS/setup.py\n+++ b/iOS/setup.py\n@@ -18,7 +18,7 @@\n setup(\n     version=version,\n     install_requires=[\n-        \"rubicon-objc>=0.4.4\",\n-        f\"toga-core=={version}\",\n+        \"rubicon-objc >= 0.4.5rc1, < 0.5.0\",\n+        f\"toga-core == {version}\",\n     ],\n )\n", "issue": "iOS app not showing content with Rubicon ObjC 0.4.4\n### Describe the bug\r\n\r\nWhen running an iOS app with Toga 0.3.0dev39 and Rubicon 0.4.4, the app isn't successfully started, and the main app content is never displayed. When the app runs, you'll see the following in the log:\r\n \r\n```\r\n2023-01-24 12:14:13.871494+0800 Hello World[94057:4239245] Running app module: helloworld\r\n2023-01-24 12:14:14.399629+0800 Hello World[94057:4239245] /Users/rkm/Library/Developer/CoreSimulator/Devices/84FC86CA-1D89-46EF-9349-29DDCF840143/data/Containers/Bundle/Application/7038F3CE-2212-4C60-9067-1978A80DEC8D/Hello World.app/app_packages/toga_iOS/app.py:95: DeprecationWarning: There is no current event loop\r\n2023-01-24 12:14:14.399738+0800 Hello World[94057:4239245]   self.loop = asyncio.get_event_loop()\r\n```\r\n\r\nThis is a warning, not an error; the app will continue to run.\r\n\r\n### Steps to reproduce\r\n\r\n1. Run `examples/tutorial0` on iOS\r\n2. See error\r\n\r\nThe app won't crash; but the app window will remain black.\r\n\r\n### Expected behavior\r\n\r\nThe app should run and window content should be displayed.\r\n\r\n### Screenshots\r\n\r\n_No response_\r\n\r\n### Environment\r\n\r\n- Operating System: iOS\r\n- Python version: All\r\n- Software versions:\r\n  - Briefcase: All\r\n  - Toga: <=0.3.0.dev39\r\n  - Rubicon-objc 0.4.4\r\n\r\n\r\n### Logs\r\n\r\nN/A\r\n\r\n### Additional context\r\n\r\nThe error has been caused because Toga-iOS 0.3.0.dev39 [included a shim](https://github.com/beeware/toga/blob/v0.3.0.dev39/src/iOS/src/toga_iOS/app.py#L112) that reproduced the implementation of `run_forever_cooperatively()`. This was done when the iOS implementation was originally created, with the expectation that this shim would be replaced with the actual call once Rubicon 0.3 was released. This didn't happen, but the old shim continued to work as it matched the implementation in Rubicon.\r\n\r\nHowever, Rubicon 0.4.4 altered the implementation of `run_forever_cooperatively()`. As a result, the shim in Toga-iOS 0.3.0.dev39 no longer does everything it needs to in order to start the app. \r\n\r\nThe issue has already been [fixed in the main branch](https://github.com/beeware/toga/blob/main/iOS/src/toga_iOS/app.py#L117) - the shim has been replaced with the actual call to `run_forever_cooperatively()`.\r\n\r\nTwo workarounds exist:\r\n1. Use the `main` branch of Toga in your app.\r\n2. Block the use of rubicon-objc 0.4.4. If you add `rubicon-objc!=0.4.4` to the requires list in your iOS configuration, this will prevent toga-iOS from using the new version.\r\n\n", "before_files": [{"content": "#!/usr/bin/env python\nimport re\n\nfrom setuptools import setup\n\n# Version handline needs to be programatic because\n# we can't import toga_iOS to compute the version;\n# and to support versioned subpackage dependencies\nwith open(\"src/toga_iOS/__init__.py\", encoding=\"utf8\") as version_file:\n    version_match = re.search(\n        r\"^__version__ = ['\\\"]([^'\\\"]*)['\\\"]\", version_file.read(), re.M\n    )\n    if version_match:\n        version = version_match.group(1)\n    else:\n        raise RuntimeError(\"Unable to find version string.\")\n\nsetup(\n    version=version,\n    install_requires=[\n        \"rubicon-objc>=0.4.4\",\n        f\"toga-core=={version}\",\n    ],\n)\n", "path": "iOS/setup.py"}, {"content": "#!/usr/bin/env python\nimport re\n\nfrom setuptools import setup\n\n# Version handline needs to be programatic because\n# we can't import toga_cocoa to compute the version;\n# and to support versioned subpackage dependencies\nwith open(\"src/toga_cocoa/__init__.py\", encoding=\"utf8\") as version_file:\n    version_match = re.search(\n        r\"^__version__ = ['\\\"]([^'\\\"]*)['\\\"]\", version_file.read(), re.M\n    )\n    if version_match:\n        version = version_match.group(1)\n    else:\n        raise RuntimeError(\"Unable to find version string.\")\n\nsetup(\n    version=version,\n    install_requires=[\n        \"rubicon-objc>=0.4.4\",\n        f\"toga-core=={version}\",\n    ],\n)\n", "path": "cocoa/setup.py"}], "after_files": [{"content": "#!/usr/bin/env python\nimport re\n\nfrom setuptools import setup\n\n# Version handline needs to be programatic because\n# we can't import toga_iOS to compute the version;\n# and to support versioned subpackage dependencies\nwith open(\"src/toga_iOS/__init__.py\", encoding=\"utf8\") as version_file:\n    version_match = re.search(\n        r\"^__version__ = ['\\\"]([^'\\\"]*)['\\\"]\", version_file.read(), re.M\n    )\n    if version_match:\n        version = version_match.group(1)\n    else:\n        raise RuntimeError(\"Unable to find version string.\")\n\nsetup(\n    version=version,\n    install_requires=[\n        \"rubicon-objc >= 0.4.5rc1, < 0.5.0\",\n        f\"toga-core == {version}\",\n    ],\n)\n", "path": "iOS/setup.py"}, {"content": "#!/usr/bin/env python\nimport re\n\nfrom setuptools import setup\n\n# Version handline needs to be programatic because\n# we can't import toga_cocoa to compute the version;\n# and to support versioned subpackage dependencies\nwith open(\"src/toga_cocoa/__init__.py\", encoding=\"utf8\") as version_file:\n    version_match = re.search(\n        r\"^__version__ = ['\\\"]([^'\\\"]*)['\\\"]\", version_file.read(), re.M\n    )\n    if version_match:\n        version = version_match.group(1)\n    else:\n        raise RuntimeError(\"Unable to find version string.\")\n\nsetup(\n    version=version,\n    install_requires=[\n        \"rubicon-objc >= 0.4.5rc1, < 0.5.0\",\n        f\"toga-core == {version}\",\n    ],\n)\n", "path": "cocoa/setup.py"}]}