9

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

 3 years ago
source link: https://blog.dteam.top/posts/2021-01/refactor-legacy-app-to-reload-in-apple-app-store.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

前言

多年前开发的 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 即可。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK