Suggestions on iOS Mobile App creation

I’m starting a new project and would like to use the Meteor framework. Below is a list of requirements:

  1. App will run on iOS 9 running on an iPad Mini.
  2. The app will be preloaded with videos that need to be stored on the device. These videos will be stored on the device at app installation time. The purpose of this is to minimize the data usage.
  3. The app will also record video and store it on the device. If the device is on a WIFI connection the app will begin to upload the recorded video to the cloud.
  4. The App will track the gps location of the user.

I’m trying to figure out if using Meteor and Cordova is the right solution. I’ve built a large CRM with Meteor and am familiar with it. Currently I’m playing with React JS and like it too for it’s simplicity; but have a lot already built in Meteor.

Any suggestions would be welcomed.

thanks in advance.

Based on the requirements, I’m not seeing any red flags. Although I haven’t made any iOS app yet with video functionalities (only images) but the plugins that you will use will be the same as handling images.

The only thing I don’t like about Meteor + Cordova + iOS is the warnings in xCode for deprecated functions due to cordova plugins. They work but be ready to see tons of warnings in xCode. The challenge is to find plugins that are actively maintained (plus points to the cordova maintained plugins)

Thanks so much for your prompt reply. I’m wondering if being able to record a video through the device and save it in the device… and later when there is a WIFI connection be able to upload to the cloud.

Do you know of plugins that would do such tasks.

On top of my head:

  1. I will use the default cordova camera plugin to record a video
  2. Then use meteor feature to detect if the user is connected to the internet or not (combine this with the default cordova plugin to check if connection is Wifi or not)
  3. If not connected, use the nativestorage plugin like a cookie to tell the app the there are pending uploads e.g. saving the filename path of the recorded file
  4. Again using meteor connection feature, once connected, check nativestorage for pending uploads and then proceed to upload if any

I have no experience uploading huge files with meteor + cordova but there might be plugins or packages there to handle interrupted uploads.

It sounds like you want to use a hammer instead of screwdriver b/c you are really good with hammers. That’s ok… since the os-specific stuff you need is minimal.

Based on your constraints, I don’t see anything blocking Meteor/cordova. I offer the following:

  1. build a quick ios app with Meteor and see if you are getting the UX to match your needs.
  2. I think if you simply drop your videos in the “/public” dir of your project they will get bundled nicely into your app package. And playing them will be trivial.
  3. For uploading, do not use “CFS” package. Bad, bad. I’m pretty sure “slingshot” is all-or-none, but it works. There might be something else out there, or roll your own.

Meteor + iOS Cordova isn’t suitable for “offline” apps. I know people will suggest all sorts of hacks for it, but it’s going to get really crummy really fast.

I suspect from the obsolete iOS version and the use of iPads that you may be making a kind of installation/deployment sort of project where you hand off devices and support is very tricky. Having worked on a project using video and offline devices like this, making a native iOS app was pretty much the only way forward, especially to deal with the spotty Internet usage.

My concrete recommendations are:

  • Build a conventional Swift/Objective-C iOS app.
  • Use Amazon Cognito for user accounts.
  • Use the background transfer tasks URLSessionUploadTask and URLSessionDownloadTask to transfer videos to and from an S3 bucket. Use the Cognito-based workflow for auth. There is no viable alternative to these URLSession methods for transferring large files like video on iOS, and you’re going to encounter a huge amount of pain, especially in something glitchy like Cordova, doing it any other way.
  • Use a simple REST endpoint hosted by AWS Lambda or Serverless to record the user’s location to a Mongo database of your choice.
  • Build a meteor application to support whatever business UX on the web it is that your client requires. If end user and backend user accounts must be shared, using Cognito with OAuth2 in Meteor is pretty easy.

You can use Firebase for accounts and entity storage instead, but I believe Cognito will be less expensive.

1 Like