The MarketingCloudSDK.framework uses extensive internal logging to record actions taken by the SDK to informational and diagnostic purposes.
General, default-level logging is enabled at all times. Additionally, the SDK writes error and fault-level logs when conditions occur which must be recorded.
Enable debug-level logging after configuration using this call.
Query the state of debug-level logging using this call.
We send all logging output to Apple’s unified logging system. Read this information using Xcode’s “Devices and Simulators” window or the macOS Console application. When SDK debug logging is enabled, the SDK uses the OS_LOG_TYPE_DEBUG value. Make sure to disable logging in your application for release builds to the Apple App Store.
Review Apple documentation for more information about unified logging.
For testing and troubleshooting purposes, retrieve your device token from a running app by calling [[MarketingCloudSDK sharedInstance] sfmc_deviceToken] and sending the result to yourself via email, alert, or other method.
Use this information when testing your app and the device either does not receive messages or receives messages sporadically. Testing the app while connected to a corporate Wi-Fi network could cause issues if your IT team does not correctly configure port accessibility (preventing the test device from receiving messages).
Unblock network ports
Ensure that your network team unblocks the following ports to provide communication between the moble device and APNS servers for MobilePush functionality:
- TCP port 5223 (used by devices to communicate to the APNS servers)
- TCP port 2195 (used to send notifications to the APNS servers)
- TCP port 2196 (used by the APNS feedback service)
- TCP port 443 (used as a fallback service for Wi-Fi devices when those devices cannot communicate to the APNS service on port 5223)
Add debugging statements to the log
You can toggle the SDK logging facility by including the following lines in your code:
Add SDK State information to log
For a complete list of information that the SDK has and it’s current state, you can implement getSDKState() as follows:
The SDK will output a JSON string like this: