Sharing information between apps - ios

There are two applications. How can they share information? Can we use a common database for them? Perhaps we can pass parameters from one application to another?

You cannot directly share any resources; every app is in its own "sandbox" and cannot access the resources of any any other app.
You can send data back and forth between apps a couple of ways, however.
If you want everything to stay on the device then you can implement application:openURL:sourceApplication:annotation: in both apps and provide a custom URL handler for both. The user will experience the device switching between the apps as they launch each other.
If you are willing to use a server and internet connection, then both apps can read and write the same server resource. When each app launches or becomes active, it can check for updated information on the server.

Related

Persistent call detection on iOS

I have written an Android application which, even after termination, still runs a service that listens for phone state transitions. This way, the application was able to detect new phone calls and trigger a certain event, for example the dialog partner's number was stored in a database.
Now I am eager to implement this application on iOS as well, but I cannot figure out if it is even possible to listen for phone calls in a similar way. For all I know so far about iOS, whenever my application is terminated by either the user or the OS, it is not possible anymore to detect new phone calls.
Is there any way I can achieve this, or have I already reached a dead end?
EDIT: As it was said to be too broad:
I want to detect both incoming and outgoing calls at any time. It there a way to do this on iOS 10? I do not want code, I just want to know if it is possible.
Please investigate further App Sandbox principe that Apple is using.
In short:
App Sandbox is Based on a Few Straightforward Principles By limiting
access to sensitive resources on a per-app basis, App Sandbox provides
a last line of defense against the theft, corruption, or deletion of
user data, or the hijacking of system hardware, if an attacker
successfully exploits security holes in your app. For example, a
sandboxed app must explicitly state its intent to use any of the
following resources using entitlements:
Hardware (Camera, Microphone, USB, Printer) Network Connections
(Inbound or Outbound) App Data (Calendar, Location, Contacts) User
Files (Downloads, Pictures, Music, Movies, User Selected Files) Access
to any resource not explicitly requested in the project definition is
rejected by the system at run time. If you are writing a sketch app,
for example, and you know your app will never need access to the
microphone, you simply don’t ask for access, and the system knows to
reject any attempt your (perhaps compromised) app makes to use it.
On the other hand, a sandboxed app has access to the specific
resources you request, allows users to expand the sandbox by
performing typical actions in the usual way (such as drag and drop),
and can automatically perform many additional actions deemed safe,
including:
Invoking Services from the Services menu Reading most world readable
system files Opening files chosen by the user The elements of App
Sandbox are entitlements, container directories, user-determined
permissions, privilege separation, and kernel enforcement. Working
together, these prevent an app from accessing more of the system than
is necessary to get its job done.

Publish IOS App to Appstore with SSID ( wifi) discovery/connect through app

I was trying to get a specific info before a IOS App development task which I searched but couldn't find anything relevant.
Wanted to know whether this requirement restricts (non compliance issue as per publish guidelines) the app to be published in App Store with features as below
User scans and lists all available wifi connections in a tableview
Selects one of the Wifi connection and connects on button click
Stores the password and SSID for future connections.
Would there be any compliance issue related to the same functionalities when submitting to IOS app store. One of my colleague have advised me about the same but not able to explain why? Which I tried to find out searching the internet, but too specific to find anything relevant. Deeply appreciate an Expert advise on this.
Thanks in advance.
I can't find anything in the Review Guidelines that would object your app idea: https://developer.apple.com/app-store/review/guidelines
A couple of areas where you should have a more detailed look:
2.5.1 Apps may only use public APIs.
2.5.9 Apps that alter the functions of standard switches, such as the Volume Up/Down and Ring/Silent switches, or other native user
interface elements or behaviors will be rejected.
5.1 Privacy
Technically, I'm not sure if it's even possible to change the WIFI not via the settings app, so I'd have a look their first. (https://apple.stackexchange.com/questions/1592/is-there-an-ipod-app-to-easily-switch-wifi-on-and-off)
I don't believe I've ever seen an app or a way to change SSID outside the Settings app. I explored a way to detect network changes, connects, disconnects, which work fine while the app is running. I was never able to influence how the user connected, just that a change happened. It also falls apart pretty quickly when the user backgrounds the app. Trying to keep a background task open long enough to poll the current connection fails pretty fast.
I wish Apple would provide some system level notification of Wifi connect events. This could be very useful to developers that want a little more control than Background App Refresh events.

Saving resource on shared framework

I'm making a framework for iOS that collect data from the phone (GPS, WiFi, etc) and sends to a server and notifies the user on events.
My problem is that if two or more apps use the framework on the same device it will consume the battery and I only need to send the data from one app because the collection continues in the background.
Is there any way to know if these multiple apps are running and notify the app that other app is collection and sending the data?
No. The apps are sandboxed and cannot interact.
The framework will have no way of communicating with the other apps unless it sets-up some sort of networking on the client (not advised).
I wouldn't worry about it.
I'll probably look the problem inside out. When I start receiving info on the server from same ip/mac combination simultaneously I'll return a flag to all but one client on that particular device. When my framework receive that kind of flag, it will stop sending data, because someone else is already doing the same.
PS Your framework sounds like creepy spy thing though :)

iOS using sockets to talk to other apps

Is it possible to have 2 apps on 1 iPhone/iPad talk to another via sockets? For example The main app is phonegap app that just displays data and when the user clicks the print button, the 1st app sends data to the 2nd (2nd app stays in the background, I guess it is a service), it (the 2nd app) then sends that data to a printer that it knows how to talk to whether that is via a webservice call or something else.
From my scan of the docs and other questions it seems the custom URL is one way to make the apps talk, but I want the receiver app to stay in the background. So do I have to use a server/client approach to this? Is that possible.
Sure you can. Just make sure your 2nd app - the background app is conformed to Apple's requirement to run in background modes. You can also use Bonjour to aid in discovery or just pre-selected a port and make other apps aware of it value.
No, there is no socket-based interprocess communication between apps on an iPhone, nor is there any concept of apps as background services. Using custom URLs to launch another app is the only direct method of communication between apps.
On the other hand, if the 2nd app is talking to a printer (or anything else) via a web service, I'm not sure why you wouldn't just have the 1st app use that web service to print directly. Is there a particular reason you need a background app to perform this function?

Is it possible to get a unique identifier for an ios device from a browser, in a controlled environment?

This is (a very simplified version of) the scenario with which I am faced:
I have an existing web application which manages jobs. We are now purchasing a number of ios devices (iphones and ipads) and I need the web application to know which specific device (regardless of the user) is updating information through the web application (as well as getting the GPS co-ordinates, but I think I have that covered with the geolocation API).
I have control of all the devices, they will all come to me before being distributed and will return to me periodically, so I can modify/restrict etc., but I can't jailbreak.
I have no experience of ios, but if there is a way to do this without needing an app, that would be the best choice.
You can use HTML5 storage to create and save a GUID the first time user accesses your website and send it with subsequent requests.

Resources