| Comments

i'm very frustrated now.  the title says it all.  let me explain my scenario, tell you how i found out the problem and give you the suggested workaround from apple.

the setup

i have a few phones laying around, and being the gadget geek i am, i do have an iphone that i've been using lately.  my setup consists of syncing my iphone to my pc laptop for contacts/calendering and to my macbook for music/photos/movies/podcasts.  it is a simple setup really, and allows me to keep my work machine for work (i don't have music or anything on my work machine) and my home machine attached to my media storage libraries, etc. 

everything was running smoothly even though it is quite annoying to cable sync -- i wish over-the-air was possible.

my situation

i missed an appointment the other day.  i was on the road and didn't get an alert.  it wasn't a terribly important appointment (meeting a friend for lunch), but still i was embarrassed.  my memory is not that of an elephant and i rely on technology to keep my sane.  when i returned to my laptop i noticed that my appointment was on my calendar, but it wasn't synced to my phone.  weird.  i began investigating.

i did a few tests.  i restored the phone to factory default.  i did a one-way force sync on calendars.  i synced under a new profile.  i re-installed itunes.  i did everything the troubleshooting steps said to do, which by the way included an arrogant statement of basically asking me to uninstall any other add-on that i might have and that the itunes helper should be the only add-on enabledto work.  alas, a few appointments were still not syncing.  and then i looked closer and noticed a trend.

the appointments that were not syncing were meeting requests sent from other people.

i first thought 'holy crap, no meeting requests from other people at all are being synced' but that was not the case.  i could isolate it to meeting requests from other people but it was so sporadic that it was driving me insane.  so i began to research as best i can and then i resorted to calling support...something i did not want to do, but even us techies must admit we need help...and i exhausted all my knowledge.

i called support and was told the wait time was 5 minutes.  after a few minutes i was disconnected.  argh.  immediately my phone rang though and it was apple support apologizing for the disconnect and wanting to continue the case.  very good customer service!

i explained the situation to the agent and he began to search.  he pointed me to a knowledge base article explaining the problem and asked me to read it and if i'd follow the steps while he held on.  after browsing it i immediately saw this was not going to end well for me.

the problem (confirmed)

turns out that itunes/iphone will only sync calendar items that are explicitly of a certain message class (IPM.Appointment).

a message class is basically a template.  there are defaults and then developers who create add-ons can inherit from those templates and provide added functionality.

after following the steps i could see that the two appointments that i was testing with indeed were of type "IPM.Appointment.Location" and that i immediately realized my issue. 

the agent explained that i'd have to manually alter the message class type to get them to sync. 


he further explained that this was a problem in outlook and i should contact microsoft.  um yeah, i really don't think it is a problem with outlook.  the template is the same.  i then discovered that what is happening here had nothing to do with MY add-ins, but rather the add-ins installed on the meeting organizer.  the ".Location" is indicative that someone has installed the Live Maps add-in for outlook.  it adds value to the appointment template.  but what is happening for me is that when THAT PERSON sends me a meeting request, it uses their template.  i as the end user don't see that of course (unless i follow the proposed apple steps) and thus i'm left baffled.  since i cannot control what someone sending me has on their computer, i, the apple end user am screwed.

i was then pointed to a microsoft knowledge base article explaining how to alter the message class.  okay, so let me get this straight...you want me to change my view in outlook to identify these items, then create a VBScript application to change them?  or better yet, USE A WORD DOC TO CHANGE OUTLOOK ITEMS (shame on microsoft for this one, yes that is actually the recommendation and provided template).  clearly none of this is passing the mother-in-law test.  i'm tech savvy and understand all this, but let us put this into layman situations. 

see jane.  see jane have an appointment.  see it on jane's calendar.  see jane sync.  no appointment.  see jane verify appointment exists on her calendar.  see jane confused why it is not syncing and no errors or warnings presented.

see dick.  see dick ignore that an item is on a calendar and not alert the user that there might be items that didn't sync because their developers are too lazy to figure out it is a base template and they can still get the information.  apple, don't be a dick.

so my workflow now suggested by apple went from: plug in iphone and sync to plug in iphone; sync; scan calendar to see what didn't sync; see items not syncing and verify their message class; change message class using a word doc; re-sync.  holy flippin poo man.  this is ridiculous.  seriously.  people write bad software (microsoft is not immune to this either), but when you see a problem and hear complaints, rectify it please.

the solution

sadly, the process in the word doc actually works well.  i just couldn't see myself using a word doc to do this all the time.  i took a cue from scott hanselman and took the vba code in the word doc and just imported it into an overall outlook macro.  here's what i did.

first:  download the word doc -- as lame as that implementation is, the code is already there for you with a good analyze tool as well.

second:  open the doc and get to the visual basic editor (developer tab...if you don't see this you'll have to change your office settings to show the developer tab).  in the editor expand the forms section and choose export to file:

third:  open outlook and go to the tools menu, then choose macros.  create a macro (type a name and click create):

forth:  right click on the project and choose import file...point to the form you exported in step 2 above.  it should import no problems (or at least 'worked on my machine'):

fifth:  in the subroutine for the macro add this code (this assumes you kept the same form name):


i implemented the rest by customizing my toolbar and pointing to the macro, so now i have a button on my toolbar that i can run:

and when i run it i get the functionality i need:

note in the picture above there is an 'analyze' button -- i highly recommend you use this first if you are having this problem.  the result of analyze will show you what is in the dialog to the right of it (i already cleaned mine up so it only shows the good stuff) and if you had any non IPM.Appointment items, they would show here...then you could clean them up.  the screenshot above shows the setting you would want (make sure it says "IPM.Appointment" and not the default of this tool "IPM.Appointment." [note trailing dot] -- i fixed this in my macro code after import and you could too).

when you run the tool it will change things appropriately and you can resync.  if you use this tool you will not need to change your views, etc. as recommended by the apple article.  so if you are running into this problem, make your voice heard.  add your comments to this thread, vote this thread useful and see if we can get support people to listen.  you can also submit a bug report (as i did) to the iphone feedback area.

i'm sure there will be some that argue this isn't a bug.  i'll vehemently disagree...as those arguing that will be geeks that understand the technical situation.  step back and put yourself in an end user shoe's -- you see it on your calendar and it ain't syncing -- and no errors.  i think even the tech would admit that hey, even if it is by design, you should alert the user to what didn't get synced and why.  the solution should be fairly simple.  instead of:

if (messageClass == "IPM.Appointment")


if (messageClass.contains("IPM.Appointment") {
  try {
    // sync and ensure elements are there
  catch {
    // log to file to alert user after done

c'mon apple, fix this.

Please enjoy some of these other recent posts...