Do mobile operating systems access smartphone sensors? - permissions

Do iOS and Android collect any sensor data (e.g. accelerometer, microphone) from smartphones?
If yes, do they have to ask for user permission like third-party apps?

Yes, of course they do - those functions would not work otherwise - it's the OS that collects the data before passing it on to apps. In iOS for example, you can turn off location services system-wide, as well as per-app.
The OS also needs to ask for permission to do so, but that's usually done on a per-app basis, and may only be temporary. Generally this is much more transparent on iOS than Android - Google's own apps get very greedy before they will work, and there is a long history of privacy abuse in Android apps.

Related

How to implement cron jobs in react native?

I am new to react-native and implementing simple app where app will monitor the mobile's clock time and should set some flags so as to notify user to perform some task when he starts the app.
I want to continuously monitor mobile's clock time as a background job in the react native app such that, when user opens the app and if specific time has already passed, it should set some flag to take future decision.
After some research over blogs, I found that react-native-background-task and/or background-timers can be used. But I am finding difficulty in implementing it. Can anyone help me with the implementation example for the same.
Thank you in advance.
So, from your post I'm going to assume a few things. One being you'll develop on Android as well as iOS, you just want to use a plugin (not code a module yourself).
Unfortunately, unless I'm mistaken - there's no simple answer and I'll explain.
As Android and iOS go forward they are starting to limit usage of Apps in the background, specifically Android goes into 'Doze' mode and iOS works in a similar fashion.
For Android, you'll need to consider a few things and I'll concentrate on them, as you'll need to know this before actually creating a RN app.
Doze Mode
Starting from Android 6.0 (API level 23), Android introduces two
power-saving features that extend battery life for users by managing
how apps behave when a device is not connected to a power source. Doze
reduces battery consumption by deferring background CPU and network
activity for apps when the device is unused for long periods of time.
App Standby defers background network activity for apps with which the
user has not recently interacted.
While the device is in Doze, apps' access to certain battery-intensive
resources is deferred until maintenance windows. The specific
restrictions are listed in Power Management Restrictions.
Doze and App Standby manage the behavior of all apps running on
Android 6.0 or higher, regardless whether they are specifically
targeting API level 23. To ensure the best experience for users, test
your app in Doze and App Standby modes and make any necessary
adjustments to your code. The sections below provide details.
Cruically, you'll need to note:
The system does not allow sync adapters to run.
The system does not allow JobScheduler to run.
So firstly for android, you'll (probably) need to ensure your app is in a 'whitelist'. You can check the requirements of the list here:
https://developer.android.com/training/monitoring-device-state/doze-standby
Or, you can access the maintenance window with a plugin like here:
https://github.com/transistorsoft/react-native-background-fetch
Testing
Android give you some tools to do so, mainly running:
$ adb shell dumpsys battery unplug
$ adb shell am set-inactive <packageName> true
Headless JS
You can check out headless tasks, which could suit your situation:
https://facebook.github.io/react-native/docs/headless-js-android
Caveats:
Although Android state that the operating system itself acts like documented, devices themselves can have software built in which essentially kills background processes. Nokia is one of the worst. So be aware of this.

Accessing iPhone data from a Mac OS X application?

Is there a class library or an Objective-C framework which could permit me to access my iPhone data from a Mac OS X application?
For example, if I develop an application to edit pictures, I would like access to my iPhone pictures from this application without using iTunes. I connect my iPhone as USB device and pictures are displayed into the application.
Apple doesn't support this mode for (recent) iDevices. There are some apps (mainly on Windows) which can sort of do this kind of thing, but I don't think you're going to find any libraries to make it simple. You may want to check the jailbreaking sites. They might provide better information.

Offering a Windows 8 App together with a desktop application

