Platform Certification Testing Guide
Overview
Certification testing ensures games meet platform holder requirements (Sony TRC, Microsoft XR, Nintendo Guidelines). Failing certification delays launch and costs money—test thoroughly before submission.
Platform Requirements Overview
Major Platforms
| Platform |
Requirements Doc |
Submission Portal |
| PlayStation |
TRC (Technical Requirements Checklist) |
PlayStation Partners |
| Xbox |
XR (Xbox Requirements) |
Xbox Partner Center |
| Nintendo Switch |
Guidelines |
Nintendo Developer Portal |
| Steam |
Guidelines (less strict) |
Steamworks |
| iOS |
App Store Guidelines |
App Store Connect |
| Android |
Play Store Policies |
Google Play Console |
Common Certification Categories
Account and User Management
REQUIREMENT: User Switching
GIVEN user is playing game
WHEN system-level user switch occurs
THEN game handles transition gracefully
AND no data corruption
AND correct user data loads
REQUIREMENT: Guest Accounts
GIVEN guest user plays game
WHEN guest makes progress
THEN progress is not saved to other accounts
AND appropriate warnings displayed
REQUIREMENT: Parental Controls
GIVEN parental controls restrict content
WHEN restricted content is accessed
THEN content is blocked or modified
AND appropriate messaging shown
System Events
REQUIREMENT: Suspend/Resume (PS4/PS5)
GIVEN game is running
WHEN console enters rest mode
AND console wakes from rest mode
THEN game resumes correctly
AND network reconnects if needed
AND no audio/visual glitches
REQUIREMENT: Controller Disconnect
GIVEN player is in gameplay
WHEN controller battery dies
THEN game pauses immediately
AND reconnect prompt appears
AND gameplay resumes when connected
REQUIREMENT: Storage Full
GIVEN storage is nearly full
WHEN game attempts save
THEN graceful error handling
AND user informed of issue
AND no data corruption
Network Requirements
REQUIREMENT: PSN/Xbox Live Unavailable
GIVEN online features
WHEN platform network is unavailable
THEN offline features still work
AND appropriate error messages
AND no crashes
REQUIREMENT: Network Transition
GIVEN active online session
WHEN network connection lost
THEN graceful handling
AND reconnection attempted
AND user informed of status
REQUIREMENT: NAT Type Handling
GIVEN various NAT configurations
WHEN multiplayer is attempted
THEN appropriate feedback on connectivity
AND fallback options offered
Save Data
REQUIREMENT: Save Data Integrity
GIVEN save data exists
WHEN save is loaded
THEN data is validated
AND corrupted data handled gracefully
AND no crashes on invalid data
REQUIREMENT: Cloud Save Sync
GIVEN cloud saves enabled
WHEN save conflict occurs
THEN user chooses which to keep
AND no silent data loss
REQUIREMENT: Save Data Portability (PS4→PS5)
GIVEN save from previous generation
WHEN loaded on current generation
THEN data migrates correctly
AND no features lost
Platform-Specific Requirements
PlayStation (TRC)
| Requirement |
Description |
Priority |
| TRC R4010 |
Suspend/resume handling |
Critical |
| TRC R4037 |
User switching |
Critical |
| TRC R4062 |
Parental controls |
Critical |
| TRC R4103 |
PS VR comfort ratings |
VR only |
| TRC R4120 |
DualSense haptics standards |
PS5 |
| TRC R5102 |
PSN sign-in requirements |
Online |
Xbox (XR)
| Requirement |
Description |
Priority |
| XR-015 |
Title timeout handling |
Critical |
| XR-045 |
User sign-out handling |
Critical |
| XR-067 |
Active user requirement |
Critical |
| XR-074 |
Quick Resume support |
Series X/S |
| XR-115 |
Xbox Accessibility Guidelines |
Recommended |
Nintendo Switch
| Requirement |
Description |
Priority |
| Docked/Handheld |
Seamless transition |
Critical |
| Joy-Con detachment |
Controller handling |
Critical |
| Home button |
Immediate response |
Critical |
| Screenshots/Video |
Proper support |
Required |
| Sleep mode |
Resume correctly |
Critical |
Automated Test Examples
System Event Testing
// Unreal - Suspend/Resume Test
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FSuspendResumeTest,
"Certification.System.SuspendResume",
EAutomationTestFlags::ApplicationContextMask | EAutomationTestFlags::ProductFilter
)
bool FSuspendResumeTest::RunTest(const FString& Parameters)
{
// Get game state before suspend
FGameState StateBefore = GetCurrentGameState();
// Simulate suspend
FCoreDelegates::ApplicationWillEnterBackgroundDelegate.Broadcast();
// Simulate resume
FCoreDelegates::ApplicationHasEnteredForegroundDelegate.Broadcast();
// Verify state matches
FGameState StateAfter = GetCurrentGameState();
TestEqual("Player position preserved",
StateAfter.PlayerPosition, StateBefore.PlayerPosition);
TestEqual("Game progress preserved",
StateAfter.Progress, StateBefore.Progress);
return true;
}
// Unity - Controller Disconnect Test
[UnityTest]
public IEnumerator ControllerDisconnect_ShowsPauseMenu()
{
// Simulate gameplay
GameManager.Instance.StartGame();
yield return new WaitForSeconds(1f);
// Simulate controller disconnect
InputSystem.DisconnectDevice(Gamepad.current);
yield return null;
// Verify pause menu shown
Assert.IsTrue(PauseMenu.IsVisible, "Pause menu should appear");
Assert.IsTrue(Time.timeScale == 0, "Game should be paused");
// Simulate reconnect
InputSystem.ReconnectDevice(Gamepad.current);
yield return null;
// Verify prompt appears
Assert.IsTrue(ReconnectPrompt.IsVisible);
}
# Godot - Save Corruption Test
func test_corrupted_save_handling():
# Create corrupted save file
var file = FileAccess.open("user://save_corrupt.dat", FileAccess.WRITE)
file.store_string("CORRUPTED_GARBAGE_DATA")
file.close()
# Attempt to load
var result = SaveManager.load("save_corrupt")
# Should handle gracefully
assert_null(result, "Should return null for corrupted save")
assert_false(OS.has_feature("crashed"), "Should not crash")
# Should show user message
var message_shown = ErrorDisplay.current_message != ""
assert_true(message_shown, "Should inform user of corruption")
Pre-Submission Checklist
General Requirements
Platform Services
Accessibility (Increasingly Required)
Content Compliance
Common Certification Failures
| Issue |
Platform |
Fix |
| Home button delay |
All consoles |
Respond within required time |
| Controller timeout |
PlayStation |
Handle reactivation properly |
| Save on suspend |
PlayStation |
Don't save during suspend |
| User context loss |
Xbox |
Track active user correctly |
| Joy-Con drift |
Switch |
Proper deadzone handling |
| Background memory |
Mobile |
Release resources when backgrounded |
| Crash on corrupt data |
All |
Validate all loaded data |
Testing Matrix
Build Configurations to Test
| Configuration |
Scenarios |
| First boot |
No save data exists |
| Return user |
Save data present |
| Upgrade path |
Previous version save |
| Fresh install |
After uninstall |
| Low storage |
Minimum space available |
| Network offline |
No connectivity |
Hardware Variants
| Platform |
Variants to Test |
| PlayStation |
PS4, PS4 Pro, PS5 |
| Xbox |
One, One X, Series S, Series X |
| Switch |
Docked, Handheld, Lite |
| PC |
Min spec, recommended, high-end |
Best Practices
DO
- Read platform requirements document thoroughly
- Test on actual hardware, not just dev kits
- Automate certification test scenarios
- Submit with extra time for re-submission
- Document all edge case handling
- Test with real user accounts
DON'T
- Assume debug builds behave like retail
- Skip testing on oldest supported hardware
- Ignore platform-specific features
- Wait until last minute to test certification items
- Use placeholder content in submission build
- Skip testing with real platform services