'Apple Local Push Connectivity with error nil?

I'm trying to configure Local Push Connectivity. I already have Local Push Entitlement, and have install a provisioning profile with local push entitlement. It's build fine but when app start, PushProvider didn't active and start and Push Manager show error nil. I have done every instructions that sample code have provided.

This is my project.

In my application target, I have a bundle id com.my_team_name.my_app_name

and in the app group name group.com.my_team_name.my_app_name

In the .entitlement, I've set the required configuration:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.developer.networking.networkextension</key>
    <array>
        <string>app-push-provider</string>
    </array>
    <key>com.apple.developer.networking.wifi-info</key>
    <true/>
    <key>com.apple.security.application-groups</key>
    <array>
        <string>group.com.my_team_name.my_app_name</string>
    </array>
</dict>
</plist>

Info.plist has noting to change

And I have a PushManager Class with this code

class AppPushManager: NSObject, NEAppPushDelegate{
    func appPushManager(_ manager: NEAppPushManager, didReceiveIncomingCallWithUserInfo userInfo: [AnyHashable : Any] = [:]) {
        
    }
    
    static let shared = AppPushManager()
    
    private var pushManager: NEAppPushManager = NEAppPushManager()
    private let pushManagerDescription = "PushDefaultConfiguration"
    private let pushProviderBundleIdentifier = "com.my_team_name.my_app_name.PushProvider"
    
    func initialize() {
        if pushManager.delegate == nil {
            pushManager.delegate = self
        }
        
        pushManager.localizedDescription = pushManagerDescription
        pushManager.providerBundleIdentifier = pushProviderBundleIdentifier
        pushManager.isEnabled = true

        pushManager.providerConfiguration = [
            "host": "my_server.local"
        ]

        pushManager.matchSSIDs = ["my_wifi_ssid"]
        
        pushManager.saveToPreferences(completionHandler: { error in
            print("error? \(String(describing: error))")
            print("is active: \(pushManager.isActive)")
        })
    }
}

In my extension, A PushProvider Target. I have a bundle id com.my_team_name.my_app_name.PushProvider

and in the app group name group.com.my_team_name.my_app_name

In the Info.plist of my extension, I've added the required configuration:

<key>NSExtension</key>
<dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.networkextension.app-push</string>
    <key>NSExtensionPrincipalClass</key>
    <string>$(PRODUCT_MODULE_NAME).PushProvider</string>
</dict>

the .entitlement file have the same contents as the application.

and I have created the extension class "PushProvider.swift" as follow:

class PushProvider: NEAppPushProvider {
    ...
}

When I run the application, I got this printed out

error? nil
is active: false

I think it might be something with providerBundleIdentifier in Push Manager. Have anyone know what I've missing?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source