突然有一天有玩家反馈说应用打开外部连接打不开了,于是查了一下,报错:
BUG IN CLIENT OF UIKIT: The caller of UIApplication.openURL(:) needs to migrate to the non-deprecated UIApplication.open(:options:completionHandler:). Force returning false (NO).
由于ios18废弃了旧的openURL接口,我们需要修改CCApplication-ios.mm文件的Application::openURL方法:
原先方法:
void Application::openURL(const std::string &url)
{
NSString* msg = [NSString stringWithCString:url.c_str() encoding:NSUTF8StringEncoding];
NSURL* nsUrl = [NSURL URLWithString:msg];
[[UIApplication sharedApplication] openURL:nsUrl];
}
改后方法:
void Application::openURL(const std::string &url)
{
NSString* msg = [NSString stringWithCString:url.c_str() encoding:NSUTF8StringEncoding];
NSURL* nsUrl = [NSURL URLWithString:msg];
if (@available(iOS 10.0, *)) {
[[UIApplication sharedApplication] openURL:nsUrl options:@{} completionHandler:nil];
} else {
[[UIApplication sharedApplication] openURL:nsUrl];
}
}
这里ios 18 将打开链接的方法里面添加了回调方法,我们没有用的话可以填空,这样ios18的设备也能打开外链了。
需要注意的是 cocos 工程的话,有好几个地方需要修改。