iCloud query lists deleted files - ios

In my app creates a file on iCloud (outside of the Documents container). This works fine.
I wanted to test the presence/absence of that file. So I built up a NSMetadataQuery that actually detects the file when it is in the cloud. No problem.
Now, I deleted all my apps data from the cloud (using the System preferences), as well as all instances of my app.
Built from scratch and launched the app again. The query is still detecting the file, though it obviously doesn't exist any more, any where...
Any idea how I can get a "correct" file list?

If you want to know what the iCloud service thinks is correct, visit https://developer.icloud.com/ and browse around. That will show the server-side view of the iCloud account.

Related

iOS File Retrieval - NSDocumentDirectory

I am working on a library with a very verbose logger module that, on iOS, writes xml logs to NSDocumentDirectory in a consistent file tree. I want to come up with a way for the user of this library to easily access these logs.
I know it is simple to programatically retrieve files from this directory, but is it possible to access this directory on an iOS physical device in any way from outside Xcode to retrieve these logs? I feel like I have seen it somewhere before, something in the manner of extracting the .ipa file and going into the package contents, but I could be wrong.
---------------------------------------------------------EDIT------------------------------------------------------------------
This (Browse the files created on a device by the IOS application I'm developing, on workstation?) is how to do it with Xcode on a device, but I have to assume that there is some way we can create that gets the logs off of a device for a user.
is it possible to access this directory on an iOS physical device in any way from outside Xcode to retrieve these logs?
It is possible to expose the Documents directory by enabling iTunes file sharing. When file sharing is enabled through this method, the contents of Documents directory would be visible to the user in iTunes, which can also be exported. The documents would also be visible for export through some third party desktop apps like iExplorer.
Here is the link to Apple documentation. You may also refer this thread to understand how this is done.
If you're using a simulator (apparently your task doesn't seem to need te real device) you are in luck.
You should go to a folder similar to this one:
/Users/[YOUR_USER_NAME]/Library/Developer/CoreSimulator/Devices/[RANDOM_HASH_YOU_SHOULD_DISCOVER]/data/Containers/Data/Application/[RANDOM_HASH_2_YOU_SHOULD_ALSO_DISCOVER]
Once there, with finder, you'll get the "documents" folder of the simulator and the app you're trying to retrieve your logs from.
You might say: I don't know which 2 RANDOM_HASHES should I go to.
Yes, you're right. If you have MANY simulators installed and or being used, it might be tricky to discover which one is the one you're trying to debug.
The same thing with your APP, your app will live in another RANDOM_HASH folder, and you should browse them, one by one, and then discover your documents folder.
Someone needed to solve this "mess" and created a Xcode Alcatraz Extension that leads you to the exact live simulator and APP you're debugging in any given moment, and then you don't need to guess which 2 random_hash paths you need to navigate to.
If Xcode + Alcartaz plugin extension manager is somewhat out of your reach, you might need to google it. It's not a difficult process.
PS: That magical Alcatraz Extension is named "XCodeWay" (in case you are brave enough to install Alcatraz onto your copy of XCode).
EDIT: Useful link to get Alcatraz: http://alcatraz.io/ Follow its easy instructions and you're done.
EDIT2: If Xcode cannot be used, then the last question in this other thread might come in handy: Browse the files created on a device by the IOS application I'm developing, on workstation?
(Still, an external application in your users machine will be needed )

Why is a new project with the same app ID still designated a new location?

We have created a new project with the same app ID, but this is designated a different folder in isolated storage. Why is this?
file:///Users/houman/Library/Developer/CoreSimulator/Devices/FBFFFF1E-B5C8-4541-AB4B-ED1657D43EB9/data/Containers/Data/Application/EB3A549F-1604-4E5C-8FBE-3076A3D581E5/Documents/
file:///Users/houman/Library/Developer/CoreSimulator/Devices/FBFFFF1E-B5C8-4541-AB4B-ED1657D43EB9/data/Containers/Data/Application/22E1E792-1F4F-4F05-B7D9-F61AD3624EE9/Documents/
Even though the apps share the same ID.
Since they don’t share the same location, no core data migration can take place.
Any advice please?
Update:
We have two apps in the AppStore and would like to combine the functionality. Hence the idea is to use the appID of the other app to push a new release from a separate project. We have the appID and right certificates, but the isolated storage seems to depend on something else than just appid. Without that a migration of existing data to the new system won't be possible. Alternatively we could copy and paste all files into the other project and go through lots of pain. That might make it possible.
I have seen this on my end - I believe (and could be wrong) that each simulator you run in gets its own folder on the disk. If you switch for iPhone 5 to iPhone 6s for example you may end up with a different folder.
I always actually (when running in the simulator) print out the on-disk location so that I can take a look at the sqlite file if i need to and recently (as of xcode7) i've noticed this directory change between runs - however in my case i tracked it down to changing simulator versions.
Mainly for security reasons. Every iOS application is placed in an application sandbox.
This not only refer to an application's sandbox directory in the file system, granting security by limiting the access to user data stored on the device, system services, and hardware.

