Skip to main content

Enable Logging

Turn on debug logging to see SpendOwl activity:
SpendOwl.enableLogging = true
Disable logging in production builds. Logs may contain sensitive information.

Using Build Flags

Enable logging only in debug builds:
#if DEBUG
SpendOwl.enableLogging = true
#endif

Log Levels

For more control, use logLevel:
SpendOwl.logLevel = .debug
LevelDescription
.noneNo logging (default)
.errorOnly errors
.infoErrors and important events
.debugAll messages including debug info

Example Output

[SpendOwl] SpendOwl SDK v1.0.0 configured
[SpendOwl] Fetching attribution token...
[SpendOwl] Attribution token received: eyJ0...
[SpendOwl] Sending attribution to server...
[SpendOwl] Attribution result: attributed (Campaign: Winter Sale)
[SpendOwl] Purchase tracking started
[SpendOwl] User ID set: user-123...
[SpendOwl] Purchase tracked: com.app.premium ($9.99 USD)

Console.app Integration

SpendOwl logs are written to the system log using os_log. To view them:
1

Open Console.app

Find Console in /Applications/Utilities/Console.app
2

Select Your Device

Choose your device or simulator from the sidebar
3

Filter by SpendOwl

In the search bar, type SpendOwl to filter logs
Console.app shows logs even when Xcode isn’t running—useful for testing on physical devices.

Common Issues

SDK Not Configured

Error: SpendOwl SDK is not configured
Solution: Call configure() before using other SDK methods:
// In App.init() or AppDelegate
SpendOwl.configure(apiKey: "your-api-key")

Invalid API Key

Error: Invalid API key
Solution: Check your API key in the dashboard. Ensure you’re using the correct key for your environment (test vs. live).

Network Errors

Error: Network error: The request timed out
Solutions:
  • Check internet connectivity
  • Increase timeout: SpendOwlConfiguration(apiKey: "...", timeoutInterval: 30)
  • The SDK retries automatically, but persistent failures indicate network issues

Attribution Unavailable

Error: Attribution is not available on this device
Causes:
  • iOS version below 14.3
  • AdServices framework not available
  • Running in simulator (attribution may return mock data)
Solution: Attribution works on iOS 14.3+ on real devices. Simulators may return limited data.

Attribution Denied

Error: Attribution access was denied
Causes:
  • User or MDM restricted ad tracking
  • Limited Ad Tracking enabled in Settings
Solution: This is normal for some users. Handle gracefully:
do {
    let attribution = try await SpendOwl.attribution()
} catch SpendOwlError.attributionDenied {
    // User has restricted tracking - continue without attribution
}

Verifying Integration

Use this checklist to verify SpendOwl is working:
1

Check Configuration

print(SpendOwl.isConfigured) // Should be true
2

Check SDK Version

print(SpendOwl.sdkVersion) // Should print "1.0.0"
3

Enable Logging

SpendOwl.enableLogging = true
4

Trigger Attribution

let attribution = try await SpendOwl.attribution()
print(attribution.status) // Should print a status
5

Check Dashboard

Visit your SpendOwl Dashboard to see if events appear

Debug Mode in Dashboard

The SpendOwl dashboard shows debug data when using a test API key:
  • Test events are labeled separately
  • Don’t affect production ROAS
  • Useful for verifying integration

Reporting Issues

If you encounter issues not covered here:
  1. Enable .debug logging
  2. Reproduce the issue
  3. Copy the logs
  4. Open an issue on GitHub
Include:
  • iOS version
  • SDK version
  • Relevant logs
  • Steps to reproduce

Next Steps