Skip to content

Add movie and series App Intents entities, iOS 27 Siri open and search, and Spotlight links - #797

Open
tillkruss wants to merge 4 commits into
developfrom
claude/app-entities-spotlight
Open

tillkruss wants to merge 4 commits into
developfrom
claude/app-entities-spotlight

Conversation

@tillkruss

@tillkruss tillkruss commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

Split out of #796 so the small part can merge first. The Shortcuts automations (Add Movie / Add Series, automatic searches, upcoming releases) follow in claude/shortcuts-automations, which is stacked on this branch and also carries the shared quality profile and root folder fallback for the add forms.

Changes

  • Movie and series App Intents entities (IndexedEntity) with a string query, usable as Shortcuts parameters
  • Open Movie / Open Series intents on the iOS 27 and macOS 27 .system.open schema
  • One search intent on the iOS 27 .system.searchInApp schema for movies and TV. The system allows only one per app and passes only the search term, so it searches series when the Series tab is selected and movies otherwise, on the same lookup screens as the existing Search intents. The existing Search intents stay as they are so saved shortcuts keep their Title parameter
  • Movie and series entities export their title, year and overview as plain text (Transferable), and the detail screens carry their entity identifier (appEntityIdentifier) on all architectures, so Siri can use the movie or series on screen
  • Spotlight items are associated with their entity
  • Spotlight identifiers keep the existing <kind>:<id>:<instance> format, so already indexed items still open; parsing no longer traps on an item without an instance
  • Entity titles are shown as-is instead of being looked up as string catalog keys

Strings

Six new keys: "%@", "Downloaded Episodes", "IMDb ID", "Size on Disk", "TMDB ID", "TVDB ID". The schema intents take their titles from the system. Checked against xcodebuild -exportLocalizations: nothing extracted is missing from the catalog.

Spotlight

Existing indexes pick up the entity association on the first library load after updating: the index checksum includes CFBundleVersion, which Xcode Cloud bumps for every TestFlight and App Store build. Local builds stay on build 1, so they only re-index when the library changes.

Testing

  • Rebased on develop and built with Xcode 27.1: macOS (arm64 and x86_64) and the iOS 27.2 simulator succeed, macOS tests pass
  • The App Intents metadata contains both entities (exporting public.plain-text), both Open intents and the search intent
  • CI runs Xcode 26.6, which skips the iOS 27 schema intents (#if compiler(>=6.4)). CodeQL fails there because the Xcode 26.6 macOS SDK has no appEntityIdentifier for x86_64, the same SDK gap that fails develop's CodeQL on visibilityPriority
  • Still to check on a device:
    • Tapping a Spotlight result on iOS 26 and iOS 27 opens the movie or series now that items carry an associated entity
    • "Search for … in Ruddarr" on iOS 27 opens the lookup with the term
    • Asking Siri about the movie or series on screen gets its title and overview

🤖 Generated with Claude Code

https://claude.ai/code/session_01MYjz4m99QND1JidaanYFU5

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-07T17:11:17.281626Z 97515dd PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 97515dd65d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

try await index.indexSearchableItems(
entities[start..<end].map {
$0.searchableItem(poster: images[$0.id] ?? nil)
$0.searchableItem(poster: images[$0.id] ?? nil, instance: instance)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Invalidate cached Spotlight indexes for entity associations

For an existing installation whose library metadata has not changed, the persisted checksum matches and index returns at line 25 before this new searchableItem(..., instance:) path associates entities. The checksum only incorporates each media item's unchanged searchableHash and CFBundleVersion, while the project continues to use CURRENT_PROJECT_VERSION = 1 across marketing-version bumps, so upgrading alone does not reliably invalidate it. Add an index-schema version to the checksum or explicitly clear the stored checksums so existing Spotlight items receive the new App Entity association.

Useful? React with 👍 / 👎.

- Movie and series entities with a string query, usable as Shortcuts parameters
- Open Movie / Open Series intents on the iOS 27 system open schema
- Spotlight items are associated with their entity; identifiers keep the
  existing <kind>:<id>:<instance> format and parsing no longer traps on a
  missing instance
- On-screen entity identifiers on the movie and series detail screens
@tillkruss
tillkruss force-pushed the claude/app-entities-spotlight branch from 16ecfc5 to b54e2b5 Compare November 4, 2026 16:56
LocalizedStringResource(stringLiteral:) treats a movie or series title as a
catalog key, so a title that matches a key (e.g. "Missing") would show its
translation. Interpolating it uses the "%@" key with the title as argument.
- One .system.searchInApp intent covers movies and TV: the system allows a
  single one per app and only passes the search term, so it searches series
  when the Series tab is selected and movies otherwise, on the same lookup
  screens as the existing Search intents
- Movie and series entities export their title, year and overview as plain
  text, so Siri can use the movie or series on screen
@tillkruss
tillkruss force-pushed the claude/app-entities-spotlight branch from b54e2b5 to 9bdfe96 Compare November 4, 2026 17:19
@tillkruss tillkruss changed the title Add movie and series App Intents entities and link Spotlight items Add movie and series App Intents entities, iOS 27 Siri open and search, and Spotlight links Nov 4, 2026
@tillkruss
tillkruss added this pull request to stack #856 November 4, 2026 19:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant