iOS open file in another application - permissions - iphone

I have a file (an Autodesk dwf file to be precise) which I include with my app as a resource.
I would like to open the file in another program using something like [UIApplication openURL:otherapp://path/to/my/file.dwf];
The other app support the custom url scheme. When my code runs, the other app is opened, but the file isn't.
Is this because the file is in my application's resources directory and the other app isn't allowed to "play in that sandbox"? If so, where can I place the file on the phone's file system so that both applications have permission to open it?
Perhaps there's something more fundamental I'm missing.
Thanks

Related

Downloading "mobileconfig" file from an App

My org is creating an app, that will have certain wifi hotspots listed in a mobile config file, so that the user does not have to write the password for these wifi when he is in range.
I know this can be done using .mobileconfig file. But I have serious doubts.
Here are few questions regarding the app:
Can .mobileconfig file be created programatically. I cannot find a link to how to cretae this programatically (not using iPCU).
Will Apple allow an app that creates .mobileconfig file and asks the user to download it and install it, so as to change the wifi settings?
Is making the user download this .mobileconfig file only possible via Safari or Mail? Is there any way that this file be opened directly from the app to the settings screen?
Thanks in advance. :)
1) Yes it can. It can be created as an XML file. In fact, you can open and edit an unsigned .mobileconfig file in a text editor and edit the fields. Keep in mind that if it's signed then any edits to the file will require you to re-sign it.
2) Apple will allow an app that downloads and installs a .mobileconfig via Safari, I've seen one on the App Store that does this.
3) Safari + Mail are the only ways to open them(on iOS).

Launch app without knowing the url scheme

I want to launch another app which is programmed by other programmer in my own app. I know the method of url scheme but the problem is that I do not know the URL scheme of the app that I want to launch. Also, I googled some website to search the URL scheme yet got nothing. I think it's because the app is not used widely.
Is there any way to get the URL scheme??
Or is there another way to launch the app??
You can inspect the Info.plist file of the app by extracting the .ipa file:
Sync the App to iTunes, if necessary.
Ctrl-Click on the App in iTunes, and use "Show in Finder" to locate the "OtherApp.ipa" file.
Copy "OtherApp.ipa" to a temporary directory, and use "unzip OtherApp.ipa" on the command line to extract the archive.
Open "Info.plist" inside the "Payload/OtherApp" folder.
First of all, you have to know that not every app uses URL schemes. It's possible the app you're trying to launch doesn't use them and in that case you're out of luck.
Take a look at the Info.plist file inside the app bundle and search for the CFBundleURLSchemes key to know if URL schemes are supported.
If you don't find anything I would suggest you to contact the developer directly and telling him what you're trying to achieve.

IOS file association - default app to open certain file

Is there any way to make my application default to open certain file types(e.g from Mail app). In this moment it is opened by Preview by default and the application is listed in the Open in.... Howeever, preview has nothing to do with this file type and this application is the only one, that can handle this file type.
So I would like to make my application default for this file type, so Preview will not open it by default. Some google search has revealed that in Mac OSX there is key like LSIsAppleDefaultForType, that can make app default, but I can't find any option for IOS...
You have to associate you app with the file types you want it to open.
You do this by adding some parameters to your Info.plist.
This post explains it:
How do I associate file types with an iPhone application?

Downloading files for UIWebView to specific folder on IPhone

I have made an app that displays my website from a UIWebView and it takes you to a store that you can download files. My question is that I need to download a '.zip'file from my website using the app to the IPhone. Heres is my problem. I don't want the file to goto the App's Document folder, I want it to goto a folder that is outside of my applications folder. Here is an example path I might want my file to goto EX:'var/mobile/Library/Downloads'. If there is not a way to download the files to a path outside of the app's folder, is there a way to transfer the specific file that I have downloaded from my website using the my app to another folder that is not located in my app's folders? I know this can be done because I have used apps that have done this, of course they were apps only available on Cydia. This is also an app that will be used for Jail-broken users just for your information!
Thanks for any help!
Any "regular" iphone app runs in a sandbox that prevents access to system wide directories. Practically, you only have access to the app Home Directory.
Unless you go for a jailbroken app, you have no other options than storing to the App docs folder.
Read "The Application Sandbox" and "The File System" [here] for more details1.
EDIT:
I am not an expert on cydia, but the general idea is gaining access as root and then write to where you need to. This can be done by replacing your app with a suid shell script that will in turn exec your app (which will have root privileges now and then be able to go out of the sandbox).
For more info look at this.

How does "Open With" some app in iPhone work?

As far as I know, from iOS SDK 3.2, file type handling is added and an iOS application can associate itself with some file type so that other applications can open this kind of file with the application.
Because of the sandbox mechanism in iOS, I wonder when a file in appA is opened with appB, which registered itself with this kind of file, what will happen? Is this file copied to appB and both appA and appB keep a copy of this file? If the answer is yes, is it possible to make appB open the file under appA's document folder? I cannot find any Apple documentation on this.
For example, appA stores a Keynote document in it, if I open this Keynote document with the Keynote app, is it possible to let Keynote app to edit this document in place so that after editing, appA can see the updated document?
Any help is appreciated.
There are a few different questions in here.
When you register your app to handle types of files using the info.plist entry Document types your app will be on the list of apps that are shown when you perform an action with that file (for example tapping a file attachment in an email). Then when your app is launched, the method application:didFinishLaunchingWithOptions: is run as normal, and the launchOptions dictionary will contain the path to the file that was sent to your app. What you do with the file from there is up to you, but it is a copy of the file, not a link to it. So if the user makes changes to the file in the original app they must 'launch' your app again, with the new file.
See here for more info: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:didFinishLaunchingWithOptions:
You can't access any other app's document folder with the current SDK.
Also, for sharing documents in iTunes (like Pages, Numbers etc), look into the two info.plist entries Document types and UIFileSharingEnabled. (Apples docs: http://developer.apple.com/library/ios/#documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW20) Basically, by setting UIFileSharingEnabled to YES you will expose the /Documents directory of your app in iTunes. Then again it's up to your to show the user once they are back in your app what's in that directory.
Sndbox implemented over standard unix permissions control. All applications are stored in folders with unique name (actually, GUIDs), however owner for them is the same mobile:mobile.
So it looks like they just sends full file path to application which opens the corresponding file.