2014-10-02 4 views
2

Я работаю с пользовательским расширением клавиатуры. что почти сделано, но я просто сталкиваюсь с проблемой с устройством, когда я обмениваюсь данными с расширением и моим хост-приложением, которое не ворует в устройстве, но то же самое, что работает в симуляторе. Мой код выглядит следующим образом:Общайтесь с расширением Custom Keyboard с Host App не работает в устройстве, но работает в симуляторе

HostApp Посмотреть контроллер:

- (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. пожалуйста, есть ли еще код, необходимый для этого, я прочитал в apple doc, который сказал, что NSUserDefaults initWithSuiteName поможет мне в этом благодарю вас.

UPDATE:

Я уже установили RequestsOpenAccess в PLIST и в Настройка-> клавишника customkeyboar-> Полный доступ на

Мой Plist продление:

enter image description here

ответ

1

Я получил решение, которое я создать новый временный профиль и включите группы приложений и установите app group из моего Xcode проекта от target-->capability--Expand App Group и нажмите на + add app group l икэ следующий скриншот:

enter image description here

И делать то же самое для моей цели расширения клавиатуры. Затем я использовал эту настройку приложения групп идентификатор в NSuserDefault:

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

теперь работает нормально в моем устройстве и симулятором. надеюсь, что это помогает другим.

+0

@quocViet я добавил свой ответ, как я решил это, пожалуйста, подумайте –

0

В iOS8 пользовательская клавиатура и содержащее приложение могут взаимодействовать с использованием общего контейнера.

Это достигается путем запроса пользователю разрешить полный доступ, который является настройкой в ​​приложении настроек iOS в разделе «Общие» - «Клавиатура» - «Ваша клавиатура» - «Полный доступ» (ВКЛ/ВЫКЛ).

Вы должны добавить этот параметр, чтобы Info.plist вашей клавиатуры:

RequestsOpenAccess 

Для получения дополнительной информации, прочитайте iOS8 Пользовательские клавиатуры Документация по API от Apple: https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html#//apple_ref/doc/uid/TP40014214-CH16-SW11

+1

спасибо за ответ. Я делаю то же самое, что и в моем вопросе, что хорошо работает в моем симуляторе, но только для устройства, которое не работает. –

 Смежные вопросы

  • Нет связанных вопросов^_^