Block screenshots in specific app with Intune MDM? - ios

Microsoft Endpoint Manager / Intune allows blocking screenshots in general on iOS devices by using iOS's MDM features. This seems to deactivate screenshots completely, for all apps.
What we want to achieve though is blocking screenshots only for our specific app (as part of a BYOD policy) and through iOS's MDM features, not through an API invoked by the app itself and also not by using video-based image manipulation which tends to require third-party paid SDKs (preventing photos taken with other devices is not a priority at the moment).
I found a number of questions e.g. 1 and 2 that all target deactivating screenshots from the app in Swift. They basically say that it is not really possible for non-managed devices or requires some obscure tricks. However I want to achieve this using the iOS MDM configuration options, not from the app itself.
Is there anything I have overlooked regarding app-specific MDM policies around screenshots?

Related

Supervised devices and App restrictions in iOS

My question regards a possible remote Parental Control system for iOS devices.
I understand how to apply web filtering options that would allow parents to whitelist and/or blacklist specific URLs and domains remotely on their children's devices via managed profiles and MDM server but is it possible to whitelist/blacklist certain apps from the iTunes store - i.e if the parents want to remotely block the installation of say Snapchat and Viber for example? It appears that filtering right now is only possible based on the iTunes "appropriate age" tag - i.e 4+
Thanks!
You can always blacklist apps using an Mobile Device Management software. When an app which is blacklisted is installed on the user's device, the device will show as not compliant. You can also find which all blacklisted apps are installed on the device. Then the admin can prompt the user to uninstall the app. If they are not complying the admin can lock the device until they agree to comply.By using an MDM you can enforce additional restrictions like block camera etc. For a more strict management you can put the Apple device on supervisory mode, which have more options for device restriction. iOS 9.3 goes a bit further in this area by preventing the blacklisted apps from being shown or installed.
No, that level of control is unavailable in iOS. The closest you can get today is to either set the appropriate app age or to use the app installation restriction to block the entire App Store (keeping in mind that on iOS 8, this restriction will also prevent app installation by MDM as well).

Detect apps on my iphone without being rejected by Apple?

My app has been rejected by Apple for the following reason "Our team is aware that iHasApp is using publicly available APIs, however this specific implementation abuses canOpenURL: to detect all apps on a given device".So I start to look for another way to list all the installed app in the user's phone.So my questions are:
1/Are they some web apps which can detect the installed apps?
2/is it possible to detect apps using their icones?
If you implement a workaround, the chances are that Apple will still reject your app anyway.
Obtaining a list of applications installed on the phone is evidently disallowed. Apple has rejected apps using lots of methods to detect this:
Your solution of "canOpenURL"
This solution using private apis List of all apps installed on iOS device and their position on the Home Screen (Springboard)
This (dated) answer using file path manipulation and private apis: get list of installed applications on iphone objective-c

Universal App using Health Kit

I'm working on an App which uses some new iOS 8 Health Kit (HK) features.
At present the iPad doesn't get the Health app, so can't use HK. Since the HK features are not a major part of my app functionality, I could happily leave them out of the iPad version.
My problem is that there seems no way to get a universal app running on iPad once the HK entitlements have been added, even if no use is made of HK functionality.
Does anyone know any different? Is there a way (for example) to have separate 'per device' entitlements?
Thanks!
If you want to use HealthKit, Framework Reference clearly states that your app should be primarily designed to provide health or fitness service. If your app is not a health or fitness focused app, you might not able to submit your universal app .
In addition, your app must not access the HealthKit APIs unless the
app is primarily designed to provide health or fitness services. Your
app's role as a health and fitness service must be clear in both your
marketing text and your user interface. Specifically, the following
guidelines apply to all HealthKit apps.
https://developer.apple.com/library/prerelease/iOS/documentation/HealthKit/Reference/HealthKit_Framework/index.html
Removing healthkit from Required device capabilities in my Info.plist solve this issue for me.

Is iOS CarPlay API Public? How to Integrate CarPlay?

