iCloud documents no longer in Mobile Documents folder? - ios

I have an app that creates a file in the iCloud documents folder. It is working fine, in that the devices that the app is installed on can access and update the file successfully. In my code, a NSLog of the file path gives me:
///private/var/mobile/Library/Mobile%20Documents/iCloud~my-company-name~appname/Documents/document_name
As part of my testing, I need to be able to view this file from my mac. Previously, I was able to do this by looking in my library/Mobile documents folder at the respective app folder.
However, I can't see the app folder in there. Any ideas why this would now not be showing up or pointers to configuration settings I could check? (I'm on Xcode 6.1, mac is Yosemite and all devices are iOS8).

Finder now treats this as a 'special' folder, so actively prevents you browsing the structure. You can do this if you use Terminal instead.

Related

How do I access files in the iPhone Simulators "Files app"?

I saved a file on the iOS simulator to the Files App. Specifically, I chose to save into "On My iPhone" > Downloads.
Where can I find this file in Finder on macOS?
I found ~/Library/Developer/CoreSimulator/Devices/UUID/data/Downloads but that folder is empty even though when I launch the Files app in my simulator, I clearly see files in the Downloads directory.
I was able to find it by doing a search within the /UUID folder. Apparently files saved to the Downloads folder in the Files app are saved to:
~/Library/Developer/CoreSimulator/Devices/UUID/data/Containers/Shared/AppGroup/UUID/File Provider Storage/Downloads/

How to open database sqlite file on iPhone real device?

I'm debbuging a app in my real device by cable. I've a iPhone 6. I want check my database and operate with sqlite3 to query my results. The other questions and tutorials explain to do this only in simulator but I'm using a real iPhone.
In AppDelegate, I prints the path of database:
print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! as String)
/Users/myname/Library/Developer/CoreSimulator/Devices/DAE93E57-7004-45F6-9B93-E79CA1AEEEFA/data/Containers/Data/Application/D7A4F27E-6F11-4941-A1B0-0337ABF788AB/Documents
So, I take the path and access from terminal and access my database with sqlite3 DatabaseFile
But when I debugging in my device, the path that's printed not works. I tried use the printed path
cd /var/mobile/Containers/Data/Application/3257D423-C198-41A5-B29D-B31E99F84F34/Documents
/usr/bin/CD: line 4: cd: /var/mobile/Containers/Data/Application/3257D423-C198-41A5-B29D-B31E99F84F34/Documents: No such file or directory
This error happens because this is of iOS system, I think.
Xcode 10.1
In Xcode, go to Window > Devices and Simulators
In the Devices tab, select your application, then click on the Gear icon, then click Download Container...
Choose the location you want to save the file, then click on Save.
Go to Finder and find the .xcappdata file you just downloaded, then right click and select Show Package in Contents
The contents folder will open. Your .sql file is in AppData > Library > Application Support
I recommend downloading DB Browser for SQL File, and opening the .sql file with that. It works wonders!
In recent versions of Xcode (8 and up, I think), open this with Window menu --> Devices. Find the device in the device list and look at the installed apps list for the device. Each app that you've built and installed on the device will be listed (and maybe some others). Select your app and click the gear menu below the list. Clicking the "Download" item on the pop-up menu will enable you to copy the app's documents, library, and other directories to your Mac.
NB: This will download an .xcappdata file. Right-clicking on that and selecting "Show Package Contents" will allow you to drill down to the actual sqlite file.
Here's another way:
In debug mode, add a UIActivityViewController to share(copy) your SQLite database to a Mac or to a third party iOS app like SQLiteFlow(iOS), then you can debug your SQLite database.
Files that you've placed in the Documents directly should show up in File Sharing inside iTunes. You can download them locally and edit them there. You'll need to enable it in your app's Info.plist by adding:
<key>UIFileSharingEnabled</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
The second key is actually only required if you want to enable showing these in the Files app.
You cannot access the .sqlite file in realtime when you debug your app using a device. Try accomplishing the same in the simulator and it will work.

Dropbox UIDocumentPicker plugin cannot open OS X file packages

On my OS X machine I have placed a document which actually is a file package (aka document bundle) into my dropbox. When I try to open that file package on my iOS device using the UIDpocumentPicker plugin the file package appears as a folder. On the other hand it appears as a file package in the iOS DropBox App itself. It also appears as a file in iCloud drive.
Why is there a different behavior? I would expect both dropbox interfaces to display the file package as a file and be able to open it like I can open out from iCloud drive.
(Dropbox App-Version 4.2.5 on iOS 9.2)
Anyone else having this issue and any idea on what one could do?
Packages are effectively folders, not files. Different interfaces may not display them the same way though. E.g., sometimes you'll see a special icon indicating it's a package, and sometimes just the normal folder icon will be used.
In any case, packages/folders aren't currently supported in the Dropbox iOS app UIDocumentPicker. We'll consider this a feature request though.

