Post

Replies

Boosts

Views

Activity

Comment on Extension not found in App bundle: perhaps App is not validly structured
This is an error message from the system when calling [OSSystemExtensionRequest activationRequestForExtension: queue:]: Error Domain=OSSystemExtensionErrorDomain Code=4 "Extension not found in App bundle: perhaps App is not validly structured" UserInfo={NSLocalizedDescription=Extension not found in App bundle: perhaps App is not validly structured} I am also facing the same error, any help is appreciated. I also have the similar ID.
Feb ’22
Comment on Disable on-demand VPN
We are trying to build an always-on VPN, and user can disable this always-on feature in the App UI. However, we found many users prefer to use Settings to enable and disable VPN. But not many of them understand how to disable always-on when they need to do it even if we have described it in the container app. They still complain when they disable VPN from Settings, the VPN turns itself back on again and again which makes their phone unusable in many slow networks. And we have talked to some of our users, they have an opinion like this: When I turn on VPN, I want it to stay on even if the device reboots(automatic system updates, etc) and when I turn if off, it should stay off and not turns itself back on.
Aug ’21
Comment on Disable on-demand VPN
I am trying to disable on-demand feature when VPN stops for a specific NEProviderStopReason and yes, I am trying to do it in the packet tunnel provider. In particular, I am trying to achieve when -stopTunnelWithReason: completionHandler: is called because this is the only method that is guaranteed to be called when the VPN stops on iOS.
Aug ’21
Comment on NWUDPSessionState Stuck at Preparing After Cancelling Session.
One thing that is worth mentioning, we do wait for the network settings to be updated before we create a new session: (NSError *)updateTunnelNetworkSettings:(NEPacketTunnelNetworkSettings *)settings { dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); __block NSError *updateError; WEAKIFY(self); [self setTunnelNetworkSettings:settings completionHandler:^(NSError *_Nullable error) { STRONGIFY_OR_RETURN(self); if (error) { updateError = error; } dispatch_async(self->_tunnelProviderQueue, ^{ if (self->_startCompletionHandler) { self->_startCompletionHandler(nil); } self->_startCompletionHandler = nil; }); dispatch_semaphore_signal(semaphore); }]; dispatch_time_t timeout = dispatch_time(DISPATCH_TIME_NOW, kUpdateNetworkSettingsTimeout * NSEC_PER_SEC); if (dispatch_semaphore_wait(semaphore, timeout) != 0) { updateError = TIMEOUT_ERROR; } return updateError; }
Aug ’21