Is the CarPlay API publicly available?
Where can we find a programming guide or the reference to these classes if it is?
Or will it integrate seamlessly with other APIs like Audio from AVFoundation?
Notes
This question is broad and may be flagged as so but please do not as though there is almost no information on the subject and a lot of people could find it useful at this stage
I live in Switzerland and want to go to Geneva to try out a demo
app that I would write on a Ferrari lol.
Update Oct, 2019:
A couple of years later, Apple opened up their designer guidelines and developer docs on CarPlay. As mentioned in some other comments as well, getting access to developer tools can be done on your mac as well.
Technically, depending on the type of app you want to be compatible with CarPlay, it requires different API's and frameworks. For example:
The CarPlay framework is for use by navigation apps only. If you want to add CarPlay support to your audio app, use MPPlayableContentManager. For messaging apps, use SiriKit’s Messaging-related intents to support reading and sending messages in CarPlay through Siri. For VoIP calling apps, use CallKit with SiriKit’s VoIP Calling-related intents to make and answer audio calls on a CarPlay system.
Legally, however, still the MFi Program requires application and approval by Apple for you to get the appropriate permissions, signing profile etc. in order to deploy it on an actual device. Let alone release it to market. OR... you can try applying for access manually and explain your case.
Lastly, there is also some documentation on how to enable tools and simulator to work with CarPlay. For example, a small excerpt:
CarPlay is supported by default when you run Simulator. However, you should configure the Simulator with extra options when developing a CarPlay navigation app. To enable extra options, enter the following command in Terminal before launching Simulator: defaults write com.apple.iphonesimulator CarPlayExtraOptions -bool YES.
But besides the documentation I can seriously recommend to read what the people at Flitsmeister blogged about on how to enable tooling on your local machine. Also, their road to finally getting approved was apparently tedious and far from smooth (I'm not affiliated with Flitsmeister), even though their use case is based on having lots of users (±1.5mln). Mentioning this to emphasise: CarPlay is apparently still not for the every day developer, just yet.
This question dates of early 2014. Let me update this with a mid 2016 answer:
TL;DR - No, it is not publicly available.
In order to get the tools, documentation, technical specs and even the license itself to develop for (amonst others) Carplay, you need to be enrolled with Apple's MFi Program.
Apple's MFi Program ("Made for iPhone/iPod/iPad") is a licensing program for developers of hardware and software. This is a specific license targeted at manufacturers, mostly of "mass production" units, that has additional benefits over the regular developer accounts for companies. These benefits include hardware components, tools, docs, techsupport and of course the license that you are allowed to develop specifically for these devices and technologies, like Carplay.
The MFi Enrollment FAQ is a decent read that makes everything pretty clear. But before you get your hopes up, do note that -again- it is only available for manufacturers. Like the FAQ states:
Q: Am I eligible to apply for the MFi Manufacturing License if my company does not own a manufacturing facility?
A: No. The MFi Manufacturing License is intended solely for companies that own one or more manufacturing facilities.
There are some exceptions. For example if you're a contractor, or an engineering design firm, that develops MFi accessories for a client (who is a manufacturer).
But basically put, it is not for the average developer and admission is quite strict. This means, in a nutshell, that Apple Carplay is not available to developer for by the, say, 95% of us.
The MusicCarDisplayUI.framework framework is a private framework as of iOS 7.1. Taking a look at the runtime headers of the framework, one can guess why; it's just not ready yet for wide use. Whether Apple will make it public in the future is one's guess.
In the meantime, make sure to open a feature request or directly contact Apple here.
Update: If you wish to have a CarPlay-enabled app, contact Apple using this form.
Just worked on carplay project.
You can find the api documents on apple's developer website.
Like MPPlayableContentManager and MPContentItem.
However only after registered on apple's website for carplay, will apple send you the "Carplay Programming Guide" telling you how to activate the car simulator and what classes to use and how to do things etc.
Take a look at MediaPlayer Framework. There are a bunch of classes in there designed for CarPlay only. For example, MPPlayableContentManager, MPContentItem, etc. Obviously, you won't be able to deploy it via the AppStore without Apple's approval.
Partially since iOS 12.0 : https://developer.apple.com/documentation/carplay
The CarPlay framework is for use by navigation apps only. If you want to add CarPlay support to your audio app, use MPPlayableContentManager. For messaging apps, use SiriKit’s Messaging-related intents to support reading and sending messages in CarPlay through Siri. For VoIP calling apps, use CallKit with SiriKit’s VoIP Calling-related intents to make and answer audio calls on a CarPlay system.

iOS - Screen sharing in Perfecto Mobile

We were exploring various test suites for mobile automated testing and ran into this company called Perfecto Mobile. One of the features that blew me away was they are able to (without jailbreaking) effectively perform a "Remote desktop" on a physical iPad.
So, the iPad's screen is mirrored within a web application, it can register touch / swipe events on the web app and perform them on the device. The only relevant technical detail I have is that all this is being performed using commands sent over the USB cable.
I'm really curious as to how this is implemented and details on relevant Private APIs if any.
Thanks,
Teja
I'm not familiar with PerfectoMobile, but I can give you a few pointers on how this can be accomplished:
For the mirroring, one way would be to look at using AirPlay, the APIs are pretty well documented, but not to do what we're talking about which would require some serious reverse engineering, but it's definitely possible, these guys have done it. A different approach would be to run a background app that would periodically take snapshots of the main screen, and send them over a socket connection to a client. You could do this as a VNC server, and to incorporate the remote view in a web app, you could use noVNC. As far using a USB connection, in the case of the background app talking to a client over TCP, you could to a port forward.
To actually perform on the device the touch events sent from your remote viewer, most people have been using the GSEvent group of functions from the GraphicsServices private framework without needing to jailbreak the device. Again, a background app would receive over a socket an instruction such as "Tap there", instantiate the GSEvent, and inject it so it gets processed in the run loop of the most front app.
These few possibilities, at least, have been implemented successfully in different iOS apps up to iOS 6.1 (iOS7 is a different animal). You won't find any such app in the App Store, since Apple clearly prohibits the use of private frameworks in 3rd party apps, instead people deploy them in-house using Enterprise and ad-hoc provisioning profile. On Android however, there's VMLite available in the Play Store.
If you looking to share screen from ios / android, check out skreen.me. They have sample apps you can try out, also they provide libs for mobile app integration.

Resources