Is transferCurrentComplicationUserInfo more suitable for complication update?

The distinction between these two WCSession methods involve when the data is sent, and whether the watchkit extension is woken up or not.

transferCurrentComplicationUserInfo: is specifically designed for transferring complication user info meant to be shown on the watch face right now.

  • The complication user info is marked “Urgent”, and is placed at the front of the queue,
  • the watch wakes the extension in the background to receive the info, and
  • the transfer happens immediately. (Other queued information might also transfer at that point.)

transferUserInfo: queues up information, to be transferred when the system determines it’s a good time to process the queue:

  • The user info is placed at the back of the queue,
  • the transferred information is stored if the extension is not awake,
  • the transfer does not happen immediately, and
  • the information is delivered in the order in which they were sent.

More details can be found in the WWDC 2015 Introducing Watch Connectivity video.

Update for iOS 10:

In iOS 10, WCSession adds a remainingComplicationUserInfoTransfers property which can affect which method that iOS will use to transfer the user info:

The number of remaining times that you can call transferCurrentComplicationUserInfo: during the current day. If this property is set to 0, any additional calls to transferCurrentComplicationUserInfo: use transferUserInfo: instead.

If the complication is on the active watch face, you are given 50 transfers a day. If the complication is not active, this property defaults to 0.

Leave a Comment