ios8 extension and container app how to share data

2019-01-18 06:12发布

问题:

I'm having trouble to share data between iOS 8 extension and container app. I set up the group from develop portal and Xcode, and my entitlements plist both look like:

<dict>
    <key>com.apple.security.application-groups</key>
    <array>
        <string>my group id</string>
    </array>
</dict>

The suggested solution in apple document to use [[NSUserDefaults standardUserDefaults]

doesn't work for me.

I've tried the solution by @Santa Claus from this post Communicating and persisting data between apps with App Groups to use

[[NSUserDefaults alloc] initWithSuiteName:@"<group identifier>"];

Santa Claus's solution worked on simulator but not on my iPhone 4s, any ideas on how to make it work on real device? Or am I missing anything?

Some updates:

[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group id"];

function returns url, and both urls from container app and extension look the same, as "path /private/var/mobile/Containers/Shared/AppGroup/3DFB9750-A9F3-4C37-BC3C-0D5BF746B‌​233". I created a json file inside that folder from container app but extension can't find any file in the folder when I run on device. But in simulator it finds it well and everything works.

回答1:

My solution is edit the Info.plist of my custom keyboard:

NSExtension -> NSExtensionAttributes -> RequestsOpenAccess

Make it YES.

Then delete the keyboard in your device and re-add it. In your keyboard add page you will find a setting named "Allow Full Access", enable it and the keyboard will access the shared data.



回答2:

For keyboard extension, make sure enable RequestsOpenAccess as heheBear's answer
and try remove and add back keyboard from Setting/Keyoboard occasionally
keyboard extension is not stable and performance is really bad since beta 4, include beta 5



回答3:

The problem only occurs for custom keyboard, and iOS8 beta 2 fixed the issue.