Thanks, I did end up putting a single database in the shared file system. I wasn't sure about the database file locking but everything seems to still work. You are right, I don't get observers/notifications for database changes from the iPhone app on the watch, so I've opted to using polling instead. I'm not sure what the real hardware is like, but I can see the watchface and iphone screen simultaneously in the simulator. When a view controller on the watch appears, i just setup an NSTimer and fetch the rows i need to refresh a table. This keeps writes from the iPhone app in sync on the watch. However, I do perform some writes on the watch app itself, such as deleting a table row. The CBLLiveQuery on the iPhone app doesn't pick these up obviously. A watch app can call an openParentApplication() function so I will probably use this to trigger a UI refresh (in both foreground and background). The watch app is mostly read only so this should be fine.
On a side note, I was trying to setup CBLLiveQuery's on the watch app but the observers were not firing. I was also receiving a warning about a stopped run loop when I made a call to waitForRows(). Since I switched to polling on a timer I didn't have a chance to debug this further. However, even with NSTimer objects, I needed to explicitly attach the NSTimer to the run loop otherwise it wouldn't fire. I am not sure if there is something more CBLLiveQuery needs to do in order to fire as well and if the caller or the intializer itself should be responsible for this.
Thanks for the help!
Jeff