Sharing data between an iOS 8 share extension and main app Sharing data between an iOS 8 share extension and main app ios ios

Sharing data between an iOS 8 share extension and main app


You should use NSUserDefaults like this:

Save data:

objc

NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.yougroup"];[shared setObject:object forKey:@"yourkey"];[shared synchronize];

swift

let defaults = UserDefaults(suiteName: "group.yourgroup")defaults?.set(5.9, forKey: "yourKey")

Read data:

objc

NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.yougroup"];id value = [shared valueForKey:@"yourkey"];NSLog(@"%@",value);

swift

let defaults = UserDefaults(suiteName: "group.yourgroup")let x = defaults?.double(forKey: "yourKey")print(x)

This will work fine!


Here is how I did it:

  1. Open your main app target > Capabilities > App Groups set to on
  2. Add a new app group and make sure it is ticked (e.g. group.com.seligmanventures.LightAlarmFree)
  3. Open your watch target (the one with Capabilities tab) > App Groups set to on
  4. Add a new app group and make sure it is ticked (e.g. group.com.seligmanventures.LightAlarmFree - but must be the same name as group above)
  5. Save data to the group as follows:

    var defaults = NSUserDefaults(suiteName: "group.com.seligmanventures.LightAlarmFree")defaults?.setObject("It worked!", forKey: "alarmTime")defaults?.synchronize()
  6. Retrieve data from the group as follows:

    var defaults = NSUserDefaults(suiteName: "group.com.seligmanventures.LightAlarmFree") defaults?.synchronize()// Check for null value before settingif let restoredValue = defaults!.stringForKey("alarmTime") {    myLabel.setText(restoredValue)}else {    myLabel.setText("Cannot find value")}


If you have

group.yourappgroup

use

var defaults = NSUserDefaults(suiteName: "yourappgroup")

This works for me