iCloud Documents syncing, but can't be opened on other devices

I have a document based iCloud app that is giving me grief. Things used to work on iOS 7, but now they don't. I think it dates back to iOS 8.0 upgrade. Here's the problem:
In my app I create a UIDocument in iCloudURL/subDir and everything works fine on that device (call it DeviceA). I can close the app, start it again and read the file. Great! So I break out my second test device (DeviceB) and my directory query finds the all files I created on DeviceA. However, when I try to open them I get 'NSCocoaErrorDomain Code=260' which basically means "no such file or directory". Similarly, if I create files on DeviceB I can't open them DeviceA.
Another point of interest is that if I check "Setting->iCloud->Storage-Manage Storage -> AppName", the files are listed on BOTH devices regardless of where they were created.
So obviously I have some kind of iCloud sync problem, but I don't understand what's going on at all. Since iCloud seems to know the files exist, why aren't they syncing properly? Any ideas would be appreciated!
I can add code if that would help, but right now I'm not even sure what to show since most of it works as long as I stay on one device.
Cheers
I was calling
[UIDocument openWithCompletionHandler:^(BOOL success)]
multiple times on the same document before any one of them completed.

Having a bit of trouble with copying a local file on iOS

Having only worked with Android/web dev before I am having a hard time figuring out where in the world my file should be getting copied to in iOS. After reading the file browser documentation on the iOS developer resource page it says that each app is an "island" which contains its own folder system. If I want to have my user be able to copy a file from my app's sdk to their iOS device, where should I put it?
I downloaded a file browser app from the app store on my iOS testing device but am I right in thinking that there is no global file browsing system?
I am using a Cordova plugin called Asset2sd which works perfectly for me in Android, getting the root storage folder and downloading the file to there. It has no iOS alternative so I'm going to have to figure something else out, I just need to know where to start. Do I have to have the user access my app's internal files somehow? Can I create a folder for them to look in when they download my app? Some documentation or something would be wonderful. I am totally lost.
Thanks!
You're right. Apps don't have access to the global file system. Each app only has access to their own app directory. Here's in-depth information on Sandboxing: https://developer.apple.com/app-sandboxing/
In your app's sandbox, you basically can manage files as you want, i.e. download, copy, move, delete, etc. So you can create a folder Downloads in your apps documents directory and then display the contents of this folder for instance in a table view.
Related documentation/links:
https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/index.html
https://stackoverflow.com/a/6907432/967327
https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/iPhoneAppProgrammingGuide.pdf

Access app data on iCloud drive

I'm new to IOS development so this is probably a silly question that is easy to answer.
I have created an IOS App using Core Data and CloudKit. It is successfully syncing with iCloud Drive running on IOS 8.1.1
The app is functioning, and iCloud is syncing the data with multiple devices correctly, but I would like to know how to use a web browser to locate the files that are stored remotely in my iCloud Drive account.
It is not located in the iCloud Drive folder with the data from other IOS applications on www.iCloud.com and although I can find the name of the datastore in the iCloud Container section of my Developer profile, I cannot see how to access it directly from a browser.
Is there a way that I can access the stored data externally to test it for security and also to monitor it's size?
Thanks for your help!
I don't know if you can see it using the web interface. You might be able to use the iCloud browser in Xcode to see the files, but I don't think that works either.
The way I usually do it is to open Terminal, and cd into ~/Library/Mobile Documents, and then into the container for your app. The iCloud data should be in there.
(Note you can't use Finder because it hides all data outside Documents.)

Resources