Files
Matthew Raymer a71fb2fd67 feat(ios)!: implement iOS parity with BGTaskScheduler + UNUserNotificationCenter
- Add complete iOS plugin implementation with BGTaskScheduler integration
- Implement Core Data model mirroring Android SQLite schema (ContentCache, Schedule, Callback, History)
- Add background task handlers for content fetch and notification delivery
- Implement TTL-at-fire logic with Core Data persistence
- Add callback management with HTTP and local callback support
- Include comprehensive error handling and structured logging
- Add Info.plist configuration for background tasks and permissions
- Support for dual scheduling with BGAppRefreshTask and BGProcessingTask

BREAKING CHANGE: iOS implementation requires iOS 13.0+ and background task permissions
2025-09-22 09:39:54 +00:00

40 lines
3.2 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="21754" systemVersion="22G120" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
<entity name="Callback" representedClassName="Callback" syncable="YES" codeGenerationType="class">
<attribute name="createdAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
<attribute name="enabled" optional="YES" attributeType="Boolean" defaultValueString="YES" usesScalarValueType="YES"/>
<attribute name="headersJson" optional="YES" attributeType="String"/>
<attribute name="id" optional="YES" attributeType="String"/>
<attribute name="kind" optional="YES" attributeType="String"/>
<attribute name="target" optional="YES" attributeType="String"/>
</entity>
<entity name="ContentCache" representedClassName="ContentCache" syncable="YES" codeGenerationType="class">
<attribute name="fetchedAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
<attribute name="id" optional="YES" attributeType="String"/>
<attribute name="meta" optional="YES" attributeType="String"/>
<attribute name="payload" optional="YES" attributeType="Binary"/>
<attribute name="ttlSeconds" optional="YES" attributeType="Integer 32" defaultValueString="3600" usesScalarValueType="YES"/>
</entity>
<entity name="History" representedClassName="History" syncable="YES" codeGenerationType="class">
<attribute name="diagJson" optional="YES" attributeType="String"/>
<attribute name="durationMs" optional="YES" attributeType="Integer 32" defaultValueString="0" usesScalarValueType="YES"/>
<attribute name="id" optional="YES" attributeType="String"/>
<attribute name="kind" optional="YES" attributeType="String"/>
<attribute name="occurredAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
<attribute name="outcome" optional="YES" attributeType="String"/>
<attribute name="refId" optional="YES" attributeType="String"/>
</entity>
<entity name="Schedule" representedClassName="Schedule" syncable="YES" codeGenerationType="class">
<attribute name="backoffPolicy" optional="YES" attributeType="String" defaultValueString="exp"/>
<attribute name="clockTime" optional="YES" attributeType="String"/>
<attribute name="cron" optional="YES" attributeType="String"/>
<attribute name="enabled" optional="YES" attributeType="Boolean" defaultValueString="YES" usesScalarValueType="YES"/>
<attribute name="id" optional="YES" attributeType="String"/>
<attribute name="jitterMs" optional="YES" attributeType="Integer 32" defaultValueString="0" usesScalarValueType="YES"/>
<attribute name="kind" optional="YES" attributeType="String"/>
<attribute name="lastRunAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
<attribute name="nextRunAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
<attribute name="stateJson" optional="YES" attributeType="String"/>
</entity>
</model>