I am looking to offer a Metro app with my desktop application. The problem is that users will be getting the desktop app, while the Metro app would just be a companion that is practically useless without the desktop application. So since it's not possible for consumers to get Win 8 apps without the Store (as far as I know at least) I am looking for alternatives. Is it, for example, possible to call the Windows Store during installation and get the user directly on the store page for the companion app? Even better, would it be possible to get that process automated?
Thanks in advance
You would just have to document the fact that there is a sister app avalible from the store. As you know, this companion app would still have to undergoe the rigorous Microsoft test proceedure so could not be shipped with the desktop version. I suppose you could have a "Get Metro App" link somewhere in your main application that would go to your metro page ready for the download...
You will have to modularise the desktop app to work both with and without the Windows 8 Metro app (something I am sure you would do anyway).
I hope this helps.
Your app must be fully functional to pass Store certification. You wrote ...
"... Metro app would just be a companion that is practically useless
without the desktop application."
Section 1.2 of the Certification Requirements reads ...
The Windows Store offers only fully functional apps to provide
customers with the best experience. Anything that might cause our
testers to think that your app is not completely finished will cause
your app to fail certification.
The testers will not install a companion app and therefore your app will fail certification. It will also likely fail 1.1 ...
Your app must offer customers unique, creative value or utility in all
the languages and markets that it supports
It is not clear from your question if the "Store" app will be communicating with the desktop app. If there is a requirement to have a desktop app installed in order to fully use the Store app, the certification process will be a lot more complicated. You will need to supply a copy of the desktop app to the certification team for testing, and there is no guarantee that this sort of app will be accepted into the store.

Is there a testing phase for iTunes and Android Market?

I have a small app I've made that I intend to make available on both iTunes and on Android Market (AM).
I have purchased the developer certifications for both, built my app with the Android SDK and the iOS Xcode SDK. So I think I'm most of the way along.
I'm a little fuzzy on the steps after this, though. When I launch my app, I'd like it to be available on each market on more or less the same time. I'd also like to do a little testing to try and download each app to different people's devices for a beta phase. Also, my understanding is that iTunes requires some sort of approval before it goes live (does Android require the same?).
So, what I'd like to do is be able to put my app on both AM and iTunes, but have it not be publicly available. A sort of private phase, where I can test it, have selected testers download it, make sure it is working fine, and maybe even get Apple (and Android) approval.
Then, when I'm ready to go live, then mark my apps as public.
Is there anything like that on either market? If I upload my app to either market, is it from that moment publicly available?
If there isn't any such "private" phase, what is the usual process for testing the app on different devices before making it available for sale?
The android developer site confirms that you can upload your app without publishing to allow for final testing. See more information here: Publishing on Android Market (under "Configuring options and uploading assets" header). When you actually publish the app it should be up within minutes. See this answer as well Just uploaded Android App: How long before app shows in Android Market search?
Apple has a different approval which can take hours or weeks depending on how lucky you are :) I personally have not submitted an app for approval though so I don't know if there's a way to get approval and then delay the release. I don't have a dev account with Apple so I can't log in to see their app approval guidelines apparently, but maybe this has some useful info: iOS App Store Approval Guidelines

UIRequiredDeviceCapabilities equivalent for Mac App Store?

I am developing a Mac app that is only useful for laptop owners (MacBooks) and plan on distributing this app on the Mac App Store. For the iOS App Store, you can specify in the plist UIRequiredDeviceCapabilities so that only users with the proper device can see the app in the store. Is there a way to do the same with the Mac App Store?
From page 39 of the iTunes Connect Developer Guide:
If your iOS app requires a specific device capability (i.e. telephony,
GPS, accelerometer, etc.) to function properly, you will need to be
sure to code this into the info.plist of your binary utilizing the
UIRequiredDeviceCapabilities key. Refer to the Build-Time
Configuration Details section of the iOS Application Programming
Guide to learn more. At runtime, iOS cannot launch your application
unless the declared capabilities are present on the device. Further,
the App Store requires this information so that it can generate a
list of requirements for user devices and prevent users from
downloading applications that they cannot run. It is not necessary to
specify required device capabilities for Mac OS X apps.
While there is no equivalent to UIRequiredDeviceCapabilities, some capabilities can be specified in a PreInstallRequirements.plist.
This approach let you specify minimum RAM, GPU capabilities, minimum minversions.
See here:
Mac app store productbuild
https://developer.apple.com/library/archive/qa/qa1748/_index.html#//apple_ref/doc/uid/DTS40011181
https://developer.apple.com/library/archive/documentation/DeveloperTools/Reference/DistributionDefinitionRef/Chapters/Distribution_XML_Ref.html