iOS Configuration Guide
Overview
This guide covers all configuration options available in the Squad SDK for iOS, including initialization, security, networking, and feature-specific settings.
Basic Configuration
SDK Configuration
struct SquadConfig {
let organizationId: String
let apiKey: String
let environment: Environment
let logLevel: LogLevel
}
let config = SquadConfig(
organizationId: "YOUR_ORG_ID",
apiKey: "YOUR_API_KEY",
environment: .production,
logLevel: .info
)
try SquadSDK.initialize(with: config)
Environment Configuration
enum Environment {
case production
case staging
case development(url: URL)
}
// Custom environment setup
let customConfig = SquadConfig(
organizationId: "YOUR_ORG_ID",
apiKey: "YOUR_API_KEY",
environment: .development(url: URL(string: "https://dev-api.yourdomain.com")!),
logLevel: .debug
)
Security Configuration
Certificate Pinning
let certificateConfig = CertificatePinningConfiguration(
certificates: ["sha256/XXXX", "sha256/YYYY"],
includeDefaultCertificates: true
)
SquadSDK.shared.setCertificatePinning(config: certificateConfig)
User Data Protection
let securityConfig = SecurityConfiguration(
dataEncryption: .enabled,
biometricAuth: .optional,
secureStorage: .keychain
)
SquadSDK.shared.setSecurityConfiguration(securityConfig)
Network Configuration
Timeouts and Retries
let networkConfig = NetworkConfiguration(
connectionTimeout: 30,
readTimeout: 30,
writeTimeout: 30,
maxRetries: 3,
retryBackoff: .exponential(initial: 1, multiplier: 2)
)
SquadSDK.shared.setNetworkConfiguration(networkConfig)
Caching Strategy
let cacheConfig = CacheConfiguration(
diskCapacity: 50 * 1024 * 1024, // 50 MB
memoryCapacity: 10 * 1024 * 1024, // 10 MB
timeToLive: 3600 // 1 hour
)
SquadSDK.shared.setCacheConfiguration(cacheConfig)
WebView Configuration
Basic Setup
let webViewConfig = WebViewConfiguration(
allowsInlineMediaPlayback: true,
mediaPlaybackRequiresUserAction: false,
dataDetectorTypes: [.link, .phoneNumber]
)
SquadSDK.shared.setWebViewConfiguration(webViewConfig)
Content Configuration
let contentConfig = ContentConfiguration(
allowedContentTypes: [.all],
javascriptEnabled: true,
domStorageEnabled: true,
userScalable: false
)
webViewConfig.setContentConfiguration(contentConfig)
Voice Call Configuration
Audio Settings
let audioConfig = AudioConfiguration(
audioMode: .voiceChat,
acousticEchoCancellation: true,
noiseSuppression: true,
automaticGainControl: true
)
SquadSDK.shared.setAudioConfiguration(audioConfig)
Call Quality
let qualityConfig = CallQualityConfiguration(
bitrateMode: .adaptive,
minimumBitrate: 8000,
maximumBitrate: 32000,
opusMode: .voip
)
SquadSDK.shared.setCallQualityConfiguration(qualityConfig)
Analytics Configuration
let analyticsConfig = AnalyticsConfiguration(
enabled: true,
trackingEvents: [
.calls,
.errors,
.performance
],
customDimensions: [
"app_version": Bundle.main.version,
"environment": "production"
]
)
SquadSDK.shared.setAnalyticsConfiguration(analyticsConfig)
Error Handling Configuration
let errorConfig = ErrorConfiguration(
retryableErrors: [.network, .timeout],
maxRetries: 3,
errorCallback: { error in
// Handle errors
Logger.error("Squad SDK Error: \(error)")
}
)
SquadSDK.shared.setErrorConfiguration(errorConfig)
Resource Management
Memory Management
let memoryConfig = MemoryConfiguration(
lowMemoryThreshold: 50 * 1024 * 1024, // 50 MB
criticalMemoryThreshold: 25 * 1024 * 1024, // 25 MB
cleanupCallback: {
// Perform cleanup
}
)
SquadSDK.shared.setMemoryConfiguration(memoryConfig)
Background Tasks
let backgroundConfig = BackgroundConfiguration(
allowedTasks: [.voiceCalls, .messageDelivery],
timeoutInterval: 30,
completionHandler: { result in
// Handle background task completion
}
)
SquadSDK.shared.setBackgroundConfiguration(backgroundConfig)
Advanced Configuration
Custom Event Handling
let eventConfig = EventConfiguration(
customEventHandler: { event in
switch event {
case .callStarted(let callId):
// Handle call start
case .callEnded(let callId, let duration):
// Handle call end
case .error(let error):
// Handle error
}
}
)
SquadSDK.shared.setEventConfiguration(eventConfig)
Debug Configuration
#if DEBUG
let debugConfig = DebugConfiguration(
logLevel: .debug,
networkLogging: true,
performanceMetrics: true,
screenshotEnabled: true
)
SquadSDK.shared.setDebugConfiguration(debugConfig)
#endif
Best Practices
-
Security
-
Always enable certificate pinning in production
- Use secure storage for sensitive data
-
Configure appropriate timeout values
-
Performance
-
Configure appropriate cache sizes
- Implement memory management
-
Handle background tasks efficiently
-
Error Handling
-
Configure comprehensive error handling
- Implement appropriate retry strategies
-
Log errors appropriately
-
Testing
- Use staging environment for testing
- Enable debug logging in development
- Test with various network conditions