Debugging CoreLocation app in real IOs device - iphone

I'm developing an application that uses CoreLocation Framework to track user movements. I'm caching the information into a DB to make use of it later, etc. The problem I'm facing is that this kind of application is not to be tested on the Simulator, but on a real device with real data, but I don't find a way to at least access the data my application is generating and storing into its DB. I'd like to know some tips or hints related to the way of testing&debugging this kind of application.
Thanks!

If you want to access the application's data you can follow the steps on this post. If you are using an SQLite database, I'd suggest you to use the SQLite Manager plugin for Firefox, it works great.
I hope it helps
Cheers!

You need to adopt locationManager:didUpdateToLocation:fromLocation: of CLLocationManagerDelegate. You will receive newLocation in this callback.
newLocation.coordinate - that's what you need.

You can test on the iPhone simulator using a CLLocationManager simulator and that way you'll have access to the data in your DB. There are several CLLocationManager simulators out there that run on the iPhone simulator see this answer on SO.

Related

Viewing application in simulator

I need to show my app to customer but without sending sources codes to him.
He does not own any iDevice at the moment, but only a Xcode installed on his host with iPhone simulator.
So my question is there a "normal/official" way I can pass him the application binary so he can test it on his simulator ? Probably using xcode archiving ?
PLEASE NOTE : I know what is ad-hoc distribution, please do not suggest this, he does not own a device.
NO. You cannot give him the ipa to launch it in simulator. Only the source code. (If he is smart enough to launch it, I think you guess how confused will the client be when you try to explain him stuff around the provisioning profiles and certificates and keys to pair them) ....
I see your problem - however, if this is just about a small tour through the app and not a long time testing, might I suggest another way around this:
Why not using a screensharing app like TeamViewer, which has a version that works without installation and is quite hassle free. And then let him play with the App running on your computer?
Sorry for not having an answer on the question, but that would be an alternative route to take.
Very simple solution:
Set up a contract with penalty fee if he copy's the code or distributes the code that'll settle you for life.
If he doens't own a device, you could also loan him one with the app installed. Just do an iphone without a sim card or an ipod
Creating an ipa file and run on the simulator is not possible. We can run the simulator using Xcode only. (means by sharing the code). If you are not interested, ask him to buy device.

How to test location based iPhone application for pre development or beta testing from desktop?

I want to test my Location based application that uses CLLocationManager to find my current locaiton and perform other operations.
Please let me know how can i test it
In Xcode 4.2 you can simulate locations right from your debugger:
Checked out the following two URL and this may help you.
testing GPS in iPhone simulator problem
iPhone Simulator providing location results
There are tools for this tasks as well; you can check out the following for the same.
http://www.vimov.com/isimulate/faq/

find iPhone places using xcode

I would like to know my iPhone places using Xcode like this app.I know all the details related to my iPhones.Kindly help me how to do this.
The actual Find My iPhone implementation details are certainly private and/or using private Apple frameworks (especially as it's a feature that users have to explicitly turn on and off via Settings and there's no user-facing app), but you could use CoreLocation in an app that you create that runs in the background, reporting your location to some server that your own.
I also found an alternative app named iLostMyi, but this requires a jailbroken phone.

detecting and preventing crashed on older iOS (Suspecting EventKit)

Dear Scholars.
I have created a simple application using the latest SDK (4.2.1), Which runs smoothly and error free on all devices with iOS 4.x.x.
Lately I am getting some comments from users with older iOS version complaining the application is crashing on start, on Apple's crash log I see nothing at all.
Pushing my investigation forward, the only suspect I have at the moment is the use of EventKit class, which if memory serves, where introduced only after iOS4.
I am using it very lightly in one of my classes, and it works perfectly on iOS4.2.1
#import <EventKit/EventKit.h>
//some time later
[self setADateInCal: [MyTimeArray objectAtIndex:0] :formatterDate];
Thus my Questions:
Can this be the issue that crashes my application on iOS < 4 ?
How can I prevent it without dropping the feature for people with iOS4
In general, How can I test this? I have the latest official iOS on my device and SDK, the simulator is limited to how back it can go in regrading to iOS version... any magical way to do so?
1.) Yes. If it wasn't in the API in <4.0 than anyone not running >4.0 will crash.
2.) Test to see if the class is available using NSClassFromString (Google for examples) and respondsToSelector in correspondence to see if the method you want is available to use in the OS version the client is running. You will also probably need to weak link the EventKit framework (again Google for how to do this).
3.) The only real way to test this is to keep a device at the OS you want to test. Personally, I have an old iPhone that I never update running 3.1.3 for things just like this. Alternatively, you can keep old installs of xcode+iOSSDK on different partitions or something and use their simulator. (for future updates i guess since you obviously haven't done this for <4.0). But no, there is no magical way to do this. sorry.
edit for clarity on Number 2: Basically you will check to see if the class/method you want is available on the OS version you are currently running, if it is you can use it, if not you will have to find a work around (omit completely or do it another way that is compliant with older versions).
Yes it could be causing the crash. Issues with missing libraries do not report anything in the apple crash log.
To prevent it from happening you need to do two things,
Weak link the event kit library in xcode.
Check for its existence in your code with something like
,
if(!NSClassFromString(#"EKEventKit")){
//do stuff with event kit
}
The only way to test on the actual iOS version is to get hold of a physical device running ios < 4.

Updating iPhone app from OS3 to OS4

I want to update my app to make use of the multitasking functionality and local notifications available in OS4. My question is, if I update my app and make it only available for OS4 and above does this mean that if someone is running OS3 on their phone they won't get the update? or they will get a warning that they need to update their OS? What I don't want to happen is for them to update their app to find it no longer works? If the final situation is what will happen, how do I write the code to find out what OS is being used?
Thanks
If they try to update on the device, then they won't even see an update that doesn't run under their OS version.
However if a previous customer updates their apps using iTunes on their Mac or PC, then iTunes may show them any new update. If they download that, iTunes will blow away its copy that is compatible with their current device/OS combination. The new copy shouldn't overwrite the working one on their device. But if the user ever needs to do a restore, or deletes the app and wants to reinstall it, they're probably out of luck unless they have really good backups and know how to use them.
If you update your app to be 4.0 only, and also mark your app as 4.0-only in the Store, then people will not even see your update.
You can have the best of both worlds by designing the app to use 4.0-specific features only on 4.0 devices. Weakly link 4.0-only frameworks, and in your code use [object respondsToSelector:#selector(thisOnlyWorksInOS4:)] to test for 4.0 features before using them (or, in the case of multitasking, use the multitaskingSupported property of UIDevice, since not all 4.0 devices support multitasking). Alternatively, UIDevice also provides a systemVersion property.
This blog post explains these techniques fairly well, including weak-linking frameworks: http://blog.federicomestrone.com/2010/07/18/base-sdk-deployment-target-weak-linking-and-import/