创新编码

不说话,装高手。

Maintain silence and pretend to be an experta

手把手将Cordova应用上架App Store

2024-07-21 18:56:54Cordova

准备工作

上架ios应用需要准备几样东西

  1. 一台装有XCode的MacBook电脑,用来编译项目

  2. 注册Apple Developer 个人账号,在找掌握Apple Developer企业账号的人,叫他把你加进组织,这样你就能用你自己的账号操作

  3. 一台苹果手机,主要用来真机测试

创建证书请求文件

证书请求文件,一般称呼为CSR,一会请求证书需要用到这个东西,首先打开应用程序 > 实用工具 > 钥匙串访问.app,左上角点击钥匙串访问 > 证书助理 > 从证书颁发机构请求证书…,如下图所示:

3.png

在如下图界面,用户电子邮件地址:填你开发者账号注册邮箱,常用名称:随便起但是要方便寻找,选择储存在磁盘(CA电子邮件地址就不用填了),放到桌面上,最好跟项目放到一起

4.png

有CSR之后就可以去苹果开发中心生成证书了

登陆苹果开发者中心生成证书

登陆开发者中心后看到如下界面,点击下面框框的那块

5.png

申请证书

一下操作需要执行两次,因为我们需要一个测试证书和一个发布证书

6.png

7.png

8.png

9.png

点击download将证书下载到本地

注意:证书下载到本地后一定要双击一下导入钥匙串里面

10.png

注册App Identiifier

只有注册了App Id,你才可以在App Store Connect中新建App

11.png

12.png

13.png

14.png

15.png

点击Register,App Id注册成功

注册真机测试所用的设备

真机测试所用的设备必须在开发者中心注册,否则应用装不上去

16.png

17.png

18.png

点击Register注册成功

注册配置文件

该操作同上面一样也需要执行两次,分别用测试证书和发布证书注册debug和release的配置文件,生成的文件需要鼠标双击导入XCode,要不然配置时选不到

19.png

20.png

21.png

点击确定后就能download配置文件,download下载后记住一定要双击导入XCode

在App Store connect中创建新的App

22.png

23.png

24.png

创建成功后里面的信息能填的尽量填下,要不会提交不了,里面还有一个构建版本,这个是需要在XCode中打包最后由XCode传上来的

Xcode构建应用

在构建应用时说明下,苹果官方发出的声明说:2020年3月之前已经上线的项目,可以继续使用UIWebView继续迭代版本,每次提交审核会收到苹果的警告邮件;2020年3月之后的项目,必须使用WKWebView,提交审核才能通过,不然提示二进制数据错误。详情苹果官方说明点击下面链接

ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of new apps that use UIWebView APIs starting from April 2020. See https://developer.apple.com/documentation/uikit/uiwebview for more information.

在cordova-ios6.1.0之前我们是通过一个官方插件将UIWebview转成WKWebview,用法如下

折叠代码 复制代码
cordova plugin add cordova-plugin-wkwebview-engine

// 在config.xml做出加入配置
<preference name="WKWebViewOnly" value="true" />
    <feature name="CDVWKWebViewEngine">
        <param name="ios-package" value="CDVWKWebViewEngine" />
    </feature>
<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" /> 

cordova-ios6.1.0之后已经将UIWebview完全剔除,所以不需要上面那个插件

折叠代码 复制代码
cordova platform add ios@6.1.0

在使用WKWebview时候,我们会发现请求接口或者获取手机本地图片会发生跨域,这是因为WKWebview安全机制的问题,原先UIWebview是支持跨域的,接口请求的跨域我们可以通过后台配置跨域请求,手机本地图片跨域我们在XCode中找到CDVWKWebViewEngine.m文件

折叠代码 复制代码
// 在这个文件中找到这个方法
- (WKWebViewConfiguration*) createConfigurationFromSettings:(NSDictionary*)settings
{    
    WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init];
    ...
    这里还有一部分代码,不用删除
    ...
    //在return上面添加下面两行代码
    [configuration.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];
    [configuration setValue:@YES forKey:@"_allowUniversalAccessFromFileURLs"];
    return configuration;
}
解决跨域问题,Cookie获取不到的情况。

进去 platform > ios目录,这里就是整个cordova-ios项目,在开始之前我们先把一些能做的东西做了,在这个目录下进入 项目名 > Images.xcassets目录,这里存放的是应用的图表以及启动图,在这里我们把应用图表给替换了,我使用的是一款叫Asset Catalog Creator的软件,导入一张1024*1024的图片就可以生成我们项目所需要的App icon,我们把它生成的AppIcon.appiconset文件夹替换掉原来的AppIcon.appiconset文件夹,这样icon就配置完成了

25.png

双击xxxxxxx.xcodepro文件将项目导入XCode,下面进行XCode的配置

26.png

27.png

28.png

到这一步我们应用基础配置、证书配置、信息配置基本完成

应用打包和测试

测试我们分两种方法,模拟器测试和真机测试

真机测试方法一样,前提是用来测试的手机必须是在开发者中心注册过的,要不然安装包装不进去。把手机连接数据线插件来,XCode会自动检测注册过的手机,之后打开下拉框就能看到真机名称,之后选择再点击三角形即可

29.png

应用提交

应用经过测试过后就可以打包构建版本提交到App Store Connect中进行审核了

打开下拉框选中小锤子,在点击Product > Archive就可以打包构建版本,打包成功后会出现有图界面,接下来先执行第一步验证构建版本,如果验证不通过的话就算提交上去也是审核不过的,验证通过了就可以执行第二步上传构建版本,一般来说会因为网络问题卡一段时间,不过问题不大,上传成功了一般过一会就能在App Store Connect中找到构建版本,之后填写相关资料就可以提交审核了

30.png

31.png

上传成功了但是又不出现构建版本,这时候请注意自己的邮箱,一般有问题的构建版本都不会出现在App Store Connect中

问题列举

列举几个我遇到的问题:

    这个是原因上面已经提过,因为ios现在已经弃用UIWebView了,所以我们提交的构建版本全部都要是用WKWebview,要不然就算上传成功了 App Store Connect也会因为元数据出错为由拒绝

  • ITMS-90683: Missing Purpose String in Info.plist - Your app’s code references one or more APIs that access sensitive user data. The app’s Info.plist file should contain a NSBluetoothAlwaysUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you’re using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn’t contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

    出现这个错误是因为我应用用到了蓝牙功能(NSBluetoothAlwaysUsageDescription)但是并没有在info.plist上声明权限,所以我们回到info.plist上把这个权限声明一下就好

  • Guideline 2.1 - Information Needed - We’re looking forward to continuing our review, but we need more information about your business model and your users to help you find the best distribution option for your app. Our preliminary review of your app suggests that your app may be a good fit for our Apple Business Manager program, which is designed specifically for business apps.

    这个问题一般是审核的人对这个应用有一些疑问,他会提出几个问题需要你回答,这时候你只需要认真用双语来回答他的问题就行,记住文字一定要友好

  • 一个中规中矩的应用一般不会被拒绝,被拒绝的一般一般是应用功能包含暗示赌博、暴力、色情等内容,或者是集成的原生功能使用了不被apple认可的第三方库,这时候只有更换插件,因为我们应用的原生功能都是通过Cordova plugin集成进来的,例如:下面的错误是因为 我使用的一个插件里面用了一个不被认可的三方库,这种情况连前面版本验证都过不去

32.png