Xcode13.0及以上版本编译出的App在iOS 15.0及以上系统上被限制了URL Scheme query的数量为50。对于plist中LSApplicationQueriesSchemes配置的scheme数量超过50的App,可能会导致:
- OpenSDK某些接口返回错误结果;
- 无法使用Universal Link拉起微信,引发分享消息到微信后,应用名被添加"未验证应用"的问题。
使用13.0以及以上版本Xcode编译App的开发者需要适配以确保OpenSDK的正常使用。
背景
从iOS 9开始,iOS支持在工程plist中配置LSApplicationQueriesSchemes
。
示例:
将其他App的scheme配置到LSApplicationQueriesScheme
中后,可以通过以下代码判断是否可以通过scheme跳转对应的App。
BOOL ret = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weixin://"]];
在接入OpenSDK时,接入文档有要求在LSApplicationQueriesScheme
添加weixin 和weixinULAPI(如上面截图所示)。
iOS 15 系统相关变更
经验证,在iOS 15系统上,使用Xcode 13编译出的App,LSApplicationQueriesSchemes的数量会限制为50个。
第50个之后的scheme配置会不生效,以下代码会返回NO
BOOL ret = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"otherAppScheme://"]];
OpenSDK适配建议
如果LSApplicationQueriesSchemes配置的scheme数量小于50,或者"weixin"和"weixinULAPI"这两个sheme在前50,无需适配。
使用Xcode 12以及以下版本Xcode编译的App目前暂不需要适配。
确保"weixin"和"weixinULAPI"配置在LSApplicationQueriesSchemes的前50。
否则以下接口可能会在iOS 15系统上返回错误结果或者表现异常:
[WXApi isWXAppInstalled]
:安装微信的情况下,也返回NO[WXApi isWXAppSupportApi]
:支持的情况下,也返回NO[WXApi isWXAppSupportStateAPI]
:支持的情况下,也返回NO[WXApi sendAuthReq:viewController:delegatecompletion]
:会判断微信未安装,拉起网页授权。- 所有的接口都会无法使用Universal Link拉起微信,降级使用scheme拉起微信,导致未验证应用问题。