This repo uses Git LFS to host compiled binaries.
SwiftServer exposes Swift functions to JS via NAPI/node-swift and handles all invocation of native Apple methods.
-
Transparent thread merging: iMessage has separate threads for each address/sender ID (email or phone #) but transparently merges threads belonging to the same contact in the UI. Texts app shows separate threads and performs no merging. Imagine if we had two threads, stevejobs@apple.com and sjobs@apple.com. When calling a deep link to select either thread, sometimes it'll select the thread in the sidebar, other times it'd create a new compose cell. The logic is unknown.

-
MessagesController.pasteFileInBodyField: On Big Sur, usingpasteboard.setString(fileURL.relativeString, forType: .fileURL)doesn't paste the file itself but a link. Monterey has intended behavior. -
elements.selectedThreadCellis nil after pin/unpin because no cells are selected.imessage://open?message-guid=will not select the thread in sidebar (elements.selectedThreadCell == nil) if it's already open butimessage://open?address=will. -
After
elements.searchFieldwas clicked:elements.conversationsListwill be nil, selected item in sidebar will not always be reflective of the messages list, calling a deep link will not update sidebar but only the messages list,CKLastSelectedItemIdentifierwon't be updated.
# for debugging:
rm binaries/*/libNodeAPI.dylib # needed only when you get ENOENT
bun run build-swift --debug --watch
# for shipping to prod:
bun run build-swiftnode src/SwiftServer/test-script.js
electron src/SwiftServer/test-script.js