I'm freelancing with mobile apps now. Estimating prices has been far more difficult than the coding itself!
Time estimation
It is possible to estimate time required. Break it into a to do list. Nothing on your list should take more than 4 hours to build. Break it down further. Something like Upload data (?? hours)
can be broken down into Prototype sending binary data (1 hour)
+ Upload data from activity 1 (2 hours)
+ Process upload confirmation (2 hours)
+ Display upload success in activity 2
and so on. The smaller the tasks, the more accurate your estimates. It might take time to plan all this, but it will speed up your productivity and your client's confidence in the long run.
If you haven't done something before, dedicate about half an hour to researching whether it exists and how hard it would be. Something like QR codes are very easy because there are plenty of libraries out there, yet PDF is near impossible. But it takes research to realize this.
Do your best estimate. Break things down if it's tough - time needed to prototype and test are important. Then multiply your target by 3. So if you think you can do something in 1 week, set a target of 3 weeks to cater for the unexpected, including redoing things from scratch if it fails.
The best estimates are the ones you have experience with. I track down every task I do and use them for estimates in future tasks. My favorite tool for this is Sublime Text with the PlainTasks plugin.
Clients will want things their way
Think a job will take 3 months? Your client will add a lot of time to it. In my experience:
Polish adds 2 weeks to a job. More for Android. This includes cleaning code and comments, if you're giving them your source code.
Allocate another 1-3 months to polish if you're dealing with a job where polish is vital, like clients in the field of event management and hotels. They'll complain about your corners not being rounded enough and ask why the fancy buttons they demanded look weird on large screens, even though you told them earlier that it wouldn't scale.
If it relies on a webservice or API, prepare for development hell. Be prepared to demand that they finish their API first before you take on the job. I've seen 2 month jobs delay to almost a year because of waiting for their API.
If your client is actually contracting out a job for another bigger client, be careful. Since apps are usually the front end, you'll be responsible for delays on the back end. They'll use you in order to buy time and appear like they're making progress. This week they'll want blue buttons this week and switch the color scheme to beige next week to appease their client.
Many clients think changing the layout of an app is like making a powerpoint presentation. I have had arguments with almost every client about this. Make it very clear that it's not trivial to change their minds.
This may not always happen, but take it into consideration. There is no such thing as a 3 day job, unless they don't want polish. You'll have to be firm on what is and isn't included as a part of your contract.
Have charges for changes outside what is agreed upon. Almost every freelancer has fallen into the trap of being nice and doing small changes for free, only to have a client eventually take advantage of that goodwill.
Apps based on special events are generally good, like those for elections or sports events. There's a 'hard deadline' after which they won't be demanding more work from you.
Check out outsourcing components
What I normally do is outsource small components out to people online. This gives a good feel of worldwide rates for the competition as well as the market prices for certain components. Outsourcing is a useful skill to have for times if you have multiple projects running in parallel.
Actually getting your price
The reality is that you shouldn't be charging based on how much work you have to do. Market rate for an employee and market rate for an app are very different things!
App development is a specialized field. iPhone has only been out a few years so there's nobody out there with 10 years experience. Larger companies can do better, but some will charge $100k for a job that takes 3 months to do. Freelancers are rare, especially those with experience. Learn who your biggest competitors are - this varies a lot within countries. The higher the education level, the lower your costs... something like Indonesia might probably have the highest rates for freelancers, because of the high mobile usage and less competitors per capita.
Many app developers can name their prices as high as they like because of the lack of competition. But be reasonable.
Think of it from the perspective of the person you're negotiating with. They need to convince their bosses as well. Don't explain how many hours you put into it. A fresh graduate in your town will do it for fast food wages. Some guy in India with a good degree and a year of experience is willing to work for $5 for 3 days. Explain how you're more reliable than that guy.
You should be charging based on how much your app is contributing to your client's finances. I've done multiple apps that digitize paperwork. These are the best because you're saving a company hundreds of thousands of dollars a year because of improved productivity, improved workflow, not having to lug as much paper around. You can charge hundreds of thousands for those. If you think that's too much money for an individual, let them negotiate it down.
I've done apps for small events like marathons. These don't pay well, but the benefit is that they can be used for every similar event. If you're looking for freelancing, that's not so great. But if you're looking at product development, building your own company, and financial independence, these can be good in the long run.
If your app is part of a company's core business model, charge more. If it's just a fancy nice thing to have on the side, charge less but go for quantity.