我有一个RhoMobile应用程序,用户可以在其中添加联系人到他们的移动设备。它在所有设备上都运行良好,包括Android、iOS 5及以下版本,但在iOS 6上不起作用。还有其他人有这个问题吗?我相信苹果改变了iOS 6的PIM实现,这可能是导致问题的原因。
我代码:def add_contact
Rho::RhoContact.create! ({"first_name" => "John", "last_name" => "Doe"})
end
我在build.yml
中启用了pim功能任何帮助都将非常感激。
从iOS 6开始,未经用户允许,应用程序无法访问用户的联系人。当我们执行-> Rho::RhoContact.create!, RhoMobile应用程序试图访问用户尚未授予的地址簿权限。此外,该应用程序不会自行请求许可。你需要从应用内部强制触发权限请求。
你可以这样做:-
转到rhodes -3.4.3(我的rhodes版本是3.4.2)-> platform -> iPhone -> Classes -> Phonebook -> Phonebook.m
在文本编辑器或xCode中打开。
在页面的顶部,定义以下内容:-
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
一旦完成,找到函数->
void* openPhonebook()
查找行->
memset(phonebook, 0, sizeof(LocalPhonebook));
下面的代码用->
替换if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {
CFErrorRef myError = NULL;
phonebook->_ab = ABAddressBookCreateWithOptions(NULL, &myError);
ABAddressBookRequestAccessWithCompletion(phonebook->_ab, ^(bool granted, CFErrorRef error) {
if (granted) {
phonebook->_people = NULL;
phonebook->_len = 0;
} else {
// Handle the error
}
});
}
else{
// for iOS < 6
phonebook->_ab = ABAddressBookCreate();
if (phonebook->_ab) {
phonebook->_people = NULL;
phonebook->_len = 0;
}
}
return phonebook;
在上面的代码中,phonebook->_ab是我的ABAddressBook引用
现在你应该可以走了…