iOS设备PerformFetch未执行问题求助
First off, this is not normal behavior—even though iOS decides when to run background fetch based on usage patterns, a 3-day gap indicates the system is actively blocking your app from performing background fetches, rather than just deprioritizing it. The key clue here is your device logs showing ApplicationPolicy returning Must Not Proceed with a score of 0.00, which means iOS's policy engine is explicitly preventing your app's background fetch from running.
Let’s break down the likely causes and actionable steps to resolve this:
1. Verify Background Refresh Permissions
Double-check that your app has the necessary permissions enabled:
- Go to Settings > General > Background App Refresh
- Ensure the global "Background App Refresh" toggle is on, and your app's individual toggle is also enabled
- Sometimes permissions can get reset accidentally (e.g., after an iOS update), so confirming this is the first critical step.
2. Check Battery Optimization & Low Power Mode
iOS restricts background activity heavily when battery is low or optimized:
- Disable Low Power Mode (Settings > Battery) if it’s enabled—this immediately cuts back on non-critical background tasks
- Go to Settings > Battery > Battery Health & Charging > Background Activity and confirm your app isn’t restricted from running in the background
- Avoid leaving the device in a low-battery state for extended periods, as this amplifies background activity restrictions.
3. App Usage Frequency is the Biggest Factor
You mentioned your previous high-usage apps worked fine—and that’s the key. iOS’s Duet Activity Scheduler (the dasd process in your logs) prioritizes apps users interact with regularly. If this app is rarely opened, iOS will drastically reduce or stop background fetch attempts to save battery.
To test this:
- Open your app multiple times over a few hours, use it for a minute each time
- Leave the device plugged in (charging removes some battery-related restrictions)
- Check if background fetch starts triggering after this increased usage.
4. Device Storage Constraints
If your iPad is low on storage, iOS will block non-essential background activity to free up resources. Go to Settings > General > iPad Storage to check if you have at least a few gigabytes of free space. Low storage is a common, easy-to-miss cause for blocked background tasks.
5. Validate Code Execution on Real Device
While your simulator tests work, confirm the code actually runs on a real device when triggered manually:
- Connect your iPad to Xcode
- Go to Debug > Simulate Background Fetch
- Check MS App Center to see if the fetch events are logged. This will rule out any device-specific code issues that aren’t showing up in the simulator.
6. Check for Conflicting Background Modes
If your app uses other background modes (e.g., location updates, VoIP, push notifications), these might be competing for system resources. Ensure you’re only declaring the background modes your app actually needs in Info.plist—unnecessary modes can lead to the system deprioritizing your app.
Final Note
The Must Not Proceed decision from ApplicationPolicy is a clear signal that iOS has flagged your app for restricted background activity. This is almost always tied to usage patterns, permissions, or battery/storage constraints—not a code issue (since your simulator tests work). Focus on the steps above, especially increasing app usage and verifying permissions, and you should see background fetch start working again.
内容的提问来源于stack exchange,提问作者empo

