The lack of Apple documentation on ExtensionFoundation (and ExtensionKit) is almost funny. What can it do? What can it not do? The sum of all knowledge is: “try it and find out”.
I’ve made it as far as: myProcess = try await AppExtensionProcess(configuration: myConfig), which doesn’t cause an error and returns… but not a single line in the extension code is executed.
It’s running! Not working as intended, of course, but at least running.
Thousands of thanks to @khaost who has the only working example of iOS extensions (that I could find): https://github.com/KhaosT/UIExtensionExample
GitHub - KhaosT/UIExtensionExample: ExtensionKit demo for iOS 26

ExtensionKit demo for iOS 26. Contribute to KhaosT/UIExtensionExample development by creating an account on GitHub.

GitHub
On the other hand, I cannot upload to the AppStore because Xcode generates an Info.plist file that the AppStore rejects. Fun times.
Being desperate, I asked the question on the developer forums... and got an answer! "Ah, we didn't envision people using extensions within their own iOS apps. That's not forbidden, but it breaks the AppStore checking process. Please file bug report; we'll get back to you".
Literally, the answer was: “you're trying to create extensions that are specifically for "your" apps’ usage, and that's a distinct use case that we need to more actively consider.” (I appreciate the diplomacy in the wording)
(He confirmed that 3rd party App Extensions are still prohibited on the AppStore)
I’ve been asked to clarify potential uses, in order to help prioritize the iOS developers work (I did). @emma, @alexstaravoitau, @kebo, @lextar, I’ve seen you liking the conversation, do you want to add other use cases, or support the feedback? It’s FB20710338.
I stayed within the lines, and did not explain all the awesome things I could do with non-memory limited, third-party app extensions on iOS (separate extension for TeX! Python distributions shared between apps! Installable Unix commands!)
@nholzschuch Off the top of my head it’s probably the use cases similar to yours: firing up a Python interpreter in a separate process and in a more isolated environment. Shame it seemingly won’t work for kernels and Jupyter server though, but maybe scripts, installing packages (letting Python spawn processes via its os module perhaps?). And yes, offloading all Python interpretation to another (runtime/env managing) app is the ultimate dream haha! 😅
@alexstaravoitau @nholzschuch This! I don’t have too much to add. Running interpreters would be much safer for the main process so it is not affected by memory issues. Also updating my app without managing the distribution of all the packages would be better for everyone and we could choose both the interface and the runtime.
I even got an official response to my feedback! "What you are attempting to do is not supported. We recommend that you use the XPC framework for similar capabilities:
https://developer.apple.com/documentation/xpc "
XPC | Apple Developer Documentation

Access a low-level interprocess communication mechanism.

Apple Developer Documentation
@nholzschuch Yeah the lack of documentation is wild. What are the issues you're running into?
@khaost Right now I have trouble uploading to the AppStore (“The value of the EXExtensionPointIdentifier key, AsheKube.app.a-Shell.localWebServer, in the Info.plist of “a-Shell.app/Extensions/localWebServer.appex” is invalid.”), and debugging works once in a while, but more importantly it seems that I cannot run a web server in an extension: communications with the outside are really limited to the XPC connection.
That’s disappointing, but now that I have it running, I have other possible uses.
@nholzschuch Very curious about your findings, I was also hoping I could use extensions for something when they were added to iOS, but didn't get a chance to play with them yet
@alexstaravoitau Thanks! So far:
- the web server runs, but doesn’t receive the requests (so it’s useless as a web server).
- they’re limited to 30 MB (not tested by me but reported elsewhere).
- it seems to be running as a separate process, with a different pid.
- if the extension calls exit(), it ends the process (but not the enclosing app).
- still unable to upload to the AppStore.
@alexstaravoitau I actually got an answer on the developer forums: "ah, we didn't envision developers using extensions within their own iOS apps. Interesting. Please file bug report."
@nholzschuch Ah very interesting! And I suppose explains some of the limitations.