capacitor-community / proposals

Plugin and platform requests āœ‹
75 stars 2 forks source link

Open Source Hot Code Push / Over The Air Updates #43

Open alexcroox opened 4 years ago

alexcroox commented 4 years ago

Plugin Request

Name: Capacitor Hot Code Push Package: @capacitor-community/hot-code-push

Platform(s)

Android, iOS

Existing Solutions

MS Code Push - Free, very popular for Cordova, no Capacitor support yet

App Flow - Paid solution with very expensive plans given the low update limits. No API to upload built web directory on normal plans, not very flexible to binaries built elsewhere

Description

Over the Air Updates / Hot Code Push is the ability to update the js/css/html of your app in real time without having to go through the app store and waiting for reviews. This allows you to push critical fixes out quickly inline with your web app deployments instead of waiting days for Apple to approve entire binary updates.

It would be great if a plugin could facilitate over the air updates from a server/endpoint of our choosing where the developer controls the hosting of the OTA updates.

The key to the plugin is the ability to download a zip file of your updated dist folder, extract it, tell Capacitor to launch from this new directory until told otherwise.

There are other factors like verifying updates, choosing when to install them (forced on launch or next time the app is given focus after downloading etc), and optionally downloading only what has updated.

mlynch commented 4 years ago

For those looking to do remote app updates in their Capacitor apps, Appflow is a great choice, and it does have an API: https://useappflow.com/

If there's anything we can do to improve the Capacitor + Appflow experience please let us know.

Otherwise, leaving this open for discussion on the topic of microsoft code push.

amakh commented 4 years ago

We were willing to give a try to Appflow but even the 25k live updates / month (on the highest plan) is very limited considering that 1 live update = 1 device. In our case, that makes only 2 updates per months (for now, soon only 1) and maybe that could be enough but we don't want to be in the stress that we don't have a 'second chance'. And we won't be using any other Appflow features to be honest so neither the Entreprise plan is good to us :/

So any plugin that could just do this job is very welcome šŸ‘

lovetingyuan commented 4 years ago

We just need a pure plugin that offers API to manage(update, delete, add) web assets.

alexcroox commented 4 years ago

I think updating/deleting assets in use might cause all sorts of issues with a running app so it's probably safer to move the downloaded files into a new directory and set the app to launch from that new folder (Plugins.WebView.setServerBasePath?)

A good point though, a light touch native layer with an API to handle just the above, leaving the JS layer and the developer to handle the downloading and version checking etc themselves would great (and quicker/easier to develop).

imhoffd commented 4 years ago

@alexcroox Those WebView methods are being pulled into Capacitor core for Capacitor 3, so the usage in native and JS may change slightly, depending on if we try to make it backwards compatible, but they'll still exist. Pretty sure they're all that's needed in Capacitor itself, but someone would need to build plugin(s) that use them.

PIXPOINT commented 4 years ago

Maybe for some inspiration for a new Plugin. In the repository areo/capacitor-codepush something is used like setServerBasePath as @alexcroox suggested. But unfortunately I didn't get areo/capacitor-codepush up and running.

https://github.com/areo/capacitor-codepush/blob/47a32309ae00f767f46a54ab6a807ebd9721f62c/android/src/main/java/com/microsoft/cordova/CodePush.java#L411

alexcroox commented 4 years ago

After much experimentation these last couple of evenings I've made some progress on working this out:

  1. Find out the current install path (just so we have a baseline)

serverBasePath = await Plugins.WebView.getServerBasePath()

In my case with the simulator this is:

{"path":"/Users/alex/Library/Developer/CoreSimulator/Devices/DFB2C8C5-2B02-4071-91DA-E2B5EA8FA02A/data/Containers/Bundle/Application/6279F51C-0757-4BBA-B7D6-E8D611EEC26D/App.app/public"}
  1. I built another version of the app and zipped up the ios/App/public folder. I then uploaded this to S3 to test the download.

  2. Download zip from S3 using Plugins.Http

const fileDownload = await Http.downloadFile({
        url: `https://xxxxx/app-updates/2.1.1.zip`,
        filePath: '2.1.1.zip'
      })

