- The Paradoxical Moon Philosophy
- Send Separately
- Callisto is the code name for MessagesExtension
- Europa is the code name for Encryption Key Exchange Server
- There was a property in
MSMessageof 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.
- Refactored a lot of files
│ ├── Contents.json
│ └── iMessage App Icon.stickersiconset
│ └── Contents.json
│ └── MainInterface.storyboard
- Linked the client side to
- make request to server
- pack it as
- send the message
- dismiss keyboard & request compact presentation style
- Pink Bubble?
- Implemented Vitest on Prisma and Cloudflare Workers
- It would be boring to name tests like "A texts B, then C tries to read it" or so, right?
When Test Fails
- Refuses to Deploy
When Test Passes
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)
When the Writer Tries to Read (Invalid)
When the Reader Tries to Read (Valid)
When the Reader Re-requests to Read (Invalid)
When Another Reader Requests to Read (Valid)
When an Unauthorized User Requests to Read (Invalid)
- Finished reading the Apple Sign-In UUID from the iMessage App side: had to use App Groups and UserDefaults
- It is possible to limit iMessage forwarding for iMessage Extensions
- It is possible to mark the iMessage with
LocalParticipantIdentifieris different on all devices
- The simplest way would be marking:
trueon reading (on the server)
- Reject if
- Problem: If the user deletes and reinstalls the app,
LocalParticipantIdentifierchanges. So the user can read unlimited times if the uninstall & reinstall
- Mitigation: Assign UUID for each message. Each message will have
LocalParticipantIdentifier + RemoteParticipantIdentifierscount 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?!
Can attach many images
- SwiftUI Metal Shader Effects - iOS 17 - WWDC 2023
- Embed the Photos Picker in your app - WWDC23 - Videos - Apple Developer
- Burn Paper with a Single Shader | Blender Tutorial
- Read notifications
- Screenshot notifications
- 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.
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.
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
- How do you store different strategies (After 5 seconds? 10 seconds? 15 seconds?)
- Group chats
- Photo / Video Payload
- Screenshot detections and notifications