肇鑫的日常博客

日常

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

从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提交给了苹果反馈。

生活到处是陷阱之工商银行信用卡

大约两周前,工商银行客服给我打来电话,推荐我办理他家的信用卡。我想,那就办一张吧。一周后,收到了卡。又过了几天,我收到一条短信,说是工商银行的卡绑定微信会有优惠券。我想到我还有张信用卡没激活呢。那就激活看看吧。

按照提示下载了“工银e生活”App。我其实很不爽这些银行,干嘛银行卡和信用卡非要用不同的App。然后按照步骤激活,结果发现不能激活。看到说明下面有一行字,说是电话或者网上申请的信用卡,首次激活,必须去营业网点。真是坑!

17号到了营业网点,终于激活了。回家!

我这个人,不太习惯带钱包。都是把银行卡和身份证、公交卡、零钱之类的用一个小夹子夹起来就完事了。那天坐的是公交车。上车之后,第一遍刷卡,没响;又刷一遍,还是没响。公交司机说你的卡没钱了。我说还有好几百呢啊。他让我把公交卡拿出来单独刷,这次终于机器响了。大家记住这一幕。我一共刷了3次。这里有大坑!

回到家,打开信用卡App,发现已经产生了3.6元的费用。但是这个信用卡App却看不到明细。这个3.6元到底是怎么产生的呢?

今天,我想我可以去工商银行的网站上看明细。登录官网需要用手机银行刷码。结果刷完码我发现可以直接用手机银行查看信用卡的明细。信用卡推荐的信用卡App不能看明细,但是信用卡没推荐的手机银行可以。太坑了!

IMG_0201

根据说明,这3.6元是两笔1.8元的地铁扣费。当然我那天没坐地铁,坐的是公交车。也就是说,我那天划卡时,虽然机器没响,但是钱扣了。所以我那天付了3份钱,信用卡扣了两次,公交卡又扣了一次。实在是坑!

于是,我打电话给工商银行客服。第一个客服,在知晓了我的情况之后,和我说她没权限给我拒付,需要要转到上一级的客服。第二个客服和我说,他可以帮我拒付。但是银行拒付周期长,而且还需要调查。调查之后如果认为我不符合,不仅不能拒付,而且每一笔还有收取10元的调查费用。问我是否能接受。我当然不能接受了。这也太坑了。

我和他说,首先,我根本不知道你们这个信用卡有这个公交卡的功能。上一个客服还和我说,公交卡需要绑定才能具备这个功能。但是我什么也没绑就自动开通了。其次,你们这个卡扣费了,但是机器不响。机器不响,人家公交司机就不认扣费成功。那我就需要再次划卡。这才是导致这次问题产生的原因。问题的产生根本不在我,而你们还要我付这个调查的费用。我当然不能接受。

银行客服于是承诺要向上反映这个问题。说是3天之内给我答复。我真是挺无语的。不过是接个电话,办了张卡。结果多出这么多麻烦事。真是太坑了!

小米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界面。