Not providing a directory seems to put it in a Documents folder by default.

file:///Users/alex/Library/Developer/CoreSimulator/Devices/DFB2C8C5-2B02-4071-91DA-E2B5EA8FA02A/data/Containers/Data/Application/83EF3EAE-1426-47B5-B4EE-56B37CB66991/Documents/2.1.1.zip
  1. Using cordova-zip-plugin I extract this to the same Documents folder ...Documents/2.1.1/

  2. I now tell Capacitor to permanently launch from this new folder instead of the app/public one:

Plugins.WebView.setServerBasePath({ path: '/Users/alex/Library/Developer/CoreSimulator/Devices/DFB2C8C5-2B02-4071-91DA-E2B5EA8FA02A/data/Containers/Data/Application/83EF3EAE-1426-47B5-B4EE-56B37CB66991/Documents/2.1.1' })

Plugins.WebView.persistServerBasePath()

And voila the webview reloads automatically and I'm looking at the version of the app I have just downloaded (verified by including some different text in the UI)! šŸš€

But now I'm stuck. Force quitting the app and re-launching no longer loads either app version, and just hangs on the splash screen without error. I can't work out where I went wrong in persisting it.

levarberry commented 4 years ago

If I may... This is more a business solution than a technical solution. AppFlow "works". No it is not free like CodePush. However, CodePush doesn't work that well with anything other than React Native. MS has a different business model and motive for giving away CodePush. @mlynch is not in the same position.

I too was once upset about the price difference. I expressed it in blogs, forum, twitter, slack .. everywhere. FREE vs $50/month. Max changed his per app pricing to allow for smaller groups to be included without having to spend as much. He made a comprise. $50/app/month was extreme but again he and the Ionic team saw our pain and made the adjustment.

For as much as Max and his team has given to us for $0. Is $49/month really make or break that we'd rather give it to Amazon/Azure directly? Wouldn't we rather give it to someone who will turn that into something that will directly give you a competitive advantage?

What if? There was a plan below the 10k? Buy extra Deploys(i think there is already)? Rollover unused Deploys?

To cut back on usage .. only use it on iOS since Android approves in <2hrs.

Lastly there could be a DIY version where you build and host the artifact/manifest yourself and the Ionic Deploy API can read a manifest to determine when/if to download and apply it. This increases the risk you'll BRICK your app or it could get comprised.

alexcroox commented 4 years ago

CodePush works great with our old Vue Cordova app so I'm not sure what you mean by the React Native comment.

I got in contact with an Ionic rep to discuss enterprise costing because our user base (majority free) would quickly fall out of the low update cap per month the $49 offers. We were looking at $8,500 a year minimum for AppFlow enterprise which isn't possible for our startup, which is why we are looking at open source alternatives.

levarberry commented 4 years ago

@alexcroox Thanks for bringing up your story. This is the type of dialogue that would be great for the Ionic team to hear.

First, I said "works well" with RN. It does work with Cordova now. There was a long gap from the previous version to AppCenter's version support of Cordova. I still don't find it as smooth as how it works with RN.

Here's more of my opinion on their "low deployment numbers". I'd side with everyone in saying the number is low. I'd hope to have all my apps with more than 10K-25K users. It would be easy to just do a Native App Store deployment ONLY if I changed a native feature and let live Deploy do the rest.

BUT! is that really a good idea? .. idk.

What about this solution... it is a bit more work.. but would help keep the the number needed down to a minimum.

WIth this approach your App Store "LastUpdate" date is real. Your store version numbers are real. You minimize the need to rely 100% on over-the-air updates, but still able to get out critical fixes ASAP. Only active users in that 1-3 Day window will need to pull the Live Deploy.

mlynch commented 4 years ago

Thanks @levarberry. We're also working on a bunch of new updates to Appflow that should make Capacitor development even better. Also something to keep in mind with Appflow pricing: we're not charging you for the number of updates you make a month (in this case, one or two), we're charging on the delivery of those updates to your users which is what costs money (i.e. bandwidth costs). I think we'll see Appflow become much more interesting to Capacitor developers than anything coming from Microsoft as they are not focused on web devs building mobile apps.

