DTeam 技术日志

Doer、Delivery、Dream

改造遗留 App 以适应苹果 AppStore 新规

胡伟红 Posted at — Jan 5, 2021 阅读

前言

多年前开发的 App,由于各种原因没有翻新过,近期需要紧急上架苹果应用商店。可是应用通过 XCode 上传后,明明已经提示上传成功了,但在苹果应用管理界面看不到,苹果的拒绝邮件却出现在我的邮箱中。此后,断断续续,历时 2 个月终于搞定所有问题,上架成功。这里把遇到的问题及其解决方法总结下,方便后来者查阅。

UIWebView 改为 WKWebView

苹果的拒绝邮件中已经写明,需要使用 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 文件

先修改 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" />

改用 JWT 方式请求后台数据

由于 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 上架时注意事项

  1. Info.plist 文件中添加如下内容,可以避免填写”出口规则“:App Uses Non-Exempt Encryption = NO
  2. Images.xcassets 中 AppIcon 中的图片,如果出现警告,需要从文件夹中选中对应大小的 icon 添加上去
  3. 提交审批时,如果拒绝的原因是要求提供视频,就录制一个视频发布到网上,提供视频链接即可
  4. 如果 App 中使用的相机和相册,需要在 Info.list 文件中通过 NSPhotoLibrayUsageDescription、NSCameraUsageDescription 写明使用目的

小结

苹果商店上架的条款时常会更新,上架时如果收到拒绝邮件,别慌,拒绝原因会清楚的写在邮件中,按照要求改进 App 即可。


相关文章