肇鑫的日常博客

日常

近期遇到的几个与苹果审核相关的一些问题的整理与吐槽

从8月17到8月31日,历时半个月,终于搞定了我的第一个订阅的新应用。期间遇到好多之前非订阅应用审核时没有过的新问题。在这里小结一下。

issues

第一版

第一版遇到了三个问题。

  1. 审核人找不到应用内购买的页面。

    1. 的确。这个版本我没有特意设置购买单独的购买选项。应用本身是免费的。订阅虽然收费,但是只有你点击到了需要订阅的高级功能时,才会提示你是否需要订阅。
    2. 不过既然苹果的审核人员找不到,那我就在应用的主界面上添加一个高级版订阅的按钮吧。
  2. 应用支持开机自启,默认是开启的,可以在设置里关闭。苹果不允许,要求默认不支持开机自启,然后询问用户是否开机自启。

    1. 收到。在新增的高级版订阅按钮旁边添加一个,修复不能开启自启的按钮。
  3. 不符合订阅全部条款。
    eula_issue-1140

    1. 这条很长,我当时有点儿慌。我还以为不让我使用订阅功能呢。不过随着后来的审核,我逐渐意识到,原来订阅和一般的一次性购买不同。苹果要求将用户协议和隐私协议,都放在和订阅的同一个页面。
    2. 所以我的这个其实就是缺少用户协议。

另外,苹果的这条审核建议的说明存在误导性。它提到的meta,指的是App Store Connect网站上,应用界面中的设置EULA的位置。那个位置默认就是上面提到的标准苹果使用协议。所以,真正有问题不是它建议的修改那里。而是将你的应用中的订阅页面,添加这个协议的链接。就像苹果的设计指南建议的那样。

apple_subscription_sample

第二版

添加了苹果要求的功能之后,我上传了第二版,结果还是又被拒了。这个被拒我与苹果交流5轮。前面的几轮,主要是上面提到的问题3,EULA的问题。因为当时我还没有意识到的苹果建议的误导。所以我一直在修改App Store Connect中的EULA的位置。我甚至还修改它为自定义EULA,结果苹果还是说不行。

直到最后,苹果给我发过来一个链接,让我按照上面的进行设计。我才发现,原来苹果要的其实是在订阅界面同时显示用户协议。

期间,我还遇到一个苹果自身的bug。重新提交版本的问题。按照之前的审核流程,如果你的审核是meta被拒,那只需要修改meta,然后等审核人员继续审核就可以。如果是二进制包被拒,就需要重新上传新版应用,然后再次排队审核。但是这次。我提交了新版的包之后,居然提交审核的按钮是灰的。
这一度导致我以为苹果是不是修改了审核流程。最后我发现,需要先在审核里点击取消当前版本的审核,新版的上传的提交审核才能点击。
我询问苹果审核人员,是不是必须这么做。因为这么做和之前的审核不太一样。苹果审核人员没有正面回答我这个问题。而是给我两个链接,让我自己学习苹果的审核流程。
几天苹果悄悄修复了我上面提到的那个问题。😮‍💨现在只要提交新版就可以点击审核了,就像过去一样。

第三版

这个版本有三个问题。

  1. 应用的权限的问题。
    1. 我的应用设置了用户选择的读/写权限。但是应用本身不需要这个权限。
    2. 这个权限我当初设置是因为我想实现用户将脚本拖动到脚本窗口,实现编辑的问题。但是后来我觉得这个功能意义不大。用户其实直接复制粘接也可以。就没实现这个功能。
    3. 将读写权限,改成默认只读即可。
  2. 我的订阅只写了可以免费试用7天,没有写订阅价格。
    1. 的确我没写。因为我觉得点击订阅之后,苹果弹出的窗口已经显示价格了。这里吐槽一下苹果的订阅流程。不仅速度慢,窗口弹出的速度要以10秒为计量单位,而且还分成好几步,要弹好几次窗口才能完成订阅。
    2. 不过既然苹果要求订阅显示价格,那我加上就是了。
  3. 还是上面提到的EULA的问题。

第四版

这个版本的审核显示出苹果审核人员的不专业性。最初他说我的应用显示的购买价格,和App Store Connect里设置的不一致。

这个其实根本不可能。因为我框架是RevenueCat,它基于苹果的StoreKit,获取的价格就是直接苹果服务器提供的。我向苹果进行了说明,还给他截了个图,和他我认为这个价格是相同的。

苹果启动重新审核,然后通过了这个版本。

我本以为这就可以了,终于可以上架了。然后我从商店里下载了我的应用,点击使用高级版。结果我发现,居然接收不到苹果服务器发来的订阅价格。

我打开App Store Connect,结果发现苹果只通过了我的主程序,订阅居然还是拒绝的状态。因为订阅是拒绝的,所以应用就没发从苹果的服务器获取订阅的信息,这在用户看来,就是我的应用出现了问题。这简直太坑人了。

这个问题明显是苹果审核人员,甚至是审核系统的问题。因为我的应用是第一版,订阅就应该和审核一起通过。结果苹果只通过了主应用,没通过订阅。这将导致我的应用的可用性降低。而这种问题,审核系统应该给审核人员提示,避免这种低级错误的产生。

第五版

第四版通过之后,我才发现,如果只提供一种按月订阅的方式,每个月发给自己兑换码太麻烦了。于是我又增加一个年费订阅的方式。这样只需要每年给自己提供一个兑换码就可以了。😄

第五版我特意标注了是为了苹果审核人员给我订阅进行审核才提交的。结果这个版本很快就通过。但是审核还是拒绝的状态。

