I am working on an iOS app as a freelancer. I am confused whether or not to charge my client for converting the app so that it's compatible with iOS 6 and iOS 7.
How should I determine whether or not I should charge to make the app work in iOS 7?
If I'm working hourly, this is a simple answer: talk to my client, let them know how big the changes are expected to be, and charge for my time if the client gives the go-ahead.
If I was working on a fixed price, I would look at my contract. If it doesn't mention this case, I'd figure out what I want to do (either answer has pros and cons) and update my contract immediately. Then I'd do the update since it was my fault for not specifying.
When working mobile you need to figure out how far back you support, and what you do if a new version drops during development and spell that out in the contract. The same applies to web developers and browser versions. Be willing to bend on it ("I REALLY need this to work in IE 6" is an acceptable response from them, but it opens up the dialogue of how much extra money you get to charge to make that happen), but be clear where the lines are drawn.
When you deliver the product you may offer a free support which counts only for the bugs appearing in the current version of OS (or older). iOS 7 is a new system and upgrading to it cannot be free. NEVER allow the clients to persuade you that you should do free bug fixing for things that appeared after you have delivered them the final version.
It is up to you whether you will charge them fixed-price fee or hourly work.
I wouldn't charge them a fee for this upgrade, primarily to prevent looking like I am one of those contractors that are always looking to charge more for something (as in 'wow! this car was a steal! Hey wait, what kind of gas? $50/gallon?!?!?!'), and I would chalk it up to a lesson learned on my part, it could be perceived as a 'hidden cost' to the client and I like to avoid even the perception of those like the black plague.
I actually forgot to arrange a maintenance agreement with a client recently for a website I built for them. I explained that after this year (which is year #2 btw), there is a maintenance fee, not only my cost for updates but also hosting fees, domain name, etc. I didn't eat a lot, but it was enough for me to probably not forget to do that again. My contact was very understanding about this.
You should mention though that if they choose to go through with another upgrade (especially if it's a feature-add and not just a compatibility check) that it won't be free, and negotiate a cost. Maybe even look into some subscription models, just a thought.
Whether the project you're working on is fixed price or hourly, you should look at your contract first and see how it was worded. If the terms of the contract say that you're building an application that is to be targeting iOS 6.x then that's what you should be delivering. If your client wants the application to be iOS 7 compatible then you should talk with them and amend the terms, possibly including the compensation, of your contract to include support for iOS 7.
How to amend the terms of the contract is entirely up to the contract as well. Most contracts have clauses in them for the process by which future amendments are made. If your amendment process outlines that any changes could alter compensation then you might be able to charge more so long as it's justified. If your contract doesn't have a process for amendments outlined then you'll have to work with the client and get something in writing that additional work will cost more money.
If you don't have a contract and/or your contract doesn't specify that the app be built for iOS 6.x then you might have to just do the work for free so long as it fits within the initial agreement, however that was made.
In the future, it might be worth setting up a maintenance agreement or retainer for any future upgrades or bug fixes. Be sure when setting up this agreement that you specify what does and does not count as maintenance to avoid having clients trying to get you to implement large new features and calling it a bug fix. You should also include language that outlines that any new feature requests that are not outlined in your initial agreement, such as upgrading to iOS 7 if it would be a lot of work, require a new work order or contract.
Contracts are a tricky business but they exist to protect both the client and the developer. Be sure you spend a good amount of time writing clear contracts so that it's not a question in the future of whether or not to implement something. The contract should be able to answer any questions like this.