[GH-ISSUE #4] iOS app #3

Closed
opened 2026-05-07 00:17:41 +02:00 by BreizhHardware · 71 comments

Originally created by @binwiederhier on GitHub (Nov 18, 2021).
Original GitHub issue: https://github.com/binwiederhier/ntfy/issues/4

If you're interested in making an iOS app, I'm more than happy to help out. Unfortunately I don't have an iPhone or a Mac so it's a little tricky for me.

Significant work has been done here (https://github.com/Copephobia/ntfy-ios), but it's stale now, sadly.

I have picked up the work in https://github.com/binwiederhier/ntfy-ios and will hopefully be able to release soon.

Originally created by @binwiederhier on GitHub (Nov 18, 2021). Original GitHub issue: https://github.com/binwiederhier/ntfy/issues/4 ~If you're interested in making an iOS app, I'm more than happy to help out. Unfortunately I don't have an iPhone or a Mac so it's a little tricky for me.~ ~Significant work has been done here (https://github.com/Copephobia/ntfy-ios), but it's stale now, sadly.~ I have picked up the work in https://github.com/binwiederhier/ntfy-ios and will hopefully be able to release soon.
Author
Owner

@Copephobia commented on GitHub (Nov 29, 2021):

I am working on the iOS app for ntfy, in case github cannot assign the issue to me.

<!-- gh-comment-id:982054188 --> @Copephobia commented on GitHub (Nov 29, 2021): I am working on the iOS app for ntfy, in case github cannot assign the issue to me.
Author
Owner

@binwiederhier commented on GitHub (Dec 17, 2021):

Hey @Copephobia, can you give an update of how it's going? Need any help?

<!-- gh-comment-id:996302807 --> @binwiederhier commented on GitHub (Dec 17, 2021): Hey @Copephobia, can you give an update of how it's going? Need any help?
Author
Owner

@binwiederhier commented on GitHub (Jan 16, 2022):

Sadly I haven't heard from @Copephobia in weeks, so I don't think it'll happen :-(

I'm gonna go looking for an iOS dev.

<!-- gh-comment-id:1013873913 --> @binwiederhier commented on GitHub (Jan 16, 2022): Sadly I haven't heard from @Copephobia in weeks, so I don't think it'll happen :-( I'm gonna go looking for an iOS dev.
Author
Owner

@binwiederhier commented on GitHub (Jan 16, 2022):

For the iOS app I'd love at least basic messages with firebase for ntfy.sh. i think that should be possible hopefully. Whether or not and to what extent other features are supported we'll have to see. But for now I can't even find anyone to do the iOS basic app.

<!-- gh-comment-id:1013913782 --> @binwiederhier commented on GitHub (Jan 16, 2022): For the iOS app I'd love at least basic messages with firebase for ntfy.sh. i think that should be possible hopefully. Whether or not and to what extent other features are supported we'll have to see. But for now I can't even find anyone to do the iOS basic app.
Author
Owner

@Copephobia commented on GitHub (Jan 19, 2022):

Current work towards iOS, feel free to follow along: https://github.com/Copephobia/ntfy-ios

(Relevant macOS development branch: https://github.com/Copephobia/ntfy/tree/macos-development)

<!-- gh-comment-id:1016019049 --> @Copephobia commented on GitHub (Jan 19, 2022): Current work towards iOS, feel free to follow along: https://github.com/Copephobia/ntfy-ios (Relevant macOS development branch: https://github.com/Copephobia/ntfy/tree/macos-development)
Author
Owner

@binwiederhier commented on GitHub (Feb 7, 2022):

For transparency, here's the contents of the Discord #ios channel. That room is now bridged to Matrix as well: https://matrix.to/#/#ntfy-ios:matrix.org

220207 14-50-09 Selection 001

220207 14-50-20 Selection 001

220207 14-50-31 Selection 001

220207 14-50-42 Selection 001

220207 14-50-53 Selection 001

<!-- gh-comment-id:1031906765 --> @binwiederhier commented on GitHub (Feb 7, 2022): For transparency, here's the contents of the Discord #ios channel. That room is now bridged to Matrix as well: https://matrix.to/#/#ntfy-ios:matrix.org ![220207 14-50-09 Selection 001](https://user-images.githubusercontent.com/664597/152869496-bf3186e5-e55e-4ae5-b2f1-29a7a992c243.png) ![220207 14-50-20 Selection 001](https://user-images.githubusercontent.com/664597/152869507-aac470fa-ba73-4e95-bdc7-fff03620b6dc.png) ![220207 14-50-31 Selection 001](https://user-images.githubusercontent.com/664597/152869518-10dfdaa0-a1e4-4739-85bf-15bfcf717cc9.png) ![220207 14-50-42 Selection 001](https://user-images.githubusercontent.com/664597/152869533-39c75bc5-6fa4-4acb-bf53-115d65d575e1.png) ![220207 14-50-53 Selection 001](https://user-images.githubusercontent.com/664597/152869557-56013bd7-4471-4bd6-94df-4325b5b70096.png)
Author
Owner

@binwiederhier commented on GitHub (Apr 12, 2022):

📢 Update: Sadly work has been stale for over a month now, and I'm not sure when/if it'll be picked up again. If anyone else is interested in continuing the work, please feel free to do so. Maybe I'll buy a Mac at some point.

<!-- gh-comment-id:1095817660 --> @binwiederhier commented on GitHub (Apr 12, 2022): :loudspeaker: **Update: Sadly work has been stale for over a month now,** and I'm not sure when/if it'll be picked up again. If anyone else is interested in continuing the work, please feel free to do so. Maybe I'll buy a Mac at some point.
Author
Owner

@easrng commented on GitHub (Apr 22, 2022):

Here's an iOS Shortcut that checks for new ntfy notifications and shows them. Unfortunately you can't have a Shortcut run on a fixed interval, only on manually added times (ex. you can set a Shortcut to run every day at 2pm, but not every 5 minutes) so if you want it to check automatically you're going to be adding a LOT of automations. It supports titles, messages, and turns off sound for low-priority notifications.

<!-- gh-comment-id:1106004638 --> @easrng commented on GitHub (Apr 22, 2022): [Here's](https://www.icloud.com/shortcuts/0436305ef0424526bc1027d3068a01ef) an iOS Shortcut that checks for new ntfy notifications and shows them. Unfortunately you can't have a Shortcut run on a fixed interval, only on manually added times (ex. you can set a Shortcut to run every day at 2pm, but not every 5 minutes) so if you want it to check automatically you're going to be adding a LOT of automations. It supports titles, messages, and turns off sound for low-priority notifications.
Author
Owner

@lylebrown commented on GitHub (May 4, 2022):

Here's an iOS Shortcut that checks for new ntfy notifications and shows them. Unfortunately you can't have a Shortcut run on a fixed interval, only on manually added times (ex. you can set a Shortcut to run every day at 2pm, but not every 5 minutes) so if you want it to check automatically you're going to be adding a LOT of automations. It supports titles, messages, and turns off sound for low-priority notifications.

I would love to be proven incorrect, but doesn't iOS require the device to be unlocked (as in, the screen turned on and not on the lock screen) for shortcuts to run?

<!-- gh-comment-id:1117840814 --> @lylebrown commented on GitHub (May 4, 2022): > [Here's](https://www.icloud.com/shortcuts/0436305ef0424526bc1027d3068a01ef) an iOS Shortcut that checks for new ntfy notifications and shows them. Unfortunately you can't have a Shortcut run on a fixed interval, only on manually added times (ex. you can set a Shortcut to run every day at 2pm, but not every 5 minutes) so if you want it to check automatically you're going to be adding a LOT of automations. It supports titles, messages, and turns off sound for low-priority notifications. I would love to be proven incorrect, but doesn't iOS require the device to be unlocked (as in, the screen turned on and not on the lock screen) for shortcuts to run?
Author
Owner

@g-a-c commented on GitHub (May 5, 2022):

Here's an iOS Shortcut that checks for new ntfy notifications and shows them. Unfortunately you can't have a Shortcut run on a fixed interval, only on manually added times (ex. you can set a Shortcut to run every day at 2pm, but not every 5 minutes) so if you want it to check automatically you're going to be adding a LOT of automations. It supports titles, messages, and turns off sound for low-priority notifications.

I would love to be proven incorrect, but doesn't iOS require the device to be unlocked (as in, the screen turned on and not on the lock screen) for shortcuts to run?

I don't think this is true - I have a Shortcut that opens Spotify when my phone connects to my in-car entertainment via Bluetooth, and this will usually fire with my phone in my pocket. I say "usually" because sometimes Spotify doesn't actually open, but even when Spotify isn't opened I still get the notification that the Shortcut was executed.

<!-- gh-comment-id:1118636574 --> @g-a-c commented on GitHub (May 5, 2022): > > [Here's](https://www.icloud.com/shortcuts/0436305ef0424526bc1027d3068a01ef) an iOS Shortcut that checks for new ntfy notifications and shows them. Unfortunately you can't have a Shortcut run on a fixed interval, only on manually added times (ex. you can set a Shortcut to run every day at 2pm, but not every 5 minutes) so if you want it to check automatically you're going to be adding a LOT of automations. It supports titles, messages, and turns off sound for low-priority notifications. > > I would love to be proven incorrect, but doesn't iOS require the device to be unlocked (as in, the screen turned on and not on the lock screen) for shortcuts to run? I don't think this is true - I have a Shortcut that opens Spotify when my phone connects to my in-car entertainment via Bluetooth, and this will usually fire with my phone in my pocket. I say "usually" because sometimes Spotify doesn't actually open, but even when Spotify isn't opened I still get the notification that the Shortcut was executed.
Author
Owner

@Seji64 commented on GitHub (May 5, 2022):

Hello,
happened to come across this issue as I would like to use ntfy on iOS.

So I took a look at the iOS code (https://github.com/Copephobia/ntfy-ios). As I see it, the app is practically ready. I think the problem why the development was stopped is that Copephobia probably didn't find a good solution for the notifications. I thought about the problem and wondered how Mastadon solved it.

Because here each instance is self-hosted and yet the notification works via a central official app. I came across the various proxy's / relay's (such as https://github.com/DagAgren/toot-relay). I think this could solve the whole thing quite elegantl. Sorry if I now come here with an 'idea' that was already known to all of you - did not want to be the wise guy - just give a hint or help.

A good explanation how this all works i found here

is ntfy already capable to send such notification to a push relay?

<!-- gh-comment-id:1118844140 --> @Seji64 commented on GitHub (May 5, 2022): Hello, happened to come across this issue as I would like to use ntfy on iOS. So I took a look at the iOS code ([https://github.com/Copephobia/ntfy-ios](https://github.com/Copephobia/ntfy-ios)). As I see it, the app is practically ready. I think the problem why the development was stopped is that Copephobia probably didn't find a good solution for the notifications. I thought about the problem and wondered how Mastadon solved it. Because here each instance is self-hosted and yet the notification works via a central official app. I came across the various proxy's / relay's (such as [https://github.com/DagAgren/toot-relay](https://github.com/DagAgren/toot-relay)). I think this could solve the whole thing quite elegantl. Sorry if I now come here with an 'idea' that was already known to all of you - did not want to be the wise guy - just give a hint or help. A good explanation how this all works i found [here](https://github.com/Big-Fig/toot-relay-fcm#how-it-works=) is ntfy already capable to send such notification to a push relay?
Author
Owner

@binwiederhier commented on GitHub (May 5, 2022):

Thank you for looking at the code! I am actually beginning to see if I can borrow and get a Mac from somewhere so I can learn Swift and all that myself. But I'm always happy to have someone else look or take over. I bet that'd be much quicker than me learning how to use a Mac, iOS, and Swift :-D

So @Copephobia and I actually found a solution already for this problem. We talked about a poll_request message over FCM, which basically just instructs the phone to poll from a selfhosted server. There are some notes about this in the (now closed) pull request (https://github.com/binwiederhier/ntfy/pull/152). I'll look at the relay/proxy you linked though. Maybe they had a better idea :-D

<!-- gh-comment-id:1118849044 --> @binwiederhier commented on GitHub (May 5, 2022): Thank you for looking at the code! I am actually beginning to see if I can borrow and get a Mac from somewhere so I can learn Swift and all that myself. But I'm always happy to have someone else look or take over. I bet that'd be much quicker than me learning how to use a Mac, iOS, and Swift :-D So @Copephobia and I actually found a solution already for this problem. We talked about a `poll_request` message over FCM, which basically just instructs the phone to poll from a selfhosted server. There are some notes about this in the (now closed) pull request (https://github.com/binwiederhier/ntfy/pull/152). I'll look at the relay/proxy you linked though. Maybe they had a better idea :-D
Author
Owner

@Seji64 commented on GitHub (May 5, 2022):

I have a mac - so if i can help out - let me know. The problem is that I also have to learn swift ... :-/

<!-- gh-comment-id:1118851971 --> @Seji64 commented on GitHub (May 5, 2022): I have a mac - so if i can help out - let me know. The problem is that I also have to learn swift ... :-/
Author
Owner

@binwiederhier commented on GitHub (May 5, 2022):

@Seji64 If you wanna give it a shot I'm not gonna say no. :-D But I also don't blame you if you didn't want to. It's a lot of work.

<!-- gh-comment-id:1118867857 --> @binwiederhier commented on GitHub (May 5, 2022): @Seji64 If you wanna give it a shot I'm not gonna say no. :-D But I also don't blame you if you didn't want to. It's a lot of work.
Author
Owner

@binwiederhier commented on GitHub (May 6, 2022):

My company has loaned me an old 2017 Macbook. After the next Android and server release, I am going to give the iOS app a go.

<!-- gh-comment-id:1119164348 --> @binwiederhier commented on GitHub (May 6, 2022): My company has loaned me an old 2017 Macbook. After the next Android and server release, I am going to give the iOS app a go.
Author
Owner

@binwiederhier commented on GitHub (May 6, 2022):

Let's do this!

IMG_20220505_225513

<!-- gh-comment-id:1119215741 --> @binwiederhier commented on GitHub (May 6, 2022): Let's do this! ![IMG_20220505_225513](https://user-images.githubusercontent.com/664597/167059427-fef211b6-a7d7-4611-8beb-a1e01fb8eae4.jpg)
Author
Owner

@binwiederhier commented on GitHub (May 7, 2022):

Here's what I got so far. This is 99% @Copephobia's work. All I did was remove stuff in an attempt to ship something soon. Firebase does not work in the simulator (or so I've heard), so I have to acquire an iPhone to test the entire flow.

It also looks not very great IMHO, though the iPhone apps apparently look like this.

https://user-images.githubusercontent.com/664597/167267068-d80a98e8-c184-48fc-a7f9-9059e9c59da5.mov

<!-- gh-comment-id:1120259750 --> @binwiederhier commented on GitHub (May 7, 2022): Here's what I got so far. This is 99% @Copephobia's work. All I did was remove stuff in an attempt to ship something soon. Firebase does not work in the simulator (or so I've heard), so I have to acquire an iPhone to test the entire flow. It also looks not very great IMHO, though the iPhone apps apparently look like this. https://user-images.githubusercontent.com/664597/167267068-d80a98e8-c184-48fc-a7f9-9059e9c59da5.mov
Author
Owner

@Seji64 commented on GitHub (May 8, 2022):

Wow, this looks great! Any kind of relay for push notifications are not yet implemented ?

<!-- gh-comment-id:1120365641 --> @Seji64 commented on GitHub (May 8, 2022): Wow, this looks great! Any kind of relay for push notifications are not yet implemented ?
Author
Owner

@binwiederhier commented on GitHub (May 8, 2022):

It needs a physical iOS device and i don't have one yet. I'm asking all the people if they have old/spare iPhone devices so I can test. I'll likely just buy an iPhone 11 though. It's "only" $500...

<!-- gh-comment-id:1120419346 --> @binwiederhier commented on GitHub (May 8, 2022): It needs a physical iOS device and i don't have one yet. I'm asking all the people if they have old/spare iPhone devices so I can test. I'll likely just buy an iPhone 11 though. It's "only" $500...
Author
Owner

@binwiederhier commented on GitHub (May 8, 2022):

Wow, this looks great!

Does it really "look great"? I am legit lost as to the UI design in iOS. I haven't really looked too closely, but to me iOS apps (from Googling screenshots) look uuuuuggggllly. That's part of the reason why I want a real iPhone, so I can see what popular apps look like.

<!-- gh-comment-id:1120423591 --> @binwiederhier commented on GitHub (May 8, 2022): > Wow, this looks great! Does it really "look great"? I am legit lost as to the UI design in iOS. I haven't really looked too closely, but to me iOS apps (from Googling screenshots) look uuuuuggggllly. That's part of the reason why I want a real iPhone, so I can see what popular apps look like.
Author
Owner

@lillelilje commented on GitHub (May 8, 2022):

Wow, this looks great!

Does it really "look great"? I am legit lost as to the UI design in iOS. I haven't really looked too closely, but to me iOS apps (from Googling screenshots) look uuuuuggggllly. That's part of the reason why I want a real iPhone, so I can see what popular apps look like.

Honestly looks pretty good to me too!
If there is anything I could record or screenshot for you to see, let me know

<!-- gh-comment-id:1120427446 --> @lillelilje commented on GitHub (May 8, 2022): > > Wow, this looks great! > > Does it really "look great"? I am legit lost as to the UI design in iOS. I haven't really looked too closely, but to me iOS apps (from Googling screenshots) look uuuuuggggllly. That's part of the reason why I want a real iPhone, so I can see what popular apps look like. Honestly looks pretty good to me too! If there is anything I could record or screenshot for you to see, let me know
Author
Owner

@binwiederhier commented on GitHub (May 8, 2022):

Screenshots and/or videos of messaging apps like WhatsApp or whatever else iOS people use would be helpful indeed.

<!-- gh-comment-id:1120433398 --> @binwiederhier commented on GitHub (May 8, 2022): Screenshots and/or videos of messaging apps like WhatsApp or whatever else iOS people use would be helpful indeed.
Author
Owner

@Seji64 commented on GitHub (May 8, 2022):

Screenshots and/or videos of messaging apps like WhatsApp or whatever else iOS people use would be helpful indeed.

here we go...

Signal

Singal01

WhatsApp

WhatsApp

Mastadon

IMG_8ED1E2C4E17B-1

<!-- gh-comment-id:1120445712 --> @Seji64 commented on GitHub (May 8, 2022): > Screenshots and/or videos of messaging apps like WhatsApp or whatever else iOS people use would be helpful indeed. here we go... ### Signal ![Singal01](https://user-images.githubusercontent.com/19726119/167304934-b13d0036-637c-46b4-8680-cc02a432e97c.jpeg) ### WhatsApp ![WhatsApp](https://user-images.githubusercontent.com/19726119/167304856-5fcb5f10-1981-4ec3-81a6-cfa68b27e470.jpeg) ### Mastadon ![IMG_8ED1E2C4E17B-1](https://user-images.githubusercontent.com/19726119/167304989-e8f96753-f2e9-4dfe-9a0e-796627fe6553.jpeg)
Author
Owner

@binwiederhier commented on GitHub (May 11, 2022):

I'm getting my loaner iPhone today, so I should be able to make some progress from now on.

(Cross post since y'all are Apple fans: This ticket (https://github.com/binwiederhier/ntfy/issues/112#issuecomment-1123106697) has a macOS build of the ntfy binary (client only, no server), in case people want to try that out.)

<!-- gh-comment-id:1123711896 --> @binwiederhier commented on GitHub (May 11, 2022): I'm getting my loaner iPhone today, so I should be able to make some progress from now on. (Cross post since y'all are Apple fans: This ticket (https://github.com/binwiederhier/ntfy/issues/112#issuecomment-1123106697) has a macOS build of the `ntfy` binary (client only, no server), in case people want to try that out.)
Author
Owner

@binwiederhier commented on GitHub (May 12, 2022):

I've been poking around and trying out the Apple notification system, and it seems severely limited, compared to Android. Even Android seemed limited at the time, but iOS is almost unusable.

  • It seems impossible to run code when you receive a notification
  • APNS/Apple handles displaying the notification and only when the user interacts with it, hooks can be run
  • I think I can make this work for ntfy.sh, but it is entirely questionable if a selfhosted instance can be made compatible with this.
  • My original idea to implement a poll_request that we forward via ntfy.sh/firebase (selfhosted server ---(poll_request)---> ntfy.sh -> firebase -> apns -> ntfy iphone app --(poll)--> selfhosted server) seems impossible now
  • Simply encrypting the message and using ntfy.sh/firebase/apns is also impossible, because we cannot run code to decrypt.

I may be overlooking something, because I have not fully grasped the notification extension that @Copephobia implemented (https://developer.apple.com/documentation/usernotifications/unnotificationserviceextension). I do not see any evidence that it runs, and it does look promising. This flow may be doable if this works: selfhosted server ---(encrypted notification)--->ntfy.sh-->firebase-->apns-->iphone app (decrypts)

Still at the beginning of this. My guess is that it will take multiple weeks for me to fully grasp this and be able to publish in the app store. Unless someone with experience comes along.

Cheerio.

<!-- gh-comment-id:1124448116 --> @binwiederhier commented on GitHub (May 12, 2022): I've been poking around and trying out the Apple notification system, and it seems severely limited, compared to Android. Even Android seemed limited at the time, but iOS is almost unusable. - It seems impossible to run code when you receive a notification - APNS/Apple handles displaying the notification and only when the user interacts with it, hooks can be run - I think I can make this work for ntfy.sh, but it is entirely questionable if a selfhosted instance can be made compatible with this. - My original idea to implement a poll_request that we forward via ntfy.sh/firebase (selfhosted server ---(poll_request)---> ntfy.sh -> firebase -> apns -> ntfy iphone app --(poll)--> selfhosted server) seems impossible now - Simply encrypting the message and using ntfy.sh/firebase/apns is also impossible, because we cannot run code to decrypt. I may be overlooking something, because I have not fully grasped the notification extension that @Copephobia implemented (https://developer.apple.com/documentation/usernotifications/unnotificationserviceextension). I do not see any evidence that it runs, and it does look promising. This flow may be doable if this works: selfhosted server ---(encrypted notification)--->ntfy.sh-->firebase-->apns-->iphone app (decrypts) Still at the beginning of this. My guess is that it will take multiple weeks for me to fully grasp this and be able to publish in the app store. Unless someone with experience comes along. Cheerio.
Author
Owner

@spantaleev commented on GitHub (May 12, 2022):

Not sure how element-ios does it, but from what I know, notifications there are just a wakup call. After being woken up, the application then retrieves the new message from a self-hosted homeserver, decrypts it (if End-to-End-Encrypted) and renders the notification text by itself.

<!-- gh-comment-id:1124536822 --> @spantaleev commented on GitHub (May 12, 2022): Not sure how [element-ios](https://github.com/vector-im/element-ios) does it, but from what I know, notifications there are just a wakup call. After being woken up, the application then retrieves the new message from a self-hosted homeserver, decrypts it (if End-to-End-Encrypted) and renders the notification text by itself.
Author
Owner

@prabirshrestha commented on GitHub (May 12, 2022):

This is a good read from on how simplex chat iOS notifications work. https://github.com/simplex-chat/simplex-chat/blob/stable/blog/20220404-simplex-chat-instant-notifications.md

<!-- gh-comment-id:1124546966 --> @prabirshrestha commented on GitHub (May 12, 2022): This is a good read from on how simplex chat iOS notifications work. https://github.com/simplex-chat/simplex-chat/blob/stable/blog/20220404-simplex-chat-instant-notifications.md
Author
Owner

@binwiederhier commented on GitHub (May 12, 2022):

Thank you for the links. I read the one about simplexchat, and it sounds like I've understood the Apple APIs correctly.

Tldr: There are no way to deliver instantly without APNS, meaning a central server. Periodic checks apparently stop working after a while all together, so that's cool..

I think I'm on the right track with the notification service extension. I'll check out the element code too.

Edit: from what k can tell after reading the code for 2 minutes, they are doing the same thing. It's a notification extension (https://github.com/vector-im/element-ios/blob/develop/RiotNSE/NotificationService.swift), and most of the fields are passed unencrypted. It's a fantastic iOS code reference. It's going to help me a lot going forward, seeing that I'm learning Swift and iOS development. Thank you!

<!-- gh-comment-id:1124901830 --> @binwiederhier commented on GitHub (May 12, 2022): Thank you for the links. I read the one about simplexchat, and it sounds like I've understood the Apple APIs correctly. Tldr: There are no way to deliver instantly without APNS, meaning a central server. Periodic checks apparently stop working after a while all together, so that's cool.. I think I'm on the right track with the notification service extension. I'll check out the element code too. Edit: from what k can tell after reading the code for 2 minutes, they are doing the same thing. It's a notification extension (https://github.com/vector-im/element-ios/blob/develop/RiotNSE/NotificationService.swift), and most of the fields are passed unencrypted. It's a fantastic iOS code reference. It's going to help me a lot going forward, seeing that I'm learning Swift and iOS development. Thank you!
Author
Owner

@prabirshrestha commented on GitHub (May 13, 2022):

A good compromise could be to add additional privacy option similar to priority and tags. If I don’t care about privacy I can change it so it doesn’t need to be encrypted. This would allow me to send messages such as:

  • “A new event occurred on you NAS.”
  • “new update available in your router.”
  • “User logged in via ssh”.

I could then send another follow up message with more details that is private if needed.

Messages could be private by default to enable backwards compatibility.

<!-- gh-comment-id:1125641848 --> @prabirshrestha commented on GitHub (May 13, 2022): A good compromise could be to add additional privacy option similar to priority and tags. If I don’t care about privacy I can change it so it doesn’t need to be encrypted. This would allow me to send messages such as: - “A new event occurred on you NAS.” - “new update available in your router.” - “User logged in via ssh”. I could then send another follow up message with more details that is private if needed. Messages could be private by default to enable backwards compatibility.
Author
Owner

@binwiederhier commented on GitHub (May 13, 2022):

I am essentially at a stand-still with this. I cannot get the Notification Service Extension to work. I've Googled and tried many many things, but all the solutions do not work. I've tried creating a new project, I've followed tutorials, none of it works. The code that is supposed to modify the notification is just not called.

I'll keep trying, but this is supremely frustrating.

<!-- gh-comment-id:1126366341 --> @binwiederhier commented on GitHub (May 13, 2022): I am essentially at a stand-still with this. I cannot get the Notification Service Extension to work. I've Googled and tried many many things, but all the solutions do not work. I've tried creating a new project, I've followed tutorials, none of it works. The code that is supposed to modify the notification is just not called. I'll keep trying, but this is supremely frustrating.
Author
Owner

@binwiederhier commented on GitHub (May 15, 2022):

TLDR: 🥳

I've started a new project in Xcode and watched tons of tutorials and read tons of documentation pages and I figured out the above problem.

I think I've truly turned a corner. It's turned from "what the heck" to "okay, I think I can do this in a couple of days". The hard pieces are clear to me now: Message delivery with Firebase, Views/layouting and persistence with live-updating views. I'm going to be deviating from @Copephobia's app a little in that I'll be using CoreData on top of SQLite for persistence, since that makes live-updating views super easy.

As for self-hosted servers, I believe ultimately, these two options should be possible (with option 1 being significantly easier I think):

  1. ntfy.sh/firebase: selfhosted server ---(poll_request)---> ntfy.sh -> firebase -> apns -> ntfy iphone app --(poll)--> selfhosted server)
  2. encryption: selfhosted server ---(encrypted notification)--->ntfy.sh-->firebase-->apns-->iphone app (decrypts)

I will be releasing a bare-bones "ntfy.sh-only" version of the app first though (no selfhosting, no attachments, ...), and then hopefully iterate quickly.

--

I have started from a completely fresh Xcode project, and I am pulling in whatever I need from the code in Cope's repo. You can follow my progress here: https://github.com/binwiederhier/ntfy-ios/tree/restart. Right now it doesn't look like much, but as I said, I believe I've figured out the hardest pieces.

<!-- gh-comment-id:1126838848 --> @binwiederhier commented on GitHub (May 15, 2022): **TLDR: 🥳** I've started a new project in Xcode and watched tons of tutorials and read tons of documentation pages and I figured out the above problem. I think I've truly turned a corner. It's turned from "what the heck" to "okay, I think I can do this in a couple of days". The hard pieces are clear to me now: Message delivery with Firebase, Views/layouting and persistence with live-updating views. I'm going to be deviating from @Copephobia's app a little in that I'll be using CoreData on top of SQLite for persistence, since that makes live-updating views super easy. As for self-hosted servers, I believe ultimately, these two options should be possible (with option 1 being significantly easier I think): 1. **ntfy.sh/firebase:** selfhosted server ---(poll_request)---> ntfy.sh -> firebase -> apns -> ntfy iphone app --(poll)--> selfhosted server) 2. **encryption:** selfhosted server ---(encrypted notification)--->ntfy.sh-->firebase-->apns-->iphone app (decrypts) I will be releasing a bare-bones "ntfy.sh-only" version of the app first though (no selfhosting, no attachments, ...), and then hopefully iterate quickly. -- I have started from a completely fresh Xcode project, and I am pulling in whatever I need from the code in Cope's repo. You can follow my progress here: https://github.com/binwiederhier/ntfy-ios/tree/restart. Right now it doesn't look like much, but as I said, I believe I've figured out the hardest pieces.
Author
Owner

@binwiederhier commented on GitHub (May 18, 2022):

Lots of progress: https://www.icloud.com/photos/#044Nwj6y2ALrcfToCc64hVKJA
I'd say i am about a week away from the initial release.

<!-- gh-comment-id:1129484940 --> @binwiederhier commented on GitHub (May 18, 2022): Lots of progress: https://www.icloud.com/photos/#044Nwj6y2ALrcfToCc64hVKJA I'd say i am about a week away from the initial release.
Author
Owner

@binwiederhier commented on GitHub (May 20, 2022):

Good progress again with iOS today. I don't really understand why I had to make the hacks that I did, but it works (on my device). I'm going to polish a lot the next few days, and then I should be able to release soon.

The initial release will only support ntfy.sh (no selfhosted) and only plain messages with/without title. No tags, attachments, click URLs, ...

<!-- gh-comment-id:1132402469 --> @binwiederhier commented on GitHub (May 20, 2022): Good progress again with iOS today. I don't really understand why I had to make the hacks that I did, but it works (on my device). I'm going to polish a lot the next few days, and then I should be able to release soon. The initial release will only support ntfy.sh (no selfhosted) and only plain messages with/without title. No tags, attachments, click URLs, ...
Author
Owner

@binwiederhier commented on GitHub (May 21, 2022):

I think the iOS app is ready for testing, once I manage to upload it. I gotta do a tiny server release before though. Will do that tomorrow.

<!-- gh-comment-id:1133498470 --> @binwiederhier commented on GitHub (May 21, 2022): I think the iOS app is ready for testing, once I manage to upload it. I gotta do a tiny server release before though. Will do that tomorrow.
Author
Owner

@binwiederhier commented on GitHub (May 21, 2022):

https://photos.app.goo.gl/7Uu2yEPfRVC7Du4z6

<!-- gh-comment-id:1133649900 --> @binwiederhier commented on GitHub (May 21, 2022): https://photos.app.goo.gl/7Uu2yEPfRVC7Du4z6
Author
Owner

@binwiederhier commented on GitHub (May 21, 2022):

Now I'm waiting for Apple. 🍎 I believe that if you are interested, I can invite you as an internal tester already. Message me on Discord or Matrix.

image

<!-- gh-comment-id:1133763844 --> @binwiederhier commented on GitHub (May 21, 2022): Now I'm waiting for Apple. :apple: I believe that if you are interested, I can invite you as an internal tester already. Message me on Discord or Matrix. ![image](https://user-images.githubusercontent.com/664597/169667911-7cf31e4f-be47-4edc-ac4c-8acedcc56734.png)
Author
Owner

@binwiederhier commented on GitHub (May 21, 2022):

🥳 📢 Request for ntfy iOS beta testing

Please test via TestFlight and give me feedback here or via TestFlight itself. Thank you!

How to test

Open this on your iPhone/iPad: 👉 https://testflight.apple.com/join/P1fFnAm9 👈

Test instructions

This is the first version of the ntfy iOS app. It supports only ntfy.sh (no selfhosted servers) and only messages + title (no priority, tags, attachments, ...).

Please test:

  • You can receive messages to subscribed topics, when the app is in the foreground AND in the background
  • When you receive messages, the UI is updated correctly (if it's not, hard-kill the app and see if it updates then; and let me know if it doesn't)
  • After unsubscribing, you should not receive messages on that topic anymore.

Feedback via TestFlight or GitHub. Please give POSITIVE and NEGATIVE feedback, so I can see if it generally works...

Feedback so far (as of May, 24, 7pm EST)

Verdict (preliminary)

I'd like to thank everyone for the feedback. It helped a lot to assess the state of the app. I have decided to submit the app for review as-is by tomorrow night (Tuesday, May 24). I know there are lots of issues, but I'd rather the Apple community have something than nothing.

Issues I am aware of:

Feature requests:

<!-- gh-comment-id:1133767150 --> @binwiederhier commented on GitHub (May 21, 2022): # 🥳 :loudspeaker: Request for ntfy iOS beta testing Please test via TestFlight and give me feedback here or via TestFlight itself. Thank you! # How to test Open this on your iPhone/iPad: :point_right: **https://testflight.apple.com/join/P1fFnAm9** :point_left: # Test instructions This is the first version of the ntfy iOS app. It supports only ntfy.sh (no selfhosted servers) and only messages + title (no priority, tags, attachments, ...). Please test: - You can receive messages to subscribed topics, when the app is in the foreground AND in the background - When you receive messages, the UI is updated correctly (if it's not, hard-kill the app and see if it updates then; and let me know if it doesn't) - After unsubscribing, you should not receive messages on that topic anymore. Feedback via TestFlight or GitHub. **Please give POSITIVE and NEGATIVE feedback, so I can see if it _generally_ works...** # Feedback so far (as of May, 24, 7pm EST) - **93 invites, 87 installs** :partying_face: - :-1: 👍 ~Firebase not working~ works now after reinstall (TestFlight: iPhone 12 / iOS 15.4.1, & via https://github.com/binwiederhier/ntfy/issues/4#issuecomment-1133774683, --> ticket #266) - :-1: UI not always updating properly (TestFlight: iPhone SE (2nd gen), iOS 15.4.1, --> ticket: #267) - :+1: "Notification on iOS works in background" (TestFlight: iPhone 11 Pro Max, iOS 15.4.1, & via Matrix/simono41) - :+1: "It works" (Discord/gm1k) - :+1: "Working really well so far 💪" (https://www.reddit.com/r/selfhosted/comments/uva40f/comment/i9k2a69/) - :+1: "Works for me on both iPad and iPhone" (https://github.com/binwiederhier/ntfy/issues/4#issuecomment-1133777754) - :+1: "[..] working perfectly. No problems ... [...]" (TestFlight, iPhone XS / iOS 15.5) - :+1: "seems to be working" (Aminda S / Matrix, iOS 15.4.1 (19E258) on iPhone SE2020 (A2296)) - :+1: "I'd say it basically works quite good already." (iPad Mini 4, 15.4.1, via https://github.com/binwiederhier/ntfy/issues/4#issuecomment-1134752665) - :+1: "Seems like everything works as it should!" (https://github.com/binwiederhier/ntfy/issues/4#issuecomment-1134947713) - :+1: " Job well done! Works nicely. The possibilities are endless…… " (TestFlight, iPhone 13, iOS 15.4.1) - 👍 "The app works correctly .." (TestFlight, iPhone SE 2nd gen, iOS 15.6) - 👍 "notifications are not dismissed automatically" (TestFlight, iPhone SE 1st gen, iOS 15.5) - 👍 " Works like charm and I'm already waiting for more features to come." (https://github.com/binwiederhier/ntfy/issues/4#issuecomment-1136350672) # Verdict (preliminary) I'd like to thank everyone for the feedback. It helped a lot to assess the state of the app. I have decided to submit the app for review as-is by tomorrow night (Tuesday, May 24). I know there are lots of issues, but I'd rather the Apple community have something than nothing. Issues I am aware of: - ~The UI does not always update properly~ (#267, ❗❗), fixed in https://github.com/binwiederhier/ntfy-ios/commit/9060af51ef2c0ef5e38026b04fc9df3f9a0902a9 (I think) - ~When clicked, the notification does not open the topic, but instead just shows the last view~ (fixed in https://github.com/binwiederhier/ntfy-ios/commit/30dd10bb80beacbefaefe8f6dfb87a104893c21e) - ~The notification does not make a sound or vibrate on the Apple Watch~ (fixed in https://github.com/binwiederhier/ntfy-ios/commit/cace4723911cbab1cbb1913f0bbf04238ef969d7) - ~When opening a topic, the notifications in the Apple notification center should be dismissed automatically~ - Errors are not shown to the user, but instead just logged Feature requests: - ~Message priority support~ (added in https://github.com/binwiederhier/ntfy-ios/commit/5b64f612b077cfde5858df4aee402864d8f64816) - ~Support for tags/emojis~ (added in https://github.com/binwiederhier/ntfy-ios/commit/6d40c441f96e3a6c7331e3883bdf5df999ce8d66) - ~Support for click target~ (added in https://github.com/binwiederhier/ntfy-ios/commit/ec6472d47d9d8376378ab2feb8b6304dda38867b) - ~Support for user actions~ (added in https://github.com/binwiederhier/ntfy-ios/commit/72386665f921470b38106c48e41a53b24bf6d1de) - Support for attachments - Siri integration - Copy topic to clipboard - Copy message to clipboard - Copy logs to clipboard (or upload)
Author
Owner

@lillelilje commented on GitHub (May 21, 2022):

Thank you for your hard work!

My test results:

  • No messages are received in foreground and background. If I manually refresh (pulling down inside the app) I do receive the messages, however.
  • UI seems to respond correctly when I refresh to see the notifications
  • After unsubscribing I no longer get anything when I refresh (by pulling down, again)
<!-- gh-comment-id:1133774683 --> @lillelilje commented on GitHub (May 21, 2022): Thank you for your hard work! My test results: - No messages are received in foreground and background. If I manually refresh (pulling down inside the app) I do receive the messages, however. - UI seems to respond correctly when I refresh to see the notifications - After unsubscribing I no longer get anything when I refresh (by pulling down, again)
Author
Owner

@binwiederhier commented on GitHub (May 21, 2022):

Well that's a bummer. That means Firebase is not working, or the app extension is not working. I don't quite know how to debug things, because the logs are not written to a file... What device is this?

<!-- gh-comment-id:1133775955 --> @binwiederhier commented on GitHub (May 21, 2022): Well that's a bummer. That means Firebase is not working, or the app extension is not working. I don't quite know how to debug things, because the logs are not written to a file... What device is this?
Author
Owner

@lillelilje commented on GitHub (May 21, 2022):

iPhone 12. I submitted feedback through testflight too, which I think should contain logs and such?

<!-- gh-comment-id:1133776296 --> @lillelilje commented on GitHub (May 21, 2022): iPhone 12. I submitted feedback through testflight too, which I think should contain logs and such?
Author
Owner

@prabirshrestha commented on GitHub (May 21, 2022):

Works for me on both iPad and iPhone whether an app is running or not or is in background or foreground.

I already have bunch of feature requests. Let me know if there is a better place for this.

  • Simple dialog to send a message.
  • First class shortcuts integration. Will easily allow Siri integration.
  • copy the topic to clipboard so I can share with others or my own new device. Can be improved later by using iOS share sheet.

Looking forward to the selfhosted support.

<!-- gh-comment-id:1133777754 --> @prabirshrestha commented on GitHub (May 21, 2022): Works for me on both iPad and iPhone whether an app is running or not or is in background or foreground. I already have bunch of feature requests. Let me know if there is a better place for this. - Simple dialog to send a message. - First class shortcuts integration. Will easily allow Siri integration. - copy the topic to clipboard so I can share with others or my own new device. Can be improved later by using iOS share sheet. Looking forward to the selfhosted support.
Author
Owner

@binwiederhier commented on GitHub (May 21, 2022):

Please keep posting your feedback here. I will update the comment above (https://github.com/binwiederhier/ntfy/issues/4#issuecomment-1133767150) with a summary of feedback I have received so far.

<!-- gh-comment-id:1133783536 --> @binwiederhier commented on GitHub (May 21, 2022): Please keep posting your feedback here. I will update the comment above (https://github.com/binwiederhier/ntfy/issues/4#issuecomment-1133767150) with a summary of feedback I have received so far.
Author
Owner

@prabirshrestha commented on GitHub (May 22, 2022):

Clicking notification should take to the notification details page. When I had multiple notifications or wanted to copy the content I needed to find it.

Here is an example from pushover. If you enable sharesheet you don’t need to implement separate copy to clipboard button.

ED6A0843-0CF7-45C6-9A1D-387F7BE4E33D

“Hey Siri, notify” works. It is simple as adding 2 actions in Siri Shortcuts.

60385464-7F38-424E-A5BC-49120A13E3ED

<!-- gh-comment-id:1133792170 --> @prabirshrestha commented on GitHub (May 22, 2022): Clicking notification should take to the notification details page. When I had multiple notifications or wanted to copy the content I needed to find it. Here is an example from pushover. If you enable sharesheet you don’t need to implement separate copy to clipboard button. ![ED6A0843-0CF7-45C6-9A1D-387F7BE4E33D](https://user-images.githubusercontent.com/287744/169673693-7fc2989c-1f5d-4268-b9f1-d771e1f70346.jpeg) “Hey Siri, notify” works. It is simple as adding 2 actions in Siri Shortcuts. ![60385464-7F38-424E-A5BC-49120A13E3ED](https://user-images.githubusercontent.com/287744/169673720-b4397aad-a18c-4350-822d-ffafda04507b.jpeg)
Author
Owner

@cmeis commented on GitHub (May 23, 2022):

Tested on an iPad Mini 4 with OS version 15.4.1.

I'd say it basically works quite good already.

What works:

  • notifications are received correctly with app in foreground
  • notifications are received correctly with app in background
  • hard killing the app doesn't do any harm too, notifications still are coming in
  • notification sent while iPad was offline (WiFi disabled on a WiFi only model) are received as soon as WiFi is connected again

What didn't work 100%:

  • a notification sent while the iPad was powered off was on one occasion only received after opening the app, i.e. not after powering on and unlocking the device (I did wait for about a minute before manually opening the app)

What didn't work:

  • clicking on a notification bubble does only take you to the app "where is was" (even in a different topic), not to the correct topic. This works on Android.
<!-- gh-comment-id:1134752665 --> @cmeis commented on GitHub (May 23, 2022): Tested on an iPad Mini 4 with OS version 15.4.1. I'd say it basically works quite good already. What works: - notifications are received correctly with app in foreground - notifications are received correctly with app in background - hard killing the app doesn't do any harm too, notifications still are coming in - notification sent while iPad was offline (WiFi disabled on a WiFi only model) are received as soon as WiFi is connected again What didn't work 100%: - a notification sent while the iPad was powered off was on one occasion only received after opening the app, i.e. not after powering on and unlocking the device (I did wait for about a minute before manually opening the app) What didn't work: - clicking on a notification bubble does only take you to the app "where is was" (even in a different topic), not to the correct topic. This works on Android.
Author
Owner

@binwiederhier commented on GitHub (May 23, 2022):

Thank you @cmeis for the detailed feedback. I'm gonna all this a win overall.

a notification sent while the iPad was powered off was on one occasion only received after opening the app, i.e. not after powering on and unlocking the device (I did wait for about a minute before manually opening the app)

That's a Firebase thing. Nothing I can do about I think. Firebase is icky on Android too sometimes. Thank you for reporting it.

clicking on a notification bubble does only take you to the app "where is was" (even in a different topic), not to the correct topic. This works on Android.

That's not implemented yet, so it's expected :-)


No messages are received in foreground and background. If I manually refresh (pulling down inside the app) I do receive the messages, however.

@fosspill You have been so far the only person who mentioned that no messages were received at all.

  1. May I ask you if you clicked "Allow notifications" in the dialog that pops up when the app launches for the first time?
  2. Also, do you mind re-installing and seeing if that does anything.
  3. Is this a JB device, or otherwise modified? The app does need Firebase/Google to deliver messages.
<!-- gh-comment-id:1134762031 --> @binwiederhier commented on GitHub (May 23, 2022): Thank you @cmeis for the detailed feedback. I'm gonna all this a win overall. > a notification sent while the iPad was powered off was on one occasion only received after opening the app, i.e. not after powering on and unlocking the device (I did wait for about a minute before manually opening the app) That's a Firebase thing. Nothing I can do about I think. Firebase is icky on Android too sometimes. Thank you for reporting it. > clicking on a notification bubble does only take you to the app "where is was" (even in a different topic), not to the correct topic. This works on Android. That's not implemented yet, so it's expected :-) --- > No messages are received in foreground and background. If I manually refresh (pulling down inside the app) I do receive the messages, however. @fosspill You have been so far the only person who mentioned that no messages were received at all. 1. May I ask you if you clicked "Allow notifications" in the dialog that pops up when the app launches for the first time? 2. Also, do you mind re-installing and seeing if that does anything. 3. Is this a JB device, or otherwise modified? The app does need Firebase/Google to deliver messages.
Author
Owner

@lillelilje commented on GitHub (May 23, 2022):

@binwiederhier

  1. I'm unsure about exactly when I enabled notifications, but notifications were indeed enabled for ntfy during my testing. I confirmed this through settings multiple times
  2. Re-installing worked, but I reinstalled on a different network in case something firebase-related was blocked during installation.
    After reinstalling it also works fine on the network I originally installed the app on.

So... I'm not entirely sure about what happened here but the issue is resolved 🤷

<!-- gh-comment-id:1134896898 --> @lillelilje commented on GitHub (May 23, 2022): @binwiederhier 1. I'm unsure about exactly when I enabled notifications, but notifications were indeed enabled for ntfy during my testing. I confirmed this through settings multiple times 2. Re-installing worked, but I reinstalled on a different network in case something firebase-related was blocked during installation. After reinstalling it also works fine on the network I originally installed the app on. So... I'm not entirely sure about what happened here but the issue is resolved 🤷
Author
Owner

@binwiederhier commented on GitHub (May 23, 2022):

@fosspill Thank you for retesting. That makes me feel much better. You were the first feedback and it was "nothing works", that was quite the bummer. Glad it works now. Maybe I can somehow get an indication in the UI to show if Firebase works or not.

<!-- gh-comment-id:1134901725 --> @binwiederhier commented on GitHub (May 23, 2022): @fosspill Thank you for retesting. That makes me feel much better. You were the first feedback and it was "nothing works", that was quite the bummer. Glad it works now. Maybe I can somehow get an indication in the UI to show if Firebase works or not.
Author
Owner

@lillelilje commented on GitHub (May 23, 2022):

@binwiederhier Hah, I can imagine that. It did feel pretty bad to leave that feedback right away as well, but I'm super happy that it works now. I'll finally be able to use ntfy in my workflow and that's all thanks to your hard work.
Some firebase indication would have been interesting, and I would have liked to figure out what went wrong. But, if a reinstall is all that's needed then it's not really a big issue. Maybe we can blame cosmic rays for now.

<!-- gh-comment-id:1134915670 --> @lillelilje commented on GitHub (May 23, 2022): @binwiederhier Hah, I can imagine that. It did feel pretty bad to leave that feedback right away as well, but I'm super happy that it works now. I'll finally be able to use ntfy in my workflow and that's all thanks to your hard work. Some firebase indication would have been interesting, and I would have liked to figure out what went wrong. But, if a reinstall is all that's needed then it's not really a big issue. Maybe we can blame cosmic rays for now.
Author
Owner

@binwiederhier commented on GitHub (May 23, 2022):

Dont feel bad. This is exactly the feedback that I need. Only a handful from the people who try it leave any feedback. So this is good stuff. It's a really really rough version, but I want to release quickly and then iterate towards features and stability.

<!-- gh-comment-id:1134922452 --> @binwiederhier commented on GitHub (May 23, 2022): Dont feel bad. This is exactly the feedback that I need. Only a handful from the people who try it leave any feedback. So this is good stuff. It's a really really rough version, but I want to release quickly and then iterate towards features and stability.
Author
Owner

@skr32 commented on GitHub (May 23, 2022):

Here me feedback:

  • Subscribe to different Topics
  • Receive Notification on those topics. Push notification works on unlocked and locked screen and while app is in background or closed
  • Unsubscribing works. No notification for removed topics.
  • Content: Title & Messages work for me

Seems like everything works as it should!

Thank you for the App!! Cant wait for Content & Tags to work ;)

<!-- gh-comment-id:1134947713 --> @skr32 commented on GitHub (May 23, 2022): Here me feedback: - Subscribe to different Topics - Receive Notification on those topics. Push notification works on unlocked and locked screen and while app is in background or closed - Unsubscribing works. No notification for removed topics. - Content: Title & Messages work for me Seems like everything works as it should! Thank you for the App!! Cant wait for Content & Tags to work ;)
Author
Owner

@binwiederhier commented on GitHub (May 23, 2022):

Thank you for your feedback!

<!-- gh-comment-id:1135001944 --> @binwiederhier commented on GitHub (May 23, 2022): Thank you for your feedback!
Author
Owner

@binwiederhier commented on GitHub (May 23, 2022):

I'd like to thank everyone for the feedback. Keep it coming!! It helped a lot to assess the state of the app. I have decided to submit the app for review as-is by tomorrow night (Tuesday, May 24). I know there are lots of issues, but I'd rather the Apple community have something than nothing.

Issues I am aware of:

Feature requests:


👉 I am still updating https://github.com/binwiederhier/ntfy/issues/4#issuecomment-1133767150 with more feedback as it comes in.

<!-- gh-comment-id:1135238691 --> @binwiederhier commented on GitHub (May 23, 2022): I'd like to thank everyone for the feedback. **Keep it coming!!** It helped a lot to assess the state of the app. I have decided to submit the app for review as-is by tomorrow night (Tuesday, May 24). I know there are lots of issues, but I'd rather the Apple community have something than nothing. Issues I am aware of: - ~The UI does not always update properly~ (#267, ❗❗), fixed in https://github.com/binwiederhier/ntfy-ios/commit/9060af51ef2c0ef5e38026b04fc9df3f9a0902a9 (I think) - ~When clicked, the notification does not open the topic, but instead just shows the last view~ (fixed in https://github.com/binwiederhier/ntfy-ios/commit/30dd10bb80beacbefaefe8f6dfb87a104893c21e) - ~The notification does not make a sound or vibrate on the Apple Watch~ (fixed in https://github.com/binwiederhier/ntfy-ios/commit/cace4723911cbab1cbb1913f0bbf04238ef969d7) - ~When opening a topic, the notifications in the Apple notification center should be dismissed automatically~ - Errors are not shown to the user, but instead just logged Feature requests: - ~Message priority support~ (added in https://github.com/binwiederhier/ntfy-ios/commit/5b64f612b077cfde5858df4aee402864d8f64816) - ~Support for tags/emojis~ (added in https://github.com/binwiederhier/ntfy-ios/commit/6d40c441f96e3a6c7331e3883bdf5df999ce8d66) - ~Support for click target~ (added in https://github.com/binwiederhier/ntfy-ios/commit/ec6472d47d9d8376378ab2feb8b6304dda38867b) - ~Support for user actions~ (added in https://github.com/binwiederhier/ntfy-ios/commit/72386665f921470b38106c48e41a53b24bf6d1de) - Support for attachments - Siri integration - Copy topic to clipboard - Copy message to clipboard - Copy logs to clipboard (or upload) --- 👉 I am still updating https://github.com/binwiederhier/ntfy/issues/4#issuecomment-1133767150 with more feedback as it comes in.
Author
Owner

@skrollme commented on GitHub (May 24, 2022):

I'm new to ntfy because I was looking for an (possibly self-hosted) alternative to ifttt.com push messages. As I saw the development/progress of the iOS I subscribed to this topic and tried the TestFlight build as it came out:
👍 Works like charm and I'm already waiting for more features to come.
In the meantime I will switch my toolchains to use ntfy

P.S.: Any official channels to donate / support the project? Paypal? Github sponsor?

<!-- gh-comment-id:1136350672 --> @skrollme commented on GitHub (May 24, 2022): I'm new to _ntfy_ because I was looking for an (possibly self-hosted) alternative to ifttt.com push messages. As I saw the development/progress of the iOS I subscribed to this topic and tried the TestFlight build as it came out: **👍 Works like charm and I'm already waiting for more features to come.** In the meantime I will switch my toolchains to use _ntfy_ P.S.: Any official channels to donate / support the project? Paypal? Github sponsor?
Author
Owner

@SxthGear commented on GitHub (May 25, 2022):

A little late to the party as it looks like you're pushing live today sometime, but I just happened to see this posted on /r/selfhosted and have been waiting for iOS support for some time now. Prelim run through of different things on an iPhone 13 Pro, iOS 15.4.1:

👍 Works perfectly, even with some odd ASCII characters and emoji thrown at it. Can't wait to run a selfhosted version!

<!-- gh-comment-id:1136698027 --> @SxthGear commented on GitHub (May 25, 2022): A little late to the party as it looks like you're pushing live today sometime, but I just happened to see this posted on /r/selfhosted and have been waiting for iOS support for some time now. Prelim run through of different things on an iPhone 13 Pro, iOS 15.4.1: 👍 **Works perfectly, even with some odd ASCII characters and emoji thrown at it. Can't wait to run a selfhosted version!**
Author
Owner

@binwiederhier commented on GitHub (May 25, 2022):

Love hearing that. Thanks folks. 👍

<!-- gh-comment-id:1136699001 --> @binwiederhier commented on GitHub (May 25, 2022): Love hearing that. Thanks folks. 👍
Author
Owner

@binwiederhier commented on GitHub (May 25, 2022):

Rejected... For mentioning Android... I suppose that's an easy enough fix.

"We found the metadata of your submitted in-app purchases includes irrelevant third-party platform information. Specifically, Android references is mentioned in the description.

Referencing third-party platforms in your app or its metadata is not permitted on the App Store."


Edit: This was my mistake. The description was just copied from the Android app and mentioned that this is the Android app not the iOS app. Oops. Well let's try it again.

<!-- gh-comment-id:1137150543 --> @binwiederhier commented on GitHub (May 25, 2022): Rejected... For mentioning Android... I suppose that's an easy enough fix. "We found the metadata of your submitted in-app purchases includes irrelevant third-party platform information. Specifically, Android references is mentioned in the description. Referencing third-party platforms in your app or its metadata is not permitted on the App Store." --- Edit: This was my mistake. The description was just copied from the Android app and mentioned that this is the Android app not the iOS app. Oops. Well let's try it again.
Author
Owner

@binwiederhier commented on GitHub (May 25, 2022):

🥳 It's happening

https://apps.apple.com/us/app/ntfy/id1625396347

--
Note that in a day or two I'll release the update with all the things mentioned here https://github.com/binwiederhier/ntfy/issues/4#issuecomment-1133767150

<!-- gh-comment-id:1137418362 --> @binwiederhier commented on GitHub (May 25, 2022): # 🥳 It's happening https://apps.apple.com/us/app/ntfy/id1625396347 -- Note that in a day or two I'll release the update with all the things mentioned here https://github.com/binwiederhier/ntfy/issues/4#issuecomment-1133767150
Author
Owner

@binwiederhier commented on GitHub (May 26, 2022):

I'm going to keep this ticket open for a while to communicate updates on iOS, but eventually I'll close it. To stay in the iOS loop, I highly recommend joining the Discord or Matrix (links on main GIthub page).

Updates:

  • Aside from attachments, I've implemented pretty much all "publish" features (priority, tags/emojis, click target, user action buttons). There is no configuration/muting/... and such as there is in Android yet, obviously.
  • As for selfhosted servers, I have not started that work yet officially, BUUTT, I think I may be able to do a "selfhosted light" variant pretty quickly: Basically poll all topics every 20-60min or so (Apple is vague on this, it's also not guaranteed to run at all) by remotely triggering silent "poll now" Firebase messages. The messages are empty, they just serve as triggers to poll all topics. I've got this implemented in https://github.com/binwiederhier/ntfy-ios/pull/5/files and it works nicely. I think I can get that into the next release too, though likely without support for auth.

Here are a bunch of pictures: https://photos.app.goo.gl/KeERoCa25WqnfpuC8

<!-- gh-comment-id:1138079075 --> @binwiederhier commented on GitHub (May 26, 2022): I'm going to keep this ticket open for a while to communicate updates on iOS, but eventually I'll close it. To stay in the iOS loop, I highly recommend joining the Discord or Matrix (links on main GIthub page). Updates: - Aside from attachments, I've implemented pretty much all "publish" features (priority, tags/emojis, click target, user action buttons). There is no configuration/muting/... and such as there is in Android yet, obviously. - As for selfhosted servers, I have not started that work yet officially, BUUTT, I think I may be able to do a "selfhosted light" variant pretty quickly: Basically poll all topics every 20-60min or so (Apple is vague on this, it's also not guaranteed to run at all) by remotely triggering silent "poll now" Firebase messages. The messages are empty, they just serve as triggers to poll all topics. I've got this implemented in https://github.com/binwiederhier/ntfy-ios/pull/5/files and it works nicely. I think I can get that into the next release too, though likely without support for auth. Here are a bunch of pictures: https://photos.app.goo.gl/KeERoCa25WqnfpuC8
Author
Owner

@binwiederhier commented on GitHub (May 27, 2022):

Here's a short video showing my progress on the selfhosted server support: https://photos.app.goo.gl/weSQxdbL8kkt11nS8

Here's what's happening:

  • Top screen: User sends a message to "middle screen" (= selfhosted server)
  • Middle screen: Selfhosted server is configured to send a message to topicHash=sha256($topic) containing the message ID of the original message (poll_id=$messageID) to an upstream server (= ntfy.sh). This is equivalent to curl -X POST -H "Poll: $messageID" ntfy.sh/$topicHash).
  • Bottom screen: Upstream server (ntfy.sh) receives the poll request and forwards it to Firebase topic $topicHash (which forwards it to APNS). The poll request contains only the original message ID; none of the other fields of the original message. It looks like this: {"id":"Xi6uHAal8f7i","time":1653619618,"event":"poll_request","topic":"mylongtopichash","message":"New message","poll_id":"123"}
  • Phone: receives the poll request from APNS, containing $messageID, and asks the selfhosted server for the original message (equivalent to curl "localhost:2587/test/json?poll=1&id=Ab9dXUgm83cp)
  • Phone displays message.

--> Firebase/APNS are used as signalling mechanism, and the actual message is fetched by the phone.

image

<!-- gh-comment-id:1139228596 --> @binwiederhier commented on GitHub (May 27, 2022): Here's a short video showing my progress on the selfhosted server support: https://photos.app.goo.gl/weSQxdbL8kkt11nS8 Here's what's happening: - **Top screen:** User sends a message to "middle screen" (= selfhosted server) - **Middle screen:** Selfhosted server is configured to send a message to `topicHash=sha256($topic)` containing the message ID of the original message (`poll_id=$messageID`) to an upstream server (= ntfy.sh). This is equivalent to `curl -X POST -H "Poll: $messageID" ntfy.sh/$topicHash`). - **Bottom screen:** Upstream server (ntfy.sh) receives the poll request and forwards it to Firebase topic `$topicHash` (which forwards it to APNS). The poll request contains only the original message ID; none of the other fields of the original message. It looks like this: `{"id":"Xi6uHAal8f7i","time":1653619618,"event":"poll_request","topic":"mylongtopichash","message":"New message","poll_id":"123"}` - **Phone:** receives the poll request from APNS, containing `$messageID`, and asks the selfhosted server for the original message (equivalent to `curl "localhost:2587/test/json?poll=1&id=Ab9dXUgm83cp`) - Phone displays message. --> Firebase/APNS are used as signalling mechanism, and the actual message is fetched by the phone. ![image](https://user-images.githubusercontent.com/664597/170618222-27a6facf-6d08-46d9-b946-e1d088a820b1.png)
Author
Owner

@prabirshrestha commented on GitHub (May 28, 2022):

You might be able to use location service feature of iOS to have frequent polling. At least that is what Dropbox and other products do. https://help.dropbox.com/installs-integrations/mobile/location-data

Other option I could see is adding shortcut to force poll so I can run it when it charges or connects to Wi-Fi and so on. Shortcuts does have show notification action.

Some more additional options here. https://stackoverflow.com/questions/35388086/is-there-a-way-to-wakeup-suspended-app-in-ios-without-user-or-server-interventio

found a bug:
If your topic is long it seems to flicker as it adjusts the size in header.

<!-- gh-comment-id:1140296784 --> @prabirshrestha commented on GitHub (May 28, 2022): You might be able to use location service feature of iOS to have frequent polling. At least that is what Dropbox and other products do. https://help.dropbox.com/installs-integrations/mobile/location-data Other option I could see is adding shortcut to force poll so I can run it when it charges or connects to Wi-Fi and so on. Shortcuts does have show notification action. Some more additional options here. https://stackoverflow.com/questions/35388086/is-there-a-way-to-wakeup-suspended-app-in-ios-without-user-or-server-interventio found a bug: If your topic is long it seems to flicker as it adjusts the size in header.
Author
Owner

@Famku commented on GitHub (May 29, 2022):

Hi.

I just tested NTFY App 1.1 and it works very good with self hosted ntfy.

Thank you for your hard work!

<!-- gh-comment-id:1140493734 --> @Famku commented on GitHub (May 29, 2022): Hi. I just tested NTFY App 1.1 and it works very good with self hosted ntfy. Thank you for your hard work!
Author
Owner

@binwiederhier commented on GitHub (May 29, 2022):

Whoa. I didn't even know it was live yet. Apple hasn't sent me an email yet that it's live. I would've posted instructions here too. I'll do that later. Right now I'm in IKEA bed building mode.

<!-- gh-comment-id:1140496543 --> @binwiederhier commented on GitHub (May 29, 2022): Whoa. I didn't even know it was live yet. Apple hasn't sent me an email yet that it's live. I would've posted instructions here too. I'll do that later. Right now I'm in IKEA bed building mode.
Author
Owner

@binwiederhier commented on GitHub (May 29, 2022):

📢 🥳 Request for testing

This release of the iOS app adds message priorities (mapped to iOS interruption levels), tags and emojis, action buttons to open websites or perform HTTP requests (in the notification and the detail view), a custom click action when the notification is tapped, and various other fixes.

It also adds support for self-hosted servers (albeit not supporting auth yet). The selfhosted server needs to be configured to forward poll requests to upstream ntfy.sh for push notifications to work (see https://ntfy.sh/docs/config/#ios-instant-notifications for details).

PLEASE TEST all of the above features. Report issues ON GITHUB or IN TESTFLIGHT.

How to test

➡️ https://testflight.apple.com/join/P1fFnAm9 ⬅️

Notes

After this release, I will close this issue and I'll be moving towards a business as usual method for iOS releases. I'll still try to catch up with most Android features, but I won't be asking for TestFlight here. Instead, I'll ask in Discord/Matrix, and/or in https://ntfy.sh/announcements.

I added a bunch of tickets for future iOS work (https://github.com/binwiederhier/ntfy/labels/ios), please 👍 the one you'd like the most, so I know what to prioritize. Otherwise I'll just do them in whatever order I think makes sense or is the most fun.

<!-- gh-comment-id:1140511858 --> @binwiederhier commented on GitHub (May 29, 2022): # 📢 🥳 Request for testing This release of the iOS app adds message priorities (mapped to iOS interruption levels), tags and emojis, action buttons to open websites or perform HTTP requests (in the notification and the detail view), a custom click action when the notification is tapped, and various other fixes. It also adds support for self-hosted servers (albeit not supporting auth yet). The selfhosted server needs to be configured to forward poll requests to upstream ntfy.sh for push notifications to work (see https://ntfy.sh/docs/config/#ios-instant-notifications for details). PLEASE TEST all of the above features. **Report issues ON GITHUB or IN TESTFLIGHT.** # How to test **➡️ https://testflight.apple.com/join/P1fFnAm9 ⬅️** # Notes After this release, I will close this issue and I'll be moving towards a business as usual method for iOS releases. I'll still try to catch up with most Android features, but I won't be asking for TestFlight here. Instead, I'll ask in Discord/Matrix, and/or in https://ntfy.sh/announcements. I added a bunch of tickets for future iOS work (https://github.com/binwiederhier/ntfy/labels/ios), please 👍 the one you'd like the most, so I know what to prioritize. Otherwise I'll just do them in whatever order I think makes sense or is the most fun.
Author
Owner

@binwiederhier commented on GitHub (May 30, 2022):

Any positive/negative feedback on the new iOS version?

<!-- gh-comment-id:1141479555 --> @binwiederhier commented on GitHub (May 30, 2022): Any positive/negative feedback on the new iOS version?
Author
Owner

@ozpinu commented on GitHub (May 30, 2022):

I've got it working nicely with my self hosted instance of ntfy, after following the instructions and adding the upstream url 🙌

Almost instant push notifications 🎯

<!-- gh-comment-id:1141542742 --> @ozpinu commented on GitHub (May 30, 2022): I've got it working nicely with my self hosted instance of ntfy, after following the instructions and adding the upstream url 🙌 Almost instant push notifications 🎯
Author
Owner

@robfox92 commented on GitHub (May 31, 2022):

Works well - the only thing that tripped me up was the need to specify the server is using https in the app. I'd initially specified "ntfy.<my_selfhosted_instance>.xyz" instead of "https://ntfy.<my_selfhosted_instance>.xyz".

Maybe it's worth prepending the server address with https:// automatically?

<!-- gh-comment-id:1141573177 --> @robfox92 commented on GitHub (May 31, 2022): Works well - the only thing that tripped me up was the need to specify the server is using https in the app. I'd initially specified "ntfy.<my_selfhosted_instance>.xyz" instead of "https://ntfy.<my_selfhosted_instance>.xyz". Maybe it's worth prepending the server address with https:// automatically?
Author
Owner

@binwiederhier commented on GitHub (May 31, 2022):

Awesome to hear that it's working. Thanks for the feedback. Keep them coming

Maybe it's worth prepending the server address with https:// automatically?

👍 The Android app has validation and a placeholder for this. I'll add something like that.

<!-- gh-comment-id:1141574730 --> @binwiederhier commented on GitHub (May 31, 2022): Awesome to hear that it's working. Thanks for the feedback. Keep them coming > Maybe it's worth prepending the server address with https:// automatically? :+1: The Android app has validation and a placeholder for this. I'll add something like that.
Author
Owner

@prabirshrestha commented on GitHub (Jun 1, 2022):

Tried the selfhosted server and it works great.

iOS Bug:

  • Double line to single line for long topics seems to be fixed but now the font sizes changes.

Web Bug:

  • If WebSockets is not enabled on the proxy server or fails to connect, it doesn't any error message. I had to open the console and see that there was a websocket error and had to enable WebSocket on the proxy server that comes with synology nas.

iOS feature requests:

  • My domain is not small as notify.sh. Remember my last used settings for "Use another server" and the "Server URL" or even better if the "Server URL" is a list of predefined servers where user can add or remove.

ntfy feature requests:

  • add support for LDAP auth so it plays nicely with rest of the self hosted ecosystem. You can try it with gldap server. I would like to avoid mantaining yet another user/password combination. This is easier for family members that are non-tech.
  • add support for tokens. I would like to use different token with custom expiration.
  • add support for making a topic as listed or unlisted similar to youtube https://support.google.com/youtube/answer/3127309?hl=en. This will allow a family member to register a server and then easily discover listed topics.

docs request:

  • What happens if upstream-base-url is set but fails to send to the upstream server. This could be due to temporary internet connection getting down. Will this be retried or will be lost.
  • This is a bit confusing.

The ntfy.sh server publishes the message to Firebase, which forwards it to APNS, which forwards it to your iOS device
Your iOS device receives the poll request, and fetches the actual message from your server, and then displays it

The ntfy.sh server publishes the message to Firebase. What is a message here? Is it just the poll id and topic hash?

<!-- gh-comment-id:1143053780 --> @prabirshrestha commented on GitHub (Jun 1, 2022): Tried the selfhosted server and it works great. iOS Bug: * Double line to single line for long topics seems to be fixed but now the font sizes changes. Web Bug: * If WebSockets is not enabled on the proxy server or fails to connect, it doesn't any error message. I had to open the console and see that there was a websocket error and had to enable WebSocket on the proxy server that comes with synology nas. iOS feature requests: * My domain is not small as `notify.sh`. Remember my last used settings for "Use another server" and the "Server URL" or even better if the "Server URL" is a list of predefined servers where user can add or remove. ntfy feature requests: * add support for LDAP auth so it plays nicely with rest of the self hosted ecosystem. You can try it with [gldap](https://github.com/jimlambrt/gldap) server. I would like to avoid mantaining yet another user/password combination. This is easier for family members that are non-tech. * add support for tokens. I would like to use different token with custom expiration. * add support for making a topic as listed or unlisted similar to youtube https://support.google.com/youtube/answer/3127309?hl=en. This will allow a family member to register a server and then easily discover listed topics. docs request: * What happens if `upstream-base-url` is set but fails to send to the upstream server. This could be due to temporary internet connection getting down. Will this be retried or will be lost. * This is a bit confusing. >The ntfy.sh server publishes the message to Firebase, which forwards it to APNS, which forwards it to your iOS device Your iOS device receives the poll request, and fetches the actual message from your server, and then displays it `The ntfy.sh server publishes the message to Firebase`. What is a message here? Is it just the poll id and topic hash?
Author
Owner

@binwiederhier commented on GitHub (Jun 1, 2022):

Thank you for the detailed feedback. I love it ❤️ Would you mind reporting bugs and feature requests in individual tickets? It's impossible for me to keep track of things if they are in comments. Thanks.

I'll respond to your comments in detail tomorrow.

<!-- gh-comment-id:1143056848 --> @binwiederhier commented on GitHub (Jun 1, 2022): Thank you for the detailed feedback. I love it :heart: Would you mind reporting bugs and feature requests in individual tickets? It's impossible for me to keep track of things if they are in comments. Thanks. I'll respond to your comments in detail tomorrow.
Author
Owner

@prabirshrestha commented on GitHub (Jun 1, 2022):

Created separate feature requests. Hope it is not a lot 😃 .

Here are the top ones for me to replace pushover with ntfy. I probably only need 1 and 2 to start testing E2E in my real home servers.

  1. https://github.com/binwiederhier/ntfy/issues/277
  2. Clarify docs.
  3. Add tokens support
  4. LDAP auth

(By the way thanks for the awesome progress in the past few days. Really excited to see ntfy working on iOS.)

<!-- gh-comment-id:1143117887 --> @prabirshrestha commented on GitHub (Jun 1, 2022): Created separate feature requests. Hope it is not a lot 😃 . Here are the top ones for me to replace pushover with ntfy. I probably only need 1 and 2 to start testing E2E in my real home servers. 1. https://github.com/binwiederhier/ntfy/issues/277 2. Clarify docs. 3. [Add tokens support](https://github.com/binwiederhier/ntfy/issues/297) 4. LDAP auth (By the way thanks for the awesome progress in the past few days. Really excited to see ntfy working on iOS.)
Author
Owner

@binwiederhier commented on GitHub (Jun 1, 2022):

Closing this ticket 🥳

With the release of the iOS v1.1 app 🥳, I am ceremonially closing this ticket. 🥳 🥳 🥳

You may of course continue to leave feedback here, or create tickets in the main GitHub.

Discord/Matrix + ntfy.sh/announcements

I also encourage you to join Discord or Matrix, and subscribe to the https://ntfy.sh/announcements topic. I'll potentially be asking for TestFlight testers there.

<!-- gh-comment-id:1143869979 --> @binwiederhier commented on GitHub (Jun 1, 2022): # Closing this ticket :partying_face: With the release of the [iOS v1.1 app](https://apps.apple.com/app/ntfy/id1625396347) :partying_face:, I am ceremonially closing this ticket. :partying_face: :partying_face: :partying_face: You may of course continue to leave feedback here, or create tickets in the main GitHub. # Discord/Matrix + ntfy.sh/announcements I also encourage you to join [Discord](https://discord.gg/cT7ECsZj9w) or [Matrix](https://matrix.to/#/#ntfy:matrix.org), and subscribe to the https://ntfy.sh/announcements topic. I'll potentially be asking for TestFlight testers there.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/ntfy#3
No description provided.