One of the main purposes of having a UI based container app with your Network System Extension is to ensure that the user knows that they have consented to installing your system extension AND to make sure the user knows that they are allowing for a new Network Configuration to be installed that filters network traffic. These are the two major components that need to be handled in your UI based container app. From there, whatever else you choose to show in your container app is up to you.
I want to remove UI and prompts from SimpleFirewall example.
You will need to include enough UI at least to display these two prompts I have described above to the user so ensure that they are aware of what is happening. There are MDM payloads to handle auto-approving your Network System Extension installation, but if you are not using MDM, these prompts are required to get your System Extension off the ground.
From here I would go back and make sure you have at least handled the cases to install the Network System Extension and allow the new Network Configuration setup in your user interface. See these specific places in SimpleFirewall as a reference:
viewWillAppear() for initial loadFromPreferences().
startFilter() for OSSystemExtensionRequest.activationRequest().
enableFilterConfiguration() for loadFromPreferences() again, setup NEFilterManager, and saveToPreferences().
Make sure this flow is at least covered in how you have structured your new application, and you should be good to setup your new application logic on top of this.
Matt Eaton
DTS Engineering, CoreOS
meaton3@apple.com