70d8299df8
bundledBookJSONURLs() was relying solely on Bundle.urls(forResourcesWithExtension:subdirectory:), the directory- enumeration API. That API is observed to return empty in some on-device configurations even when the resource is present, which would cause seedBooks() to silently no-op and leave BookLibraryView showing "No Books" despite the JSON being bundled correctly. Switched to the same pattern textbook seeding uses: explicit per-slug Bundle.url(forResource:withExtension:) with a bundleURL.appending- PathComponent fallback. Directory enumeration is kept as a secondary so future books bundled without code changes still get picked up. Also added diagnostic prints to refreshBooksDataIfNeeded and the URL discovery step so device logs reveal what happened if seeding still falls through. Bumped bookDataVersion to 3 so existing installs re-trigger refreshBooksDataIfNeeded → seedBooks on next launch. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>