Skip to main content

Project Ganymede

2023-11-22โ€‹

  • There was a property in MSMessage of shouldExpire. The problem is, the recipient can override to keep the message, what we don't want.
  • Implemented Message Reading Functionality
  • Implemented Proper Loading View features, with fade in and fade out.

D7D1B8.gif

  • Refactored a lot of files
Callisto
โ”œโ”€โ”€ Assets.xcassets
โ”‚ โ”œโ”€โ”€ Contents.json
โ”‚ โ””โ”€โ”€ iMessage App Icon.stickersiconset
โ”‚ โ””โ”€โ”€ Contents.json
โ”œโ”€โ”€ Base.lproj
โ”‚ โ””โ”€โ”€ MainInterface.storyboard
โ”œโ”€โ”€ Callisto.entitlements
โ”œโ”€โ”€ CallistoLoadingView.swift
โ”œโ”€โ”€ CallistoMessageReadingView.swift
โ”œโ”€โ”€ CallistoMessageWritingView.swift
โ”œโ”€โ”€ CallistoService.swift
โ”œโ”€โ”€ CallistoView.swift
โ”œโ”€โ”€ Info.plist
โ””โ”€โ”€ MessagesViewController.swift

2023-11-18โ€‹

  • Linked the client side to
    • make request to server
    • pack it as MSMessage
    • send the message
    • dismiss keyboard & request compact presentation style
  • Pink Bubble?

61B318.jpg

2023-11-13โ€‹

FCAC15.png

When Test Failsโ€‹

  • Refuses to Deploy

656236.png

When Test Passesโ€‹

  • Deploys

C53193.png

2023-11-11โ€‹

Used Prisma, Prisma Accelerate, PlanetScale, and Cloudflare Workers to create a simple server for the Ganymede Table Structure. Prisma layer makes 3 requests to the DB per 1 request to the server, albeit it probably would hit the Prisma Accelerate Layer, we can later optimize it with this document.

Composing Messages with 3 People Group Chat (Writer, Reader 1, Reader 2)โ€‹

7A1B12.png

When the Writer Tries to Read (Invalid)โ€‹

E2FC5B.png

When the Reader Tries to Read (Valid)โ€‹

111134.png

When the Reader Re-requests to Read (Invalid)โ€‹

40A9E9.png

When Another Reader Requests to Read (Valid)โ€‹

14FF06.png

When an Unauthorized User Requests to Read (Invalid)โ€‹

A9C91C.png

Alsoโ€‹

2023-11-10โ€‹

2229DC.gif

2023-11-08โ€‹

  • It is possible to limit iMessage forwarding for iMessage Extensions
  • It is possible to mark the iMessage with LocalParticipantIdentifier
  • LocalParticipantIdentifier is different on all devices
  • The simplest way would be marking:
    • Set LocalParticipantIdentifier to true on reading (on the server)
    • Reject if LocalParticipantIdentifier is already true
  • Problem: If the user deletes and reinstalls the app, LocalParticipantIdentifier changes. So the user can read unlimited times if the uninstall & reinstall
  • Mitigation: Assign UUID for each message. Each message will have LocalParticipantIdentifier + RemoteParticipantIdentifiers count as the maxRead. This will at least 'limit' the max read count.
  • Problem: on a Group Chat setting, a user can read unlimited times instead of another participant.
  • Solution: Sign in with Apple?!

2023-10-20โ€‹

Can attach many images

8A52BA.png

2023-10-19โ€‹

E19673.png

A09B56.png

2023-10-16โ€‹

885554.png

2023-10-13โ€‹

I figured out that in iOS 17, Shortcuts can send messages without confirmation. Can we use this for Send Separately or Ganymede?

2023-10-12โ€‹

  • Read notifications
  • Screenshot notifications
  • Broadcast
  • App Clip + Apple Login?
  • Therefore, we name it Project Ganymede. You can NEVER win Apple. It is the most massive system, just like Jupiter. Therefore, we choose to become a moon. The moon of Jupiter. And a moon can be bigger than planets. Ganymede is bigger than Mercury.

2023-10-09โ€‹

I finished some working prototypes. Some concerns: It seems like the transcript MSMessage is an immutable object. We might consider server approaches, such as KV storage.

B89B94.gif

I don't want to store any encrypted or decrypted messages on the server. So we can consider something as:

  • When sending a message
  • When reading the message
    • extract UUID and encrypted message
    • read KV with UUID and delete the DecryptKey if any necessary condition is met
    • once it expired, the user cannot read the message again

Considerationsโ€‹

  • How do you store different strategies (After 5 seconds? 10 seconds? 15 seconds?)
  • Group chats
  • Photo / Video Payload
  • Screenshot detections and notifications

Prehistoricโ€‹