Skip to content

iOS SDK

This document is for our SDK version 5 for iOS and tvOS. Its sample code is written in Swift 5.

Debug

This section describes how to verify that the integration of Our SDK with your application has been performed correctly. Debugging the application requires an Xcode connected device with an access to Xcode's console log.

Enable debug messages

In order to print debug messages to the Xcode console log you need to instruct Our SDK instance to enable logging. To do so, set the property logLevel of the init method to .info.

let polyNet = try? PolyNet(manifestUrl: manifestUrl,
                           channelId: channelId,
                           apiKey: apiKey,
                           managesEncryptionKeys: true,
                           logLevel: .info)
...

The configuration

As explained in Our SDK's configuration section, the call to the PolyNet init method will return a PolyNet instance or PolyNetError. If a configuration error occurs due to an incorrect ApiKey, search the console log for: Check your API Key. Detail: *{detail}*. If problem persists, contact support at support@system73.com..

If any other error occurs on init, search the console log for: The PolyNet SDK has failed to build. Detail: *{detail}*. If problem persists, contact support at support@system73.com., the detail will provide further information about the error.

The connection to our service

If everything is OK, you should see one of the following messages in the log some time after the object is instanciated:

  • When connected to fetch content from CDN: Connected successfully to the Tracker, with ID = (...). Will fetch from CDN.
  • When connected to fetch content from a peer: Connected successfully to the Tracker, with ID = (...). Will fetch from P2P (parent ID = ...).

To verify that the nodes are connected, examine the node ID, and teh parent ID on the System73's Dashboard.

Tracker Issues

If the connection with Tracker cannot be opened due to a malformed apiKey search the console log for: Check your API Key. If problem persists, contact support at support@system73.com., you can handle this error in the polyNet:didFailWithError: delegate method with the codes: -600, -601.

If an issue with the Tracker Handshake occurs, search the console log for: The PolyNet SDK is not compatible with the Tracker. Tracker code: *{handshake_rejected_code}*. This may happen in transitions to newer versions. If problem persists, contact support at support@system73.com., you can handle this error in the polyNet:didFailWithError: delegate method with its code: -701.

If connection to Tracker Metrics Endpoint fails search the console log for:Error communicating with Tracker metrics endpoint. HTTP code: *{http_status_code}*, URL: *{tracker_metrics_url}*. If problem persists, contact support at support@system73.com., you can handle this error in the polyNet:didFailWithError: delegate method with its code: -703.

If the content manifest is not reachable by the PolyNet Instance or is not supported, search the log for: Error while getting the local Manifest URL. The original is returned instead. The PolyNet is deactivated., you can handle this error in the polyNet:didFailWithError: delegate method with its code: -700.

Content requests

Warning

It is VERY IMPORTANT to verify that the video player is requesting the content from the overlay, and not directly from the Internet or CDN.

To make sure the service works properly, the following messages need to appear in the console's log.

Content request URL = ...

If you can't find any of those types of messages in the log, it means that the player is not using our servie's overlay to download content.

P2P

To verify that peers are able to connect to each other, search the console logs for a message that shows connections and disconnections from peers:

Connected to P2P parent with ID = ...
Disconnected from P2P parent with ID = ...
Connected to P2P child with ID = ...
Disconnected from P2P child with ID = ...

You can see peers come and go, by inspecting the parent ID and the child ID on the System73's Dashboard.

Reconnections

Tracker Connection Related errors will yield: Error communicating with Tracker. Description: *{custom_description}*. If the problem persists, please contact support at support@system73.com., you can handle this error in the polyNet:didFailWithError: delegate method with its code: -702.

If the SDK is commanded to connect to a different parent by the Tracker, search the console log for one of the following messages:

  • When reconnecting to fetch content from CDN: Node is moving, ID = (...). Will fetch from CDN.
  • When reconnecting to fetch content from a peer: Node is moving, ID = (...). Will fetch from P2P (parent ID = ...).

You can verify that the nodes are connected by looking for the node ID, and the parent ID, on the System73 Dashboard.

Example of the whole process

The following is an example of a debugging session where 2 devices are connected, and the operation runs successfully:

  1. You need an exclusive channel for debugging, which is not used by anyone else. Make sure that there is no other device is connecting to the channel. You can verify that on the System73 Dashboard.

  2. Connect the first device to the channel. The device should be playing video. Check that its node ID shows up on the System73 Dashboard, connected to the CDN. Look for the following messages in the console's log:

    Connected successfully to the Tracker, with ID = (...). Will fetch from CDN.
    Content request URL = ...
    
  3. Connect a second device. The device should start playing video within a few seconds. It should become a child node of the first device. Confirm that its node ID shows up on the System73 Dashboard, and that it is connected to the first device. Look for the following messages in the console's log:

    • In the parent's log:

      Connected to P2P child with ID = (...)
      
    • In the child's log:

      Connected successfully to the Tracker, with ID = (...). Will fetch from P2P (parent ID = ...).
      Connected to P2P parent with ID = (...)
      Content request URL = ...