多年前开发的 App,由于各种原因没有翻新过,近期需要紧急上架苹果应用商店。可是应用通过 XCode 上传后,明明已经提示上传成功了,但在苹果应用管理界面看不到,苹果的拒绝邮件却出现在我的邮箱中。此后,断断续续,历时 2 个月终于搞定所有问题,上架成功。这里把遇到的问题及其解决方法总结下,方便后来者查阅。
苹果的拒绝邮件中已经写明,需要使用 WKWebView:
ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability.
苹果在 iOS 8 之后,出于安全考虑,建议使用 WKWebView 替代UIWebView。
先修改 config.xml 文件,配置 WKWebView 的相关内容:
<preference name="WKWebViewOnly" value="true" />
<feature name="CDVWKWebViewEngine">
<param name="ios-package" value="CDVWKWebViewEngine" />
</feature>
<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />
<preference name="WKPort" value="8080" />
<preference name="UseScheme" value="false" />
由于 WKWebView 不支持 Cookie,如果原来采用的是 Cookie 与后台进行验证,那么就要改成 JWT 方式了。
这个需要登录后,后台返回一个 token,App 在请求的 Header 中使用 Authorization 将 token 发给后台进行验证。
.factory("httpInterceptor", function (
//...
) {
return {
request: function (config) {
if (!angular.isUndefined(config.params)) {
//...
config.headers["Authorization"] = 'your token'
}
return config;
},
}
})
WKWebView 下,在调试界面时,你会发现访问界面的链接已经不再是 file://方式,而是变成了 HTTP 方式。这样,界面上图片如果是本地图片,且使用 file://,就会出现图片找不到的问题。这里需要将图片的路径转换成 Http 方式:
window.resolveLocalFileSystemURL(imageURI, function (fileEntry) {
fileEntry.file(function (fileObj) {
var reader = new FileReader();
reader.onloadend = function (evt) {
var image = new Image();
image.src = evt.target.result;
image.onload = function (evt) {
var item = {
//...
//下面这里,将fileEntry.nativeURL转换一下
imageUrl: window.Ionic.WebView.convertFileSrc(fileEntry.nativeURL),
};
data.push(item);
//...
image = null;
};
};
reader.readAsDataURL(fileObj);
});
});
上述问题修改完毕后,第二次上传苹果商店,再次被拒绝,原因同上。
由于不知道苹果是如何监测 App 是否使用 UIWebView,所以我干脆采用一个笨方法,用 XCode 打开 App 文件,搜索’UIWebView‘,发现有些老旧插件也用到了 UIWebView。根据实际情况可升级或替换插件。
苹果商店上架的条款时常会更新,上架时如果收到拒绝邮件,别慌,拒绝原因会清楚的写在邮件中,按照要求改进 App 即可。
觉得有帮助的话,不妨考虑购买付费文章来支持我们 🙂 :
付费文章