sqlite file gets picked up by the xcode simulator but not the ios device

I had a sqlite file which was working fine on the simulator and the device.
Under my app folder on the mac, I can also see the file - coredata.sqlite.
I created a new coredata.sqlite. After this, I had to copy it over to the paths which were different for different targets (iphone 5 vs 6 vs 6+) and looked along the lines of :
.../Library/Developer/CoreSimulator/Devices/26292D7B-5001-497E-B23B-99455953F5F4/data/Containers/Data/Application/64849BCC-B86B-45DE-818F-3E67346C4893/Documents/
Just copying over the new sqlite to the apps folder where the old sqlite was present did not work. Copying it to the above mentioned folders fixed it for the simulator.
Now, when I connect to my ios device though, it cant find the new sqlite. If I copy back the old sqlite to the apps folder, it still works but copying the new one to the apps folder, the various destinations for the simulator etc has no effect on the ios device.
Displaying the path where it is looking at shows :
/var/mobile/Containers/Data/Application/80302FBA-6D45-4843-A891-E10A7ED4D445/Documents/CoreData.sqlite
Any help on where the device is picking the sqlite from? Since it works on the simulator and the older one works on the device also, the code seems ok. What can I do to get it to pick my new sqlite?
Device will pick the files from mainBundle. While doing database related functionality we copy the db files from mainBundle to DocumentDirectory, so that it becomes editable.
What you did was that you manually copied the sqlite file to the app data document folder. You should actually add the file to specific target and then it will copy the file during build process.
Your new coredata.sqlite file is not attached to any target. Check inside build phases and see if it is there, otherwise add it. Also you should not have two files with same name inside the bundle, so remove the previous file from target.

can't find /var/mobile/applications directory for ios documents

I'm trying to run a release build on my iPad device connected to xcode for debugging. I'm not certain but guessing that when I do this the documents directory ends up somewhere on my local machine and not on the iPad (as when I run it without xcode). I get an output like this for the directory:
/var/mobile/Applications/FF0F1AB2-AD1F-4E42-8815-9E399EEF5027/Documents/
but I can't access that directory. Going to /var does not reveal any 'mobile' subdir. This seems different from when I run the iPad unconnected and end up with files viewable on the device through Organizer within xcode (making me conclude that it saves them locally in this mysterious dir when run connected to xcode).
Can someone help me access this mystery directory?
For "xcode 6":
Connect your device with your MAC (You can sure about that having a look into the simulator list, it should be there)
Now open xcode and go to "Windows" from upper menu
Go to "Devices" from drop down list
Now this window will pop up. Your app should be there in the "Installed Apps" section. Like the picture below. Double click on it.
Here you can see the "Documents" folder and the photos you saved earlier. You can't delete photo from this list. Because this is the iPhone device section, you accessing through the xcode.
If you want to delete the photos, you have to delete the whole project. To do that, scroll down below the screen and there should be a minus "-" button. After selecting your project just click on it. It will delete your photos as well as whole project.
Window -> Organizer -> select your's Iphone -> Applications -> select your iphone project name and you can see blow in the "Data files in Sandbox"
(Original poster here)
A few things I got wrong:
Running it on the device whether with the debugger or not always puts the file on the device, not on the local drive. This /var/mobile directory must be essentially some location on the device itself that can't normally be accessed browsing from the mac.
I needed to refresh the view in Organizer to see the files being placed there. I did so by detaching the iPad and then reattaching it (the usb), and the files would refresh.
Instead of removing the question, I'll leave this here for others and myself for the tip in viewing/refreshing files in organizer and the clarification of where the files are being placed when run on the device.
The directory you are looking for is located at
/Users/User Name/Library/Application Support/iPhone
Simulator/Simulator iOS Version/Applications/Application
ID/Documents/
Thank you they are both right in different contexts
If you are running it on device then what #ethemsulan is correct.
And then on the simulator the folder is found on your mac and the file path is as #Vin and #Osiris has given
Add this to your info.plist source code and you will find the recorded files inside files of iPhone device.
<key>UIFileSharingEnabled</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
To see the file saved in iPhone -
Go to plist file of your project.
Set Supports Document Browser to "YES".
You will see the saved file in FILES in your device.
I am using iOS 13 and Xcode 11.6, it worked for me.

Resources