Search Issue Tracker
By Design
Votes
0
Found in
2018.4.0f1
2018.4.4f1
2019.1.0a1
2019.2.0a1
2019.3.0a1
Issue ID
1172298
Regression
No
[iOS] OnApplicationPause() is not called if "Behaviour in Background" is set to "Custom"
How to reproduce:
1. Open the "PauseRepro.zip" project
2. Switch platform to iOS
3. In the Player settings, set "Behaviour in Background" to "Custom"
4. Build & Launch the app on device
5. Swap the app to background
Actual result: OnApplicationPause() callback doesn't get called and "Pause called" isn't logged into the console.
Expected result: OnApplicationPause() callback gets called and "Pause called" is logged into the console.
Reproducible with: 2019.3.0a11, 2019.2.1f1, 2019.1.14f1, 2018.4.6f1, 2017.4.30f1.
Tested with:
-iPhone 7 (iOS 10.2)
Notes:
- When Behaviour in Background is set to "Custom" the player gets paused when in background.
- Right now this behaviour is set by design, but the callback should get called since the application gets paused.
Add comment
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
Latest issues
- Articulation Body with 'Revolute' Joint Type has erratic behavior when Upper Limit is set to above 360
- WebGL Player fails to render Scene when Terrain with Detail Mesh is added and WebGPU Graphics API is used
- Inconsistent errors are logged when different types are passed into the Query "Q<>" method in UIToolkit and the ancestor VisualElement is null
- Crash on GetMaterialPropertyByIndex when opening a specific Scene
- Discrepancies in the styling are present when using a TSS file instead of a USS file in custom EditorWindow
Resolution Note:
Setting "Behaviour in Background" to "Custom" prevents Unity from pausing so that the Unity loop could be executed native plugins by calling `UnityBatchPlayerLoop` (see https://bitbucket.org/Unity-Technologies/iosnativecodesamples/src/ae6a0a2c02363d35f954d244a6eec91c0e0bf194/NativeIntegration/BackgroundTasks/BackgroundFetch/?at=5.0-dev).
If you don't need to run anything directly in Unity while the app is in background you can add the info.plist key you need from an editor post-processor scripts, in that case you should still pause normally. Something like this should work:
[PostProcessBuild]
public static void OnPostprocessBuild (BuildTarget buildTarget, string path)
{
#if PLATFORM_IOS
if (buildTarget == BuildTarget.iOS) {
var plistPath = path + "/Info.plist";
var plist = new PlistDocument();
plist.ReadFromString(File.ReadAllText(plistPath));
// Get root
var rootDict = plist.root;
PlistElementArray currentBacgkgroundModes = (PlistElementArray) rootDict["UIBackgroundModes"];
if (currentBacgkgroundModes == null)
currentBacgkgroundModes = rootDict.CreateArray("UIBackgroundModes");
}
currentBacgkgroundModes.AddString("fetch");
// Write to file
File.WriteAllText(plistPath, plist.WriteToString());
}
}