I have both upgraded my 3GS and got a new iPhone 4. In both cases everything seems to work fine with some exceptions:
- You will lose all your running history on your phone. The runs will be there in XML format but they will not be imported into the SQLite database that apparently the Nike+ app now uses. I've succesfully imported them myself, though, and I'm writing a desktop application to do that automatically.
- Apparently you will lose your calibration (you will not). Everything will look as uncalibrated until you log your first run (it can be a 1s one), then the databases are updated and your calibration will show.
- You might not see the Nike+ in iTunes until you log a first run.
- There are some volume problems when using another music application that's not the iPod (for example, Pandora). I'm also running RunKeeper at the same time, so the problems might be with it and not with the Nike+ app.
- Careful if you also switch devices. Upgrading from iOS 3 to iOS4 is ok, but it you change your iPhone from a 3GS to a 4 and restore your backup, the Nike+ token will be incorrect. Everything will show up fine in iTunes and your run will upload but silently fail, leaving you with nothing! You have to manually copy the xml from from the synched directory to the latest one and try again! To fix this issue uncheck the "Upload workouts to Nike+" box and check it again to go through the authentication process again.
Overall, I can say that everything works fine with iOS4 -once you go over the initial hurdles I described-. Running RunKeeper and Nike+ at the same time no longer seems a hack and I can freely switch between the two and/or use Pandora (with volume issues). The running history is a non issue for me because I have this site, but it's a matter of importing XML files into a SQLite database.
I hope this helps!
Pedro