Here is my answer. After few days of struggle and help from a code mentor:
Problems are:
1) The Objective-C bridge has to set the correct path and header search path so both IOS & WatchExt can use
2) The PodFile in MMWormhole must target for both iOS & WatchExt.
3) The code in MMWormhole npm page is not correct. Move the instantiation of MMWormhole out and be a class Variable.
Here is the brief step by step:
Objective C Bridge
- Add App Groups for both iPhone App & Watch Ext
- Add Objective C
- Target on both
- Build Settings: Set the *.h in relative path for both iOS & Watch Ext. set the *.h relative path. e.g.
../MMWormholeTest/MMWormholeTest/MMWormholeTest-Bridging-Header.h
- Add Header Search path: ${PRODS_ROOT}/Headers , recursive for both IOS 7 Watch Ext
MMWormhole
- Cocoa pods it.
- Set pod 'MMWormhole', '~> 1.2.0’ target for both iOS & Watch Ext in Podfile
- Set #import “MMWormhole.h” in bridging header file.
- in both ViewController & InterfaceOController, set wormhole as class scope variable. e.g. var wormhole:MMWormhole!
- Instantiate MMWormhole in ViewDidLoad and awakeWithContext
in WatchExt, set listener in awakeWithContext , and use self.lable.setText because of closure. e.g. self.label.setText(messageObject! as! String)
- No need to register receiver as shown in some other MMWormhole examples in Stack overflow.