[HN Gopher] Publish your PWA to the iOS App Store
       ___________________________________________________________________
        
       Publish your PWA to the iOS App Store
        
       Author : judah
       Score  : 177 points
       Date   : 2021-10-29 16:55 UTC (6 hours ago)
        
 (HTM) web link (blog.pwabuilder.com)
 (TXT) w3m dump (blog.pwabuilder.com)
        
       | allan_s wrote:
       | At rosaly.com we've built our "app" with something similar
       | 
       | we didn't go the PWA way (because of app store), but something
       | quite similar to the article
       | 
       | 1. we have a symfony website with simple web pages but with a
       | "app look" (yes no react , no api, like it's the 2000s all over
       | again)
       | 
       | 2. we have a think react native wrapper (at first 17 lines, no
       | it's 90s as we support push notification, hardware back button
       | etc.) that embed a react-native webview
       | 
       | so we have nearly no javascript, just modern css and we pay
       | really attention to performance and it's a dream
       | 
       | 1. no javascript removes a lot of hassle
       | 
       | 2. no api removes a lot of hassle too
       | 
       | 3. html+css and we support all platforms, so a good design and
       | backend engineers is all you need
       | 
       | we're live for a year, have raised money and have customers.
       | We've been through several store update (to keep react native up
       | to date and put some changelog).
       | 
       | I call it "retrogressive-app"
        
         | simonbarker87 wrote:
         | Sounds great, shame I only speak English so can't have a proper
         | play with it but this approach sounds delightful.
         | 
         | I've recently started a project with just html/css and vanilla
         | JS on the front end - no react etc and it's very nice
        
         | geoka9 wrote:
         | Thank you for your post!
         | 
         | I'd love to read more about your stack, so of you do a blog
         | post, please let us know :)
         | 
         | Would love to see a video of your app in action, too!
        
         | nathancahill wrote:
         | Is that small react-native wrapper viewable somewhere? I'd love
         | to do something similar.
        
           | dorianmariefr wrote:
           | I can share you mine https://gist.github.com/dorianmariefr/e8
           | 422538a4eefcc99aa92d...
        
         | bestinterest wrote:
         | Sounds like the conclusion Basecamp came to for their apps.
         | https://m.signalvnoise.com/basecamp-3-for-ios-hybrid-archite...
         | 
         | Also see
         | https://twitter.com/dhh/status/1254870450464686080?lang=en
        
         | achairapart wrote:
         | Looking at the app reviews looks like it's also a dream for the
         | user (only 5-star ratings!). Kudos to you!
         | 
         | Please consider a blog post with more details or even open
         | source some of your stack (especially the react-native bits).
         | Like others users here, I'm also very interested in your
         | "retrogressive" approach!
        
         | andai wrote:
         | 2021: Year of PHP in the pocket
        
         | judge2020 wrote:
         | " we pay really attention to performance and it's a dream"
         | 
         | Does this include in low-connectivity environments? The biggest
         | advantage of api-driven PWAs is that it supports no-
         | connectivity and low-connectivity nicely, assuming you put
         | effort into enabling it (having an offline cache of data) and
         | having loading indicators visible to the user. With a regular
         | page-load-driven application, if i'm on 1 bar of 4G I might get
         | the TTFB for a page load and then be waiting as page assets
         | slowly load in, staring at a white or half-blank screen the
         | entire time.
        
           | allan_s wrote:
           | we certainly can sure improve on that side but currently most
           | of our pages are at most 2 https call
           | 
           | 1. html of that page, they never go over 30kb non gzipped,
           | most svg assets are inline, so once you got it, you got it.
           | 
           | 2. the tailwind.css file, that is cached after the first
           | page.
           | 
           | so even if you feel fancy and you use graphql, you can't do
           | less 1 http call right ?
        
           | new_stranger wrote:
           | Ironically though, phones usually struggle more with single-
           | page apps / Javascript heavy sites which have all the client-
           | side application logic, 3rd party libraries, and DOM re-
           | renders based on state changes.
        
             | allan_s wrote:
             | exactly ! most browser will wait for the next to load
             | before unloading the current one so with a little css trick
             | you can do a nice transition between pages
             | 
             | While most SPA will put you on a weird state (of course you
             | can handle it nicely too, but it requires effort for
             | something you had for free in the first)
        
       | dfabulich wrote:
       | Apple has a rule forbidding this exact thing.
       | 
       | If you get lucky and get a lenient app reviewer, you _might_ be
       | able to sneak a PWA onto the App Store this way, but even if you
       | do get approved, you 're just as likely to get rejected when
       | submitting a bug fix or compatibility update. (This has happened
       | to me a number of times before.)
       | 
       | > _4.2 Minimum Functionality_
       | 
       | > _Your app should include features, content, and UI that elevate
       | it beyond a repackaged website. If your app is not particularly
       | useful, unique, or "app-like," it doesn't belong on the App
       | Store. If your App doesn't provide some sort of lasting
       | entertainment value or adequate utility, it may not be accepted.
       | Apps that are simply a song or movie should be submitted to the
       | iTunes Store. Apps that are simply a book or game guide should be
       | submitted to the Apple Books Store._
       | 
       | > _4.2.2 Other than catalogs, apps shouldn't primarily be
       | marketing materials, advertisements, web clippings, content
       | aggregators, or a collection of links._
       | 
       | A "web clipping" is Apple's way of referring to a web site zipped
       | up in a WebView, and that's what rule 4.2.2 explicitly forbids.
       | 
       | Apple has rejected a bunch of PWAs wrapped up in WebViews like
       | this over the years, and when they do, they're normally rejected
       | under 4.2.2. Apple doesn't always notice, but they notice just
       | often enough to make this an unacceptable risk for any app you
       | actually care about.
       | 
       | IMO the big mistake PWA Builder is making here is that (per OP
       | blog post) they do not offer any "iOS-specific integrations."
       | 
       | > Our template doesn't include support for iOS-specific
       | functionality like Apple Pay, Sign In with Apple, HealthKit, etc.
       | 
       | Those iOS-specific integrations are the only thing that would
       | make these PWAs allowable under rule 4.2. I have gotten PWA games
       | approved by pointing out that they support Game Center, for
       | example.
       | 
       | Overall, I think PWA Builder is off to a good start, but they
       | need a lot more work to be viable.
        
         | yesimahuman wrote:
         | This is one reason I really hope they end up adopting Capacitor
         | for the iOS and Android output. Capacitor has all those iOS-
         | specific integrations that enable an app to be accepted into
         | the stores, and they'd get all of that for free but could still
         | keep the core PWA-to-native experience the way they want.
        
         | nathancahill wrote:
         | I mean, that's on the developer to actually build the PWA that
         | does those things right? If you build an "app" as a PWA,
         | there's no reason it shouldn't be approved? If you simply wrap
         | a website these rules would apply. There's nothing here that
         | bans PWAs as I read it.
        
           | remus wrote:
           | PWAs are websites, just ones with a lot of functionality, so
           | by the letter of apples rules they are not allowed.
           | 
           | From an outside perspective it seems a fairly hard rule to
           | enforce though. If you packaged gmails web interface up in to
           | an app Id say that has a lot more utility than a flashlight
           | app.
        
           | dfabulich wrote:
           | Yeah, well, tell that to the App Store reviewers who rejected
           | my games.
           | 
           | Their argument basically went like this: Your app is clearly
           | a web clipping. It's just your web site wrapped up as an app.
           | We can see your web site, it works fine, and this app adds no
           | additional value to the web site. You need to add features to
           | your app--iOS-specific features--to make it worthy of being
           | in the App Store.
           | 
           | I think it's fair to say that you can interpret rule 4.2 (and
           | especially 4.2.2, which doesn't define a "web clipping" in
           | the guidelines) in a few different ways, and that the
           | "strict" App Store reviewers I faced were being perfectly
           | reasonable in their interpretation of rule 4.2.
           | 
           | (To be clear, I think rule 4.2 is not a good rule, but I
           | think the individual reviewers I spoke with were making a
           | reasonable attempt to _interpret_ rule 4.2.)
           | 
           | The "strict" interpretation is reasonable, but your
           | interpretation (which I would call a "lax" interpretation) is
           | also reasonable. You could say "well, if the web site is app-
           | like--if the app has good, useful features--then it has more
           | than minimal functionality and is worthy of being in the
           | store." Both interpretations make sense.
           | 
           | The problem occurs when you stake your deployment strategy on
           | the hope that you don't get a hardline App Store reviewer,
           | and now, all of a sudden, you can't push bug fixes or
           | compatibility updates to your iOS app, and your users are
           | pissed.
        
             | philistine wrote:
             | What is said is that if you build something using web tech
             | that is not available online it's fine, what you clearly
             | did is duplicate what is already available on the web.
             | 
             | Still an incredibly dumb rule.
        
         | reificator wrote:
         | This seems easy to solve given Apple's rejection of PWA support
         | in Safari, just add a feature that doesn't matter much, like an
         | _(opt-in!)_ notification on updates. Safari (and therefore all
         | browsers) on iOS don 't support notifications, so you're doing
         | something you couldn't do from the website.
         | 
         | https://caniuse.com/?search=notifications
        
           | aaaaaaaaaaab wrote:
           | Ummm... yeah, no.
           | 
           | The AppStore review operates on a spirit-of-the-law basis,
           | instead of the letter-of-the-law.
        
         | brundolf wrote:
         | The above sounds like it's trying to prevent you from wrapping
         | up purely informational websites, like that for a specific
         | wedding, or a brochure or something (analogous to "simply a
         | song or a movie" vs a general music or movies app). Of course
         | I'm sure individual reviewers will interpret it differently.
         | But I don't think the "intent of the law" is at odds with this
         | kind of packaging.
        
       | danr4 wrote:
       | Got excited at first but it's missing push notifications which is
       | 90% of the reason I even want an app
        
         | sergiotapia wrote:
         | And PWAs will never get that support because it's in Google and
         | Apples best interest to block it. Some sad shit
        
           | heavyset_go wrote:
           | Google implemented PWA support years ago into both Android
           | and Chrome, including web push notifications. Apple is the
           | only one that purposely doesn't implement necessary features
           | for PWAs like web push notifications.
           | 
           | Google and Mozilla have supported the web push API for going
           | on 6 to 7+ years now.
        
           | judah wrote:
           | PWABuilder already has a "publish to Google Play" feature:
           | https://blog.pwabuilder.com/posts/microsoft-and-google-
           | team-...
           | 
           | We work with Google -- and even sync with them monthly -- on
           | this platform. They are very cooperative and helpful.
           | 
           | And, PWAs published to Google Play can do push notifications
           | and anything else PWAs normally do, using just standards-
           | based code.
        
           | Someone1234 wrote:
           | I'm confused, what are Google blocking? iOS famously lacks
           | push notification browser support, but Android's browser and
           | third party browsers on the platform all support it on
           | Android (and have since forever).
        
           | handrous wrote:
           | In my interest, too. Pay attention to non-geeks using this
           | "feature" and it's clear that web push is the 3rd party
           | toolbar[0] of the modern web. Crap they enable by accident,
           | then don't know how to get rid of.
           | 
           | [0] Ask someone who worked with computers in the late 90s and
           | 2000s if you don't get the reference.
        
           | simonbarker87 wrote:
           | I've released a PWA with Capacitor in both app stores with
           | push notifications.
        
           | Drew_ wrote:
           | Google already supports Web Push in Chrome. Mozilla in
           | Firefox as well. Web Push is only blocked in Safari.
        
         | judah wrote:
         | Thanks for the feedback. We're looking to add that in a follow-
         | up release.
         | 
         | In the meantime, if you really need it, have a look at this
         | project: https://github.com/khmyznikov/ios-pwa-wrap
         | 
         | It's a iOS PWA template that uses push notifications via
         | Firebase.
        
         | yesimahuman wrote:
         | I would recommend checking out Capacitor which can bring your
         | web app/PWA to mobile and has full push support for iOS and
         | Android: https://capacitorjs.com/docs/guides/push-
         | notifications-fireb...
        
           | danr4 wrote:
           | ooh I didn't know they do that. How easy is it to wrap and
           | existing PWA?
        
         | ghaff wrote:
         | Curious. What are all these things you want to get notified
         | about? I pretty much have all notifications turned off besides
         | messaging, phone, and alarm.
        
           | danr4 wrote:
           | I'm a developer of a web app where users interact with each
           | other. Notifying users on in-app activity is the absolute
           | most important thing for them and for us.
        
         | marvindanig wrote:
         | Try Red Goose? https://goose.red
         | 
         | We provide push notifications along with a few more important
         | things that you'd need to wrap your web-app with.
         | 
         | Full disclosure: I'm its founder and you can reach me on
         | marvin@goose.red.
        
       | r_singh wrote:
       | Reviews anybody?
        
       | Gys wrote:
       | > PWA Builder was founded by Microsoft as a community guided,
       | open source project to help move PWA adoption forward.
        
         | pjmlp wrote:
         | Also because they adopted PWAs as replacement for WinJS.
        
       | TranquilMarmot wrote:
       | This sounds great; I've made a few PWAs and wanted to publish
       | them on app stores but couldn't quite figure it out so I gave up.
       | Might give this a shot.
        
       | nathancahill wrote:
       | How's the camera integration? Can you programmatically open the
       | camera to capture a picture for uploading? Or does it still need
       | the "file picker" menu interface?
        
       | l72 wrote:
       | I have used this for some of my web apps, and it has been really
       | great to have them in the store. However, Apple has given me a
       | hard time on some of my apps since it is against their rules if
       | your app doesn't provide additional utility over a website.
        
         | ngokevin wrote:
         | What sorts of apps were given a hard time? Like where's the
         | line between a full webapp and website. Does the webapp need to
         | hook into device-specific APIs to not be a website?
        
           | l72 wrote:
           | It is hard to say with Apple, it seems highly dependent upon
           | the reviewer. In one case, I just resubmitted the same app
           | with a different build number and it then passed through
           | review just fine. /shrug
        
       | samwillis wrote:
       | Whats the advantage of this over Capacitor
       | (https://capacitorjs.com) from the Ionic team?
       | 
       | Capacitor supports notifications and would be more extendable
       | going forward I think. Although maybe more work upfront?
        
         | judah wrote:
         | I'm no expert in Capacitor, but from what I understand,
         | different goals.
         | 
         | Capacitor aims to give expose native functionality via runtimes
         | and plugins. A kind of mixed web/native hybrid.
         | 
         | PWABuilder's aim is more limited in scope: to make PWAs great
         | on iOS. We are not so much concerned about exposing native
         | functionality, and more concerned about making PWA
         | functionality work everywhere.
         | 
         | We address some of this in our iOS FAQs:
         | https://blog.pwabuilder.com/docs/ios-faq
        
           | samwillis wrote:
           | Just had a quick look and it seems you can achieve the same
           | thing with Capacitor:
           | https://capacitorjs.com/docs/web/progressive-web-apps
        
             | judah wrote:
             | Still different goals there. You add Capacitor's JS runtime
             | to your PWA then use plugins and other Capacitor-based
             | capabilities.
             | 
             | PWABuilder's goal is more limited in scope: take your
             | existing PWA, no changes, and publish to app stores.
             | 
             | For some folks, Capacitor will be the right answer. But we
             | think there's value in making PWAs as-is run well on iOS.
        
               | candiddevmike wrote:
               | I did just that when using capacitor (pointed it to my
               | dist folder, good to go). What other steps do you think
               | capacitor requires that PWA builder doesn't?
        
               | yesimahuman wrote:
               | Capacitor creator here: agreed that Capacitor absolutely
               | could be used by the PWA Builder team to power this and
               | still keep their goals/values in mind (we also have a
               | connection through Justin at PWA Builder who was an old
               | Ionic team member!)
               | 
               | I am going to chat w/ Judah about this, already have a
               | convo on github
        
               | gavinray wrote:
               | It has been really cool to watch the evolution from
               | Apache PhoneGap -> Cordova -> Ionic -> Capacitor (where
               | now Ionic is the UI component library)
               | 
               | I had strong negative experiences/opinions, all the way
               | up until Capacitor. It's good tech and an undervalued
               | option when compared to React Native.
               | 
               |  _Source: Have built mobile apps with PhoneGap, React
               | Native, NativeScript, and Android._
               | 
               | I'm not a fan of React Native -- though my last
               | experiences with it were many years ago so I'm sure much
               | has changed.
               | 
               | Also I don't think most "native apps" need to be native
               | apps. They want a place on the homescreen usually, not
               | use of underlying hardware API's like accelerometers.
               | 
               | Most "native apps" should really be installable PWA's or
               | using something like Capacitor IMO.
        
               | yesimahuman wrote:
               | Appreciate the kind words! Capacitor is younger than
               | anything on that list so it still has a ways to go in
               | terms of market awareness, but the general reaction we
               | see when devs try it out is very positive. When we
               | explain to people that you can build a native
               | iOS/Android/Web/Desktop app with your favorite web stack
               | and existing web code in many cases, that's turning out
               | to be pretty compelling. And, for people that tried
               | Cordova in the past, Capacitor's DX is pretty
               | dramatically different and improved.
        
         | SmileyJames wrote:
         | Capacitor is great! At the BBC, we significantly reduced the
         | cost of producing apps for children by adopting Capacitor. We
         | write one React PWA and ship it to the Play Store, iOS App
         | Store, Amazon App store and Amazon Kids+ store. It's native
         | integration helps with push notifications and also reliable
         | persistent storage on device.
        
         | riantogo wrote:
         | Can you accept in-app payments with Capacitor? Asking because I
         | did not see it listed as an official plugin.
         | 
         | My goal is to create a simple kids app that can be monetized
         | via monthly subscription. I can build a traditional website,
         | but don't have much clue on the easiest way to also publish it
         | as an app (both for iOS and Android). Any recommendation on how
         | to go about it if my skill is web development?
        
           | yesimahuman wrote:
           | Absolutely, you can do anything native in Capacitor. In this
           | case we have a guide: https://capacitorjs.com/docs/guides/in-
           | app-purchases
        
             | riantogo wrote:
             | Awesome. Thanks.
        
       | otterley wrote:
       | Please don't use tools like these. Customers want native apps,
       | not thinly-wrapped websites disguised as apps.
       | 
       | (If you reply to this thread, insisting that your customers don't
       | care, please tell us what your app is and how what value it
       | provides customers that exceeds the website's functionality.)
        
       | Aulig wrote:
       | Disclosure: I operate a similar but commercial service at
       | https://webtoapp.design
       | 
       | Whether your webview app will get published in the app store
       | depends on how "app-like" your PWA looks and if you get a strict
       | app reviewer.
       | 
       | I instead add native components to the apps I create to make sure
       | they look more like an app, which works well to get the app
       | approved by Apple.
       | 
       | From my experience, push notifications are a very important
       | feature too, almost all of my customers want that. I haven't
       | found a way to reroute browser notifications to the app, so
       | instead I use firebase to let my customers send notifications.
        
         | judah wrote:
         | I wasn't familiar with your site. Looks really cool, and you
         | support some platforms we don't. Best of luck to your project!
         | 
         | Seems Firebase is the way a lot of folks are achieving Push
         | Notifications on iOS.
        
           | Aulig wrote:
           | Thanks!
           | 
           | Yea, Firebase is pretty nice because you can use it on both
           | Android and iOS and it's free :)
        
             | dorianmariefr wrote:
             | OpenSignal is free too and works really well
        
         | sebslomski wrote:
         | Looks really interesting. Well built website with very well
         | working CTA!
        
       | dorianmariefr wrote:
       | My app is a React Native app with a webview, quite simple to
       | create/manage/modify and I have notifications, native logins,
       | etc. with communication between the webview and the native app
        
       | kristiandupont wrote:
       | >Despite several meetings, we were unable to get an official
       | answer from Apple.
       | 
       | Sigh.
        
       | slt2021 wrote:
       | can this dramatically reduce cost of mobile app development, esp
       | for small-to-medium businesses?
        
         | judah wrote:
         | We think so.
         | 
         | PWAs can alleviate the need to build 4 separate apps:
         | 
         | - Web app - Android app - iOS app - Windows app
         | 
         | With PWAs, you can build a Progressive Web App, and publish it
         | everywhere. We recognize that this doesn't work for every
         | scenario -- maybe you need to use some non-standard proprietary
         | technology for instance -- but for a majority of apps, it works
         | well and saves you development costs.
        
       | astashov wrote:
       | If it works, this is awesome. I've used it before to add my PWA
       | (liftosaur.com) to the Android store, and it's way easier to get
       | users from there, than to explain them how to install PWA. Will
       | try it out for iOS definitely.
        
       | amelius wrote:
       | Why are they helping Apple kill the web?
        
       | crehn wrote:
       | > Progressive Web Apps (PWAs) are web apps that use service
       | workers, manifests, and other web-platform features in
       | combination with progressive enhancement to give users an
       | experience on par with native apps.
        
       | fullwaza wrote:
       | Neat, but what stops someone from publishing your PWA under their
       | own dev account? Sure you still control the site and data, but
       | they could publish with inappropriate icons, wording, etc. It
       | seems like maybe there is some potential for abuse.
        
         | my123 wrote:
         | App Review, the same as any other app really.
         | 
         | (and ofc, the risk of false negatives is present)
        
         | Drew_ wrote:
         | This potential for others stealing your content has always been
         | present though I suppose this tool would make that even easier.
         | Android has the Trusted Web Activity which somewhat solves this
         | problem: https://blog.chromium.org/2019/02/introducing-trusted-
         | web-ac...
        
       ___________________________________________________________________
       (page generated 2021-10-29 23:00 UTC)