I'm trying to implement iOS Handoff with fetching bigger data via NSInputStream
and NSOutputStream
. When I successfully receive user activity in method application(_:continue:restorationHandler:)
I call getContinuationStreams
but it always fails with error:
Error Domain=NSCocoaErrorDomain Code=4609 "Handoff couldn’t be completed because the network is not available." UserInfo={NSUnderlyingError=0x17db43c0 {Error Domain=NSPOSIXErrorDomain Code=51 "Network is unreachable" UserInfo={NSLocalizedDescription=Connection lost}}}
Dictionary userInfo
of NSUserActivity
is not empty and is received fine.
I followed Apple's Handoff Programming Guide and this article.
Here is code sample how I create user activity:
func createUserActivity() {
self.userActivity = NSUserActivity(activityType: self.userActivityType)
self.userActivity?.supportsContinuationStreams = true;
self.userActivity?.delegate = self
self.userActivity?.becomeCurrent()
self.userActivity?.needsSave = true
}
And in AppDelegate I receive user activity as follows:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
NSLog("continue userActivity %@", userActivity.userInfo!)
if userActivity.supportsContinuationStreams {
userActivity.getContinuationStreams(completionHandler: { (inputStream, outputStream, error) in
if error != nil {
NSLog("\(type(of: self)), \(#function) \(error.debugDescription)")
} else {
if let inStream = inputStream {
self.receivedData = NSMutableData()
self.currentActivityType = userActivity.activityType
self.inputStream = inStream
self.inputStream.delegate = self
self.inputStream.schedule(in: RunLoop.main, forMode: RunLoopMode.defaultRunLoopMode)
self.inputStream.open()
}
}
})
}
return true
}
Parameters inputStream
and outputStream
are always nil.
What am I doing wrong? Does anyone have a clue?