订阅审核

我现在别无他途,只能找苹果求助了。我发邮件给苹果审核客服,要求单独审核我的订阅。结果回我说,我的应用已经通过了啊,不需要审核。我说我要求审核的是订阅,不是主应用。经过几轮之后,订阅还是没通过的状态。

这里说一下,我遇到的订阅的问题,主要有两个,一个本地化的meta,显示被拒绝,这个修改一下就可以了,然后显示的是等待审核。

另外两条,显示的都是需要开发者操作。这个需要开发操作,我在网上找到的办法都说,只需要加个逗号或者空格,然后再改回去就可以了,然后点击审核就可以了。但是我这里遇到了苹果的bug,无论我怎么修改,如何修改,那个需要开发者操作总是不消失,而再次审核的按钮也一直是灰的。

这一度让我想放弃,我发邮件给苹果,说明了这个情况,然后询问苹果我是不是需要删除了这个订阅新建一个才可以?

苹果没有回复我这个邮件。但是几天后,我发现我这两个订阅都已经显示审核通过了。

然后我打开我的应用,发现可以获取订阅信息了。但是只有月费订阅的信息,年费的还是看不到。

第六版

于是我更新了一下第三方框架,提交了第六版。

第六版当天就审核通过了。下载回来后,我发现,终于可以显示全部的订阅了。

App Store Connect的其它严重问题

这期间,我还遇到了苹果商店的其它的严重问题。这个发生在我的另外一个应用咕唧上面。

大家知道,Xcode在打包应用时,会使用Xcode自动生成的第三方证书对应用进行签名。大概20号左右,我收到了苹果的邮件,提醒我Mac的第三方证书将在30天后过期。我想,还不急,等过期了再更新就可以了。

其实更新很简单。就是Xcode点击新建第三方证书就行了。我没弄,结果就出问题了。

22号左右,我更新了咕唧的一个新版。结果苹果直接给我拒了。说我的应用有两个问题:

  1. 没有签名。
  2. 应用没有使用沙箱。

我一看就知道这明显是苹果的审核系统的bug。因为我是用Xcode打包的,怎么可能没有签名呢?而且我没有使用沙箱,也不可能,因为我根本没有改变这个设置。并且我用系统自带的活动监视器,查看我的运行的TestFlight版本的应用,也提示这个应用使用了沙箱。

而且我记忆中隐约有印象,类似的问题几年前出现过。也是第三方证书临近过期的时候出现的。

我在Xcode里新建了一个第三方证书,然后修改了应用版本号。重新打包提交,结果这个应用就被通过了。

这证实了我的怀疑。苹果的审核系统存在bug。当第三方证书时间小于30天时,苹果的审核系统将拒绝应用。我将这个bug提交给了苹果反馈。

小米AX3600路由在Mac下安装Clash

之前一直我在Mac上一直使用的是ClashX,然后在手机上使用的是小火箭。这次为了调试新应用的功能,我需要在路由器上安装Clash。

步骤

小米的官方固件是不支持Clash的。但是由于它的官方固件基于OpenWRT,所以只要我们获得了SSH权限,就可以通过远程登录来安装自己需要的软件。获取SSH权限的操作,是通过特定版本的官方固件的漏洞来实现的。而最新的官方固件已经没有这个漏洞了,因此我们的第一步就是检查路由当前安装的固件版本。

  1. 检查固件版本。如果不是1.0.17,那么就需要刷这个版本的固件。(目前最新的官方固件是1.1.19,所以大部分人应该都是需要降级固件。)如果是降级,建议刷新固件时,将路由的设置重置。
    1. 备份当前固件设置。
    2. 记录当前路由上网拨号的用户名和密码,等下会用到。
    3. 手动选择下载好的固件。点开始升级。
  2. 重新进入路由并设置,可以正常上网后。
  3. 获取SSH权限。
  4. 固化SSH权限。
  5. 升级系统到最新固件。
  6. 通过Telnet获取SSH权限。
  7. 安装Clash。
    1. 配置Clash
    2. 获得yaml配置
    3. 设置开机自启。
    4. 访问UI界面。

修改Mac中iOS/iPadOS设备默认备份的位置

起因

我的iCloud只买了50G的,其中iPhone和iPad的备份占了大头。终于有一天,提示空间不够了,要加钱。于是我选择手动备份iPad,但是我发现,苹果默认备份是在主磁盘,并且没有改存储设置的选项。让一个很少用到的备份,占用主磁盘,实在是太不划算了。于是我查找修改的办法。

原理

访达中默认备份的位置是~/Library/Application\ Support/MobileSync/Backup文件夹。我们只需要将这个位置通过ln转移到我们需要的位置即可。

实践

  1. 打开访达(Finder),按下cmd+shift+o,输入~/Library/Application\ Support/MobileSync/,跳转到这个文件夹。
  2. 如果上面的文件夹不存在,就创建一个,名字一定要拼对。
  3. 查看底下是否有Backup文件夹,如果有,执行4、5、6。如果没有执行4、6。
  4. 打开另一个访达窗口,找到你想要保存备份的文件夹位置,我这里是/Volumes/1T/MobileSync/Backup/
  5. 将3中Backup内部的文件夹复制并粘贴到4的文件夹中。完成后,删掉3中的Backup文件夹。
  6. 打开一个终端(Terminal),输入命令ln -s /Volumes/1T/MobileSync/Backup/ ~/Library/Application\ Support/MobileSync/Backup
  7. 在Finder中点击备份,你会看到新备份保存在指定的位置了。

参考