iOS Enterprise distribution through webapp? - iphone

We need to be able to easily install our in-house apps on our devices and quickly update them no matter where they are.
I'm looking into different ways of distributing our in-house app to our staff. So far I've found iTunes, iPhone Configuration Utility, install via a web link, etc...
Our devices will more than likely not be in proximity to our office and mostly rely on 3G, so it seems that the web link is my best free option.
I made a web-app that I can add to the home screen to install / update the application. What I want to do is make the web-app more intelligent: Display an "Install" button or an "Update" button. Ideally I want the web-app to know what version of the app is already installed.
The only way I can think of doing this: When the user clicks the install link store the version number in localStorage. When they return later compare that to what's available and display the right button.
The biggest issue with this "solution" is, what if the user clears Safari's cache? Do home screen apps have their own protected cache?
Another option is have the app itself relay its version number to the server and store that in a database. But this is more complicated, so I would like to avoid that. If I could use a url scheme to get the version number without launching the app, that would be acceptable. But I don't think it's possible.
So given that we need to readily update the app quickly on the device no matter where our staff travel, what is the easiest, best, and preferably free solution?

It's really simple... the app can update itself by opening a weblink... you don't have to open it in safari. So on app start just check the version from the web server and when it's not up to date it can update itself.
You could also send a remote notification if it's urgent.

Related

Can you delete an application from another application?

Like this article,
In Android, can you delete an application from another application?
Can you delete an application from another application on windows phone 7 or 8? (including
enterprise features)
and I have a same question with iOS. I know that enterprise features provide installing another application via url. but what about "uninstalls", does it possible ?
No, Windows Phone will not allow your app to access any files outside your own app's sandbox. You can't delete other apps or even access their data. Allowing an app to do so would be a huge security problem.
In iOS, it is not possible to delete an app from another application. Apple will never allow that in a normal device. I am not sure about jail broken iPhones. User has to manually delete an application for normal devices. Looks like even Windows phones wont allow this.
Wrt. to enterprise features, you can install packages, as well as view status of installed packages (installed, percent installed, pending install), plus various properties like app icon etc. But still no API for uninstalling these packages. See InstallationManager API on MSDN here: http://msdn.microsoft.com/en-us/library/windowsphone/develop/windows.phone.management.deployment.installationmanager(v=vs.105).aspx

Auto-updated iOS application for enterprise distribution

Is it possible to make an iOS application for enterprise distribution that updates itself transparently? Saying 'updates' I mean completely updating its logic.
A possible usage of this approach is a self-service kiosk (iPad) that is maintained remotelly.
It's not possible to update application binaries directly, but I see some possibilities:
Application that have a single UIWebView and the logic is implemented in HTML5. But we can't use most of hardware specific features that can be used in native applications.
Some multi-platform framework (possibly HTML5-based) that allows to use native application features and that is compiled or interpreted dynamically.
Jailbreak?
What are really working approaches of these?
Consider getting a mobile device management service. Those are pricey.
OR:
First, enable over-the-air distribution. It will take $300/year enterprise agreement with Apple. Set up a website with the app's IPA archive and descriptive PLIST.
Then code a call-home HTTP request on app startup. You may pull/parse the same PLIST that describes the latest version; it has a bundle version in it. Compare that to the version of the currently running bundle.
When a new version is detected, the app shuts down, opens the browser on the download page. In a softer manner, just notifies the user that an upgrade is available.
I've never tried linking directly to the app's download package, but give it a try. In a perfect world, Safari would open up and ask "Do you want do download MyApp?" right away. In a not so perfect world, the user would have to click a link and then agree to download.
I think what you are looking for these days is the "Apple Deployment Program".
You volume purchase iPads which get sent to people, but that you can manage remotely - which also means management including remote updates of applications.
The only thing I'm not sure of is if you can launch an app remotely, so that you could update and re-launch an application.
Here's a guide to enrolling devices for remote management:
https://www.apple.com/business/docs/DEP_Guide.pdf
An old but good summary of the program:
http://www.speirs.org/blog/2014/2/27/understanding-apples-new-deployment-programs
Also watch the WWDC video on Managing Apple Devices for the Enterprise:
https://developer.apple.com/videos/wwdc/2015/?id=301

Does iTunes pass referral parameters on iPhone once app is installed?

