ios - 使用主机应用程序与自定义键盘扩展进行通信,但无法在设备中运行但可在模拟器中运行

标签 ios ios8 custom-keyboard ios-keyboard-extension

我正在使用自定义键盘扩展。这几乎完成了,但当我与扩展和我的主机应用程序通信数据时,我只是面临设备问题,这些应用程序在设备中没有唤醒,但在模拟器中工作同样如此。我的代码如下:

HostApp View Controller :

 - (void)viewDidLoad {

    _defaultvalue = [[NSUserDefaults alloc] initWithSuiteName:@"group.myapp.myappname.targetKeyboard"];
    [_defaultvalue setBool:YES forKey:@"Layout"];
    [_defaultvalue synchronize];
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (IBAction)RightAction:(id)sender {


    _defaultvalue = [[NSUserDefaults alloc] initWithSuiteName:@"group.myapp.myappname.targetKeyboard"];
    [_defaultvalue setBool:YES forKey:@"Layout"];
    [_defaultvalue synchronize];

}

- (IBAction)leftAction:(id)sender {

    _defaultvalue = [[NSUserDefaults alloc] initWithSuiteName:@"group.myapp.myappname.targetKeyboard"];
    [_defaultvalue setBool:NO forKey:@"Layout"];
    [_defaultvalue synchronize];
}

然后我使用以下代码在我的扩展目标中检查这个 BOOL 值,并根据我的需要更改键盘布局:

-(void)LoadKeyboardview
{

_defaultvalue = [[NSUserDefaults alloc] initWithSuiteName:@"group.myapp.myappname.targetKeyboard"];

        if([_defaultvalue boolForKey:@"Layout"])
        {
            self.ObjKeyLayout=[[[NSBundle mainBundle]loadNibNamed:@"keyboardLayout" owner:nil options:nil]objectAtIndex:0];
            [self addGesturToKeyBoard];
            self.inputView =self.ObjKeyLayout;

        }
        else{

            self.ObjKeyLayout=[[[NSBundle mainBundle]loadNibNamed:@"leftLayout" owner:nil options:nil]objectAtIndex:0];
            [self addGesturToKeyBoard];

            self.inputView =self.ObjKeyLayout;

        }

}

相同的代码在模拟器 ios8 设备 iPhone5 中运行良好。请问是否需要更多的代码,我在苹果文档中读到说 NSUserDefaults initWithSuiteName 帮助我,谢谢。

更新:

我已经在 plist 和 setting->keyboard-customkeyboar->Full Access ON 中设置了 RequestsOpenAccess

我的扩展 Plist:

enter image description here

最佳答案

我得到的解决方案是创建新的临时配置文件并启用 app-groups 并从 Xcode 项目中设置 app group target-->capability--展开 App Group 然后点击 + 添加应用组,如下图所示:

enter image description here

并为我的键盘扩展目标做同样的事情。然后我在 NSuserDefault 中使用了这个设置应用程序组标识符:

 _defaultvalue = [[NSUserDefaults alloc] initWithSuiteName:@"group.keyboaredExtention"];
     [_defaultvalue setBool:NO forKey:@"Layout"];
    [_defaultvalue synchronize];

现在在我的设备和模拟器中工作正常。希望对其他人有帮助。

关于ios - 使用主机应用程序与自定义键盘扩展进行通信,但无法在设备中运行但可在模拟器中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26162773/

相关文章:

ios - 分发企业(内部)iOS 应用程序

iphone - 为相机的每一帧应用一个过滤算法

ios - iOS 8 中呈现的 View Controller 中的界面方向不正确

ios - 如何知道 iOS 8 扩展中的当前 interfaceOrientation?

ios - 在 iOS 中调用插入行到 IndexPath 后由于某种原因不保存数据

ios - 如何使用模态视图作为菜单并连接背景 View Controller ?

ios - @2x 图像太大,在视网膜显示器上超出范围

ios - 设备方向在标签栏应用程序中启动所有 View Controller

iOS 8 自定义键盘应用程序扩展 - 更改方向高度

iOS 键盘扩展访问 PHImageManager