That being said, will definitely take this feedback into consideration as we think about how to better fit Appflow w/ the needs of the market.

SalahAdDin commented 4 years ago

I found this package but its repository was deleted.

gustavopch commented 4 years ago

@mlynch Prices that fit in the USA where GDP per capita is about 60k USD don't always fit in countries like Brazil where GDP per capita is about 8k USD. :/

ap1969 commented 3 years ago

@alexcroox There was another plugin for cordova at https://github.com/nordnet/cordova-hot-code-push that might be worth a look at for inspiration.

I think it installs the new version into a new subdirectory, as you have done, but then copies/moves it into the default directory that the installed apk/ios app uses. (I'm working from memory from looking into this a few years back).

Hope that helps - I'm not an ios/android developer, but would love a solution to this. I've been using Appflow, but the inability to get a good view of what's going on under the hood is causing me problems with an android build that's failing, and Ionic's support didn't spend any time looking into it even though I supplied the build reference, so I'm done with them.

Andy

ap1969 commented 3 years ago

Further to this, I've tried the line that @alexcroox used earlier (serverBasePath = await Plugins.WebView.getServerBasePath()) to get the html directory, and all I get is "public", not the full resolved path.

I've tried: Logger.debug(Paths.get(".").toAbsolutePath().normalize().toString());

and I get "/"

I've looked in Android Studio's Device File Explorer, and can't see any of the ionic app files in /data/data/com.app.name/ subfolders.

Anyone got any idea how to view the files?

Regards, Andy

alexcroox commented 3 years ago

@ap1969 it's been a while since I've looked at this but I seem to remember Plugins.App.getLaunchUrl() as another option for viewing paths

GalvinGao commented 3 years ago

Just tried with AppCenter and, although the project hasn't called for support, it seems that by using their Cordova plugins AppCenter could work. I haven't tested with Code Push yet, but Analytics seems to be working.

See my comment at https://github.com/microsoft/code-push/issues/615#issuecomment-761651376

lincolnthree commented 3 years ago

Has anyone seen this plug-in? Looks like someone has most of the basics coded (I have not tested it), but it looks simple enough:

https://github.com/deveshmishra34/penpencil-app-update

We too are in a similar situation. Appflow would be fantastic to use, but we have wayyyy more users than the pricetag allows. Problem is, our app is freemium (doesn't make much money yet) and we can't afford custom/enterprise pricing generally.

I'd happily pay some regular fee for appflow membership, updates, if I could host and pay for update bandwidth myself without the exploding cost of per-update pricing on our mostly free / unpaid app.

Anyway, that's why I'm here.

GalvinGao commented 3 years ago

Has anyone seen this plug-in? Looks like someone has most of the basics coded (I have not tested it), but it looks simple enough:

https://github.com/deveshmishra34/penpencil-app-update

We too are in a similar situation. Appflow would be fantastic to use, but we have wayyyy more users than the pricetag allows. Problem is, our app is freemium (doesn't make much money yet) and we can't afford custom/enterprise pricing generally.

I'd happily pay some regular fee for appflow membership, updates, if I could host and pay for update bandwidth myself without the exploding cost of per-update pricing on our mostly free / unpaid app.

Anyway, that's why I'm here.

Agreed and same here. We are just a totally-free community website who just want to use the mobile app to deliver more of a better UX. We are also OK to pay for some acceptable membership price but currently the pricing plan is just gonna cost us too far away from what we could afford with...

We are also willing (and even prefer to - given that majority of our user is in China, the CDN out there are probably really slow in the internet environment here without a targeted optimization) to host our own hot update assets, paying the bandwidths ourselves. I know that the Ionic team and Capacitor team may have devoted tons of their spirit in this (and I appreciate that too - AppFlow seems to have a nice looking frontend UI), but again, given the current pricing plan, we are just unable to afford it at all.

ap1969 commented 3 years ago

I gave up. This issue, and a total lack of interest from ionic when I raised an issue with the build of my android app on their Appflow service (despite me paying for it), made me look elsewhere. I looked at react native (nightmare in this area), nativescript (they have an OTA package in beta, but the creator has gone AWOL for 3 months). And I'm now back on Cordova with Quasar front end and MS code push. It works.

lincolnthree commented 3 years ago

@GalvinGao If you try that plugin, I'm interested to hear what your experience is like. As most things open-source, I'm guessing it would take some work, but I think a group effort could make it feasible. We're going to start looking into it in a month or so once we get to the "update our app-store apps" phase of our launch.

GalvinGao commented 3 years ago

@GalvinGao If you try that plugin, I'm interested to hear what your experience is like. As most things open-source, I'm guessing it would take some work, but I think a group effort could make it feasible. We're going to start looking into it in a month or so once we get to the "update our app-store apps" phase of our launch.

I'll take a look on that recent days. That's being said, I also had a success (probably just a lucky one) with the AppCenter plug-ins (but not yet officially supporting Capacitor), mentioned here.

leo6104 commented 3 years ago

I made capacitor-code-push plugin prototype with Capacitor 3.0.0-beta.1 + cordova-plugin-code-push@2.0.0

https://github.com/mapiacompany/capacitor-codepush

It forked from https://github.com/areo/capacitor-codepush and merge cordova-plugin-code-push master 2.0.0 branch. And doing some changes to make it available to install on Capacitor plugin.

Install

npm i https://github.com/mapiacompany/capacitor-codepush -D
npx cap sync

it also require these plugins

    "@capacitor/core": "^3.0.0-beta.1",
    "@capacitor/device": "^0.5.1",
    "@capacitor/dialog": "^0.4.1",
    "@capacitor/filesystem": "^0.3.1",
    "@capacitor-community/http": "^0.2.1",

Configuration

Add your deployment keys to the capacitor.config.json file, making sure to include the right key:

"Plugins": {
    ... (other plugins)
    "CodePush": {
      "IOS_DEPLOY_KEY": "ANDROID_DEPLOYMENT_KEY",
      "IOS_PUBLIC_KEY": "APP_SECRET_KEY",
      "ANDROID_DEPLOY_KEY": "IOS_DEPLOYMENT_KEY",
      "ANDROID_PUBLIC_KEY": "APP_SECRET_KEY",
      "SERVER_URL": "https://codepush.appcenter.ms/"
    }
}
import { codePush } from 'capacitor-codepush';
// codePush.sync();
// codePush.checkForUpdate(console.log);

Functions

Please try this plugin and Feel free to create PR. I hope someone can do more progress with my repository.

How to deploy

use command

appcenter codepush release -a Id/AppName -c www/ -t VERSION -d Production -k config/code-push-private.pem

TODO

alexcroox commented 3 years ago

Fantastic effort so far @leo6104 thank you!

lincolnthree commented 3 years ago

Hey @leo6104, this looks like a great start! Thanks for sharing.

Out of curiosity, it looks like this requires an AppCenter account - looks like they offer a quite reasonable subscription that includes "Distribute: Unlimited distributions and users"! We'll definitely look into this in a few weeks when we get into this part of the project.

Unfortunately we aren't iOS developers, either :/ It looks like that is the last remaining open issue/blocker on your checklist, is that right?

What is the feature that's not working on iOS? I'm not sure why it's referencing Cordova APIs? CDVViewController

Is this code useful from the plugin I linked above? https://github.com/deveshmishra34/penpencil-app-update/blob/master/ios/Plugin/Plugin.swift https://github.com/deveshmishra34/penpencil-app-update/tree/master/ios/Plugin

leo6104 commented 3 years ago

@lincolnthree

Out of curiosity, it looks like this requires an AppCenter account - looks like they offer a quite reasonable subscription that includes "Distribute: Unlimited distributions and users"! We'll definitely look into this in a few weeks when we get into this part of the project.

It requires AppCenter account and all free to use code-push deployment in AppCenter.

Unfortunately we aren't iOS developers, either :/ It looks like that is the last remaining open issue/blocker on your checklist, is that right?

Right! it only have an issue with iOS

What is the feature that's not working on iOS? I'm not sure why it's referencing Cordova APIs? CDVViewController

I share you current status.

capacitor-codepush Plugin Status

For Android, it works in common case. I will use this plugin in my production project (two application we have). And continue to manage the project to be stable. For iOS, Capacitor doesn't inject CodePush variable to import { Plugins } from '@capacitor/core'; so it doesn't work.

Problems in Android

https://github.com/ionic-team/capacitor-plugins/pull/233 @capacitor/file-system has an issue with copy method. After it merged & released, it will be resolved.

Problem in iOS

Now, it has Cordova implementation. but It detected to Capacitor plugin. So, Capacitor doesn't read CDVPlugin implementation in the code. It seems Capacitor CLI only detect CDVPlugin implementation within capacitor-cordova-ios-plugins folder. they only search CAPPlugin for Capacitor plugin.

According to Capacitor CLI implementation, if package.json has "capacitor" value, it stop to extract plugin.xml. https://github.com/ionic-team/capacitor/blob/e148e67c6061be35db361496444d5fa85544a068/cli/src/plugin.ts#L90-L109 It will make Capacitor search Plugin.swift file and CAPPlugin implementation. (Not CDVPlugin implementation)

Soltuion

Reimplement all CDVPlugin method to CAPPlugin code pattern.

@interface CodePush : CDVPlugin

- (void)getServerURL:(CDVInvokedUrlCommand*)command;
- (void)getDeploymentKey:(CDVInvokedUrlCommand*)command;
- (void)getNativeBuildTime:(CDVInvokedUrlCommand*)command;
- (void)getAppVersion:(CDVInvokedUrlCommand*)command;
- (void)install:(CDVInvokedUrlCommand *)command;
- (void)preInstall:(CDVInvokedUrlCommand *)command;
- (void)isFailedUpdate:(CDVInvokedUrlCommand *)command;
- (void)isFirstRun:(CDVInvokedUrlCommand *)command;
- (void)isPendingUpdate:(CDVInvokedUrlCommand *)command;
- (void)restartApplication:(CDVInvokedUrlCommand *)command;
- (void)getBinaryHash:(CDVInvokedUrlCommand *)command;
- (void)getPackageHash:(CDVInvokedUrlCommand *)command;
- (void)decodeSignature:(CDVInvokedUrlCommand *)command;
- (void)getPublicKey:(CDVInvokedUrlCommand *)command;
leo6104 commented 3 years ago

Success to implement all iOS CAPPlugin version.

codePush.sync() codePush.checkForUpdate()

lincolnthree commented 3 years ago

@leo6104 This is fantastic! We'll try it as soon as we can! Nice documentation, too!

lincolnthree commented 3 years ago

FYI. For anyone finding this thread. The AppCenter CodePush plugin for Capacitor is WORKING and in active development. Please try it out here:

https://github.com/mapiacompany/capacitor-codepush

nonsenseless commented 3 years ago

@mlynch Per your request for feedback, the thing I like least about AppFlow is that it forces you to upload your source code to a VM and hope to god that build process understands your directory structure well enough to build it. If it doesn't, you have to futz with it repeatedly to create a build script that will get everything in the correct shape to survive the process.

App Center is a substantially better experience (IMO) because you can manage your build process locally and then you just have to point it at your www folder and let it go to town.

mlynch commented 3 years ago

@nonsenseless thanks for the feedback. You can work around this in appflow by doing the build locally and checking in those compiled files.

We will definitely consider making this easier. With App Center's uncertain future we want to make sure teams can migrate to Appflow and not have to significantly change their workflow.

nonsenseless commented 3 years ago

@mlynch Is this documented anywhere? You're saying I could check in the www folder and have that processed by AppFlow somehow?

mlynch commented 3 years ago

Yes you can, see this: https://ionic.io/docs/appflow/cookbook/appflow-build

Basically you will check in www and then set this appflow:build script to "true" which means appflow won't do a build but you can keep your regular build npm script.

Then appflow will use the builtfiles in your www folder as it would after a normal build.

phuthuycoding commented 3 years ago

@leo6104 Hi Leo I have fork repo of you and edit some function to work on capacitor v2. I tested on android , this is work good. But on ios i can't not call setServerBasePath function on CAPBridgeViewController, I found issues because CAPBridgeViewController not @objc class and setServerBasePath is not objc method.

How i can call this method or something else same method on capacitor v2.

Anw, can you create branch 2.x of your repo, I want develop with you. I have create pull request on capacitor, If this pull request to be merge by capacitor issues is resolve

https://github.com/ionic-team/capacitor/pull/4504

skjece commented 3 years ago

Thanks @levarberry. We're also working on a bunch of new updates to Appflow that should make Capacitor development even better. Also something to keep in mind with Appflow pricing: we're not charging you for the number of updates you make a month (in this case, one or two), we're charging on the delivery of those updates to your users which is what costs money (i.e. bandwidth costs). I think we'll see Appflow become much more interesting to Capacitor developers than anything coming from Microsoft as they are not focused on web devs building mobile apps.

That being said, will definitely take this feedback into consideration as we think about how to better fit Appflow w/ the needs of the market.

@mlynch isn't it possible for Ionic to provide a plugin that allows developers to alter/delte/add files in public/asset folder. We can host the files (JS,HTML,CSS,Images) ourselves on Github. That way it can be used free of charge as you won't need to host anything.

lincolnthree commented 3 years ago

@skjece Just to play devil's advocate, there's nothing stopping them from doing it, but there's also no incentive for them. They need to make money and they've, reasonably, provided plugins that work with their very painstakingly built tools and services.

While I do think the price of this service from Ionic & AppFlow is extremely / unreasonably high, which presents a barrier to entry that most small-mid developers cannot afford, there is also an open-source alternative you can use today if that cost is a deterrent:

https://github.com/mapiacompany/capacitor-codepush

The Capacitor CodePush plugin is actively being developed and we welcome contributions if you find something wrong or would like to add a feature! Microsoft AppCenter also offers the FREE code push to unlimited number of devices, any number of times that you are looking for. It takes setup that Ionic would do for you, but that's the trade-off :)

Cheers and thanks again to the Ionic team for a great open source framework and tools!

mlynch commented 3 years ago

One thing to keep in mind: there's a good chance Microsoft will decide to sunset codepush which is another reason we won't be supporting it.

They've been extremely quiet on the app center front, with the only communication being to say they've completely frozen their roadmap to fix deep technical issues. That is a very ominous sign, especially since their last big update was to sunset their push notification service and it's unclear where visual studio cloud services fit into the Azure strategy. Even looking at their Twitter, they've gone almost completely radio silent!

Obviously I'm biased but Appflow will always be the best cloud solution for Capacitor because it's built by most of the same people who make Capacitor. And it has a bright future since we are investing considerably in it. I can't say the same about what I'm seeing with Appcenter.

On the pricing side, we are actively exploring ways to make it better aligned for what indies need. Stay tuned...

lincolnthree commented 3 years ago

@mlynch yeah, I've heard that is on the possibility spectrum as well. If that flow pricing were more "Indy"-friendly as you hinted, I would be very interested :)

One more thing to mention about the code push plugin is that you can specify your own server and implement the basic endpoints to do release distribution yourself. Obviously I can't really recommend that unless you want to spend a lot of time testing your service, and then you are also obviously on the hook for bandwidth, but it is an option if one really can't afford a reasonably priced service :-)

tolutronics commented 3 years ago

Yes if the pricing is friendly i would prefer Appflow too

jmellicker commented 3 years ago

Yes you can, see this: https://ionic.io/docs/appflow/cookbook/appflow-build

Basically you will check in www and then set this appflow:build script to "true" which means appflow won't do a build but you can keep your regular build npm script.

Then appflow will use the builtfiles in your www folder as it would after a normal build.

@mlynch it would be wonderful to just build locally, and not have to build in AppFlow, but I found the documentation insufficient for me to implement this workflow.

Could you provide a step-by-step guide? (I'm using Vue/Quasar/Capacitor, and "Ionic Remote" as a repo for OTA updates).

nonsenseless commented 3 years ago

@jmellicker You'll need to do the equivalent of

git add www git commit -m "Added www folder"

You'll need to check your .gitignore to make sure that the www folder isn't being ignored (it probably is). At that point, your www folder is checked into git and your AppFlow pipeline will be able to read from it.

jmellicker commented 3 years ago

Thanks @nonsenseless !

GalvinGao commented 3 years ago

@mlynch Yeah Appflow also looks pretty appealing for me, but the pricing is just simply unaffordable as an open-source project here. Also a majority of our users are located in China Mainland, in which connectivity to foreign servers is an issue, so a possibility of having a self-hosted instance of Appflow would be a huge plus! Looking forward for the new pricing plan :D

Silventino commented 3 years ago

@mlynch Appflow prices are waaay over the top. I think a free tier or a cheaper plan with less features would be awesome.

riderx commented 3 years ago

@mlynch this subject is coming over and over, please do something for INDIES. Do a presale put a price who fit and see if you make more money than current one, if not refund us and tell the true, it will not work. Same as Expo : https://expo.dev/pricing 29 euro by month for appFlow "push update" for solo, I paid blindly, and many here will do too.

As solo funder I don't need CI, I have Github Action for web and I do native build myself but not often and it's useless my changes are web based 99% of the time .

Have Github Action who create build and use Appflow to tell the app to download it in github it enough

29 100 000, is better than 499 10 That the final step to make all other Web to native solution useless

mlynch commented 3 years ago

Hi all, as I suspected we'd see happen soon, Microsoft just announced the end of Cordova support for Code Push. Given they paused all feature development on App Center last year and have had a stream of service shutdowns and retirements, we don't think it makes sense to invest in further integration with App Center. I suspect what will happen with App Center eventually is it will be sunset to get developers to move to corresponding Azure services (if there are any), and these shutdowns are just the start.

Of course, the community can fill in this gap but the future for App Center doesn't look very encouraging. We are trying to evaluate the impact of this shut down to see if we can make it easier for developers using Code Push to move to Ionic Appflow which has superior remote app update features for Corddova and Capacitor, along with native builds and app store publishing. Stay tuned for more info on that when we have it.

o-alexandrov commented 3 years ago

@mlynch The mentioned AppCenter news has nothing to do with using Capacitor.

While there is no active development to the previously created solution, you could see issues are promptly addressed in AppCenter's repo as well as they mentioned ongoing work.

Some references how you can configure AppCenter w/ Capacitor (as a native iOS / Android project):

Using Appflow is financially unreasonable for any company, unless it's a small scale internal tool.

mlynch commented 3 years ago

@o-alexandrov this news from Microsoft is absolutely significant and is now a pattern of service sunsets and shutdowns impacting App Center. As an outsider, it's clear that Azure is the future for cloud at Microsoft. As a service under the Visual Studio brand, it's not clear where this fits in Microsoft's strategy. Again, feel free to integrate with it but at your own risk. We won't be taking that risk ourselves.

As for Appflow, happy to chat more about how we can make it work for your team. We just rolled out new Community and Startup pricing for indies and startups!

o-alexandrov commented 3 years ago

@mlynch thank you for the added pricing options. However, personally, I wouldn't suggest any of my clients to use it even based on the updated pricing.

With an exception, it's great to support Ionic hoping it'd further improve Capacitor.js. Please consider adding the following:

  1. The distribution needs a pay-per-use model based on the computing minutes spent
    • at least similar to GitHub Actions
  2. Over-the-air (OTA) updates needs a self-hosted option
    • letting devs to upload assets on, for example AWS S3, and pointing AppFlow to the uploaded version
mlynch commented 3 years ago

Sorry to hear that. We think it's a awesome service and we have thousands of customers on it and hundreds of enterprises that really, really like Appflow. Since it's built for Capacitor (and Cordova) and by many of the same people who work on Capacitor, the level of deep integration we're able to have is second to none and we're going to be adding more and more features that will take advantage of this deep integration soon.

If you ever want to give it a more thorough try let me know and I'd be happy to set you up with a longer trial!

Also we do support self-hosted assets for live updates and have a number of teams using that feature.