Is there any provision in iOS wherein the referral parameters used to start the iTunes application are passed on to the application on its first run?
For example in Android, if I use a link such as http://market.an......com.company.pany&referrer=heythere to download an app on Android and actually install the app, the Market app passes the "referrer" parameter and its value to the app on its first run, which the app can use to any extent.
Is there a similar provision in iOS?
We also struggled with this when we built our last mobile app, Kindred Photobooks. The best way we found is to basically bundle that information in the link and use fingerprinting to make that data available after install, which is working really well.
You can try to build fingerprinting in in house. Basically the steps would be the following:
1. When a link gets created, appending parameters to the link, or create a link reference in some backend database if you want shortened links
2. When a user clicks on that link, collect a fingerprint of their device from everything you can read in the browser (for example: IP, OS, screen size, etc) and redirect that user to the app store.
3. When the app opens, create a similar fingerprint from the same parameters collected in app, and match it up in your database to the outstanding fingerprint.
4. If there is a match, you can return those link parameters to the app through install.
Alternatively, if you don't want to build all that infrastructure and handle the many edge cases, we bundled it up into a free service called Branch. Check it out at http://branch.io
No, there is no such thing on iOS. But you can and should file a feature request at bugreport.apple.com, if you really need this feature.
As of iOS6, if someone installs your applications via a smart banner, you can pass a url to your app on startup. You do this by using the app-argument parameter:
A URL that provides context to your native app. If you include this, and the user has your app installed, she can jump from your website to the corresponding position in your iOS app. Typically, it is beneficial to retain navigational context because:
It should work on install:
When the app finishes downloading [after clicking install on an app banner], the View button changes to an Open button, and tapping the banner will open the app while preserving the user’s context from your website.
More here: http://developer.apple.com/library/ios/#documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html
I think this will work (but the jury is still out: Does app-argument on Apple Smart Banner get passed to app on install? ), but testing this is tough: How to test Smart App Banner Urls on in Dev environment
No, AppStore doesn't pass any parameters to application - it just unzips ipa to application folder (container).

Can I hide or make my iphone Application unsearchable on the App Store?

I want my application to be unsearchable from the App Store. I would like that only those users who sign in to my web site and then click the link of my iPhone application on app store, can install and use my application.
Is there any way to do that?
To hide your application you have to remove all the App Store countries in iTunes Connect:
Go in Manage your Applications > [Your Application Name] > Rights and Pricing
Click on "Deselect All" App Stores and "Save". The Application will change state to "Developer Removed".
To get it back on the App Store, choose the countries where you want it publish.
PS: it might take more than some hours for changes to be reflected on the App Stores.
Your application will be found when they search for the name of the app or your name. There's no special option in iTunes Connect to hide your app.
While your application will be found when searched for, as long as it's not installed in large numbers, it won't show up in the top 50 lists. Which kind of is the same.
Tip: don't specify any keywords when registering your app, as these will improve the "searchability".
Edit: you might want to implement some kind of authentication in your app, so users who do have installed your app need to register first, before they can actually use it. Relying on your app not being found, isn't very "clean".
I think, without meaningful keywords your app should vanish amongst the 99.999 other apps.
As an alternative you could let everyone (search and) download the app and disable it until the user signed in.
You can also use in-house-distribution with the enterprise program (see here).
Apple sells special developer licenses if you want to control the installation. They are meant for Enterprises to develop and deploy applications for only their use. Here's an article about it:
http://www.infoworld.com/t/platforms/new-iphone-enterprise-developer-program-299-musings-about-iphone-app-licensing-648
Since iTunes Connect has been redesigned a bit, go to My Apps > Select your app > Pricing and Availability > Availability (2nd section) > Select Remove from sale.
The best bet is to use obscure keywords on submission along with an obscure app name.
Not sure if this is going to work, but it may be worth a try:
You can set the release date of the application to the future. This removes the app from the catalog, which is a common way to remove an app temporarily (e.g. when it has problems) until an update appears.
However (this is possibly the catch) I don't know if the app will then be still available for sale via link or if the link will become unusable too.
if i were you i'd implement a "key generator", which will produce a serial that will be used to activate your application. this key generator would be free to access on your site, so whoever downloads your application through your site, would know what to do.
for those who access the application through itunes, i would also place a small text which basically says that you need to visit your site to generate a key. this way, you'd ensure that anyone who has access to your site has access to your app, and whoever finds your app will access your site.
this is i think hack proof by definition as well because noone would bother hacking it, would they? you basically give away your own serial generator for free, so it defeats the whole purpose of hacking. im assuming your concern is site traffic though.

How can I get to installed app list on iPhone device?

I'm new for iPhone dev.
I got a question for development of iPhone app.
Is it possible to get to installed app list on iPhone device?
thanks.
Connect you device in your system, use following command in terminal
ideviceinstaller -l
you will get the list of app installed in you iphone device
note: you should install ideviceinstaller package in your system
Apps on a non-jailbroken phone are "sandboxed" so you don't get unfettered access to the filesystem. This means that you can't directly see what other applications are available. Also, just because they're installed does not mean that they are available to the current user. For instance, Safari is always installed but can be disabled in the Parental Controls settings.
The best supported (i.e., in a way that Apple will approve of) way of of doing it might be to check the available URL schemes. For example, if "http:" is supported then Safari is usable; if "mailto:" is available then Mail is usable, etc. Of course, not all applications have URL schemes.
You might want to grab yourself a copy of the Apple iPhone Configuration Utility, which will give you a list of installed apps, plus access to the console output from the iPhone.
Grab the iPhone configuration tool and run this regex on the Export:
[ \t]+<key>CFBundleDisplayName</key>[ \t\r\n]+<string>([A-Za-z \&\-,\!]+)</string>
You can then grab the list of apps nice and easily.
Here's what I did, without jailbreaking. (yes it sounds stupid, but it was simple and worked well for me)
Go to your home screen.
Hit the lock button + home button (takes a screenshot)
Open you folders and do the same.
Do the same for any other pages you have.
All the names of installed apps are now in your pictures folder, just copy the pictures to your computer, and finished!