Settings.bundle in tvOS 15.0 seems to no longer work.

I have an App that builds for iOS, iPadOS, macOS and Apple TV, which was last released to all the App Stores in April. Preferences/settings are handled by the App itself except for the Apple TV variant, where I use a Settings bundle. This worked fine until tvOS 15.0, where it appears that tvOS is not updating the value of the App’s settings from NSUserDefaults when the Settings App opens. I have been working on this problem off and on for the last week and am at wits end.

I’ve searched WWDC videos looking for a clue, there must be some simple change I cannot see. I’ve made clean projects for iOS and tvOS, and using the identical OBJ-C code and Settings plist entries, the iOS version works perfectly, the tvOS version fails in the simulator and on the device. I am not trying to synchronize Settings across devices, just persist across restarts on a single device.

My code stores data correctly in NSUserDefaults, it simply seems that tvOS Settings App is not reading values from there for display, nor writing changes that the user makes from Settings back to user defaults. None of the types in the test projects work: TexField, Switch, Title.

The test code is so simple I hesitate to include it, but the code and the NSUserDefaults key identifiers do match. This code will preset my App’s version number for Settings to display in iOS 15 but not tvOS 15. It used to work in tvOS 14:

			<key>DefaultValue</key>
			<string>DefaultVersionValue</string>
			<key>Type</key>
			<string>PSTitleValueSpecifier</string>
			<key>Title</key>
			<string>Version</string>
			<key>Key</key>
			<string>VersionKey</string>
		</dict>


```   NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
   [ud registerDefaults:@{
     @"TextFieldKey" : @"TextFieldValue",
     @"VersionKey" : @"VersionValue"
   }];
   
   [ud setObject:@"3.14" forKey:@"VersionKey"];


Any idea? Many thanks.

  • I have a small Xcode project with two targets: tvOS and iOS. The iOS build works on the simulator and device. The tvOS build works on the simulator but not a device running tv OS 15. It does work properly on a tvOS 14 device.

    [SettingsTestFail.zip)

    When run all the code does it store an NSUserdefaults value which is then displayed in a UILabel. This value should be reflected in the Settings App for the test App, SettingsTest. The value will match what is diplayed for iOS, tvOS simulator, but not tvOS device.

  • Hmmmm, guess I cannot post a URL to the Xcode project? How do I do that ...

  • Sample project which runs perfectly on iOS 14/15 on simulator and device, fails on tvOS 15 on device only, else works on simulator, and for tvOS 14 works on device and simulator:

    secureHTTP / www dot bigcatos dot com / Downloads / SettingsTestFail.zip

Add a Comment