我的 iPhone SE 在两年又七个月之后终于要退休了。11 月 9 日,我买了最近出的 iPhone XS,并开始迁移数据。换手机是一个清理无用 app 和本地照片的好机会,所以我全新设置新手机。
然后噩梦就开始了,还是微软苹果双重噩梦。我现在已经从噩梦中苏醒,所以记录下来,说不定一些内容在下次更换手机的时候还会用得到。
消息同步的噩梦
第一个令人恶心的事儿是 Apple 的 Messages in iCloud 的愚蠢实现。我的 iMessage 本地大概有 3.2 GB,之前我没开 Messages in iCloud,现在因为要同步消息,就开开了,等待个把小时后,出现了一封邮件:You have only 10% of your free 5 GB of iCloud storage left.
等我反应过来的时候,容量已经被塞满了。于是我彻底关闭 Messages in iCloud 并删除内容,这个时候第一个恶心的事儿出来了:必须等待 30 天才能从 iCloud 上删除所有的消息数据(这是为了让你有 30 天可以反悔并下载数据)。如果在 30 天之内重新打开 Messages in iCloud,则会恢复现在的容量占用。
接下来我按照 iOS 的提示开始删除不需要的消息附件,这个时候我发现了一个令人震惊的事情:iMessage 居然把 sticker 每次出现都存了一个 copy。我不能想象 Apple 的工程师有多傻才会干出这样的事情。为什么不能每个 sticker 按照 AppId.Version.SeqNo 的方式去引用,然后本地对于每个 sticker collection 的每个版本的每个 sticker 只存一个副本。而且,删除附件的时候不能选择删除全部附件,需要手工选择每一个,删除,然后离开再回到删除界面继续。微信在删除附件(“清除缓存”)方面比 iMessage 不知道高到哪里去了!
好删歹删删完了,然后让 iCloud 扩容,重新打开再同步,然而 iOS 不会上传任何消息。更可恶的是,第一次(造成容量堵满的)同步只上传了附件,一条消息也没上传。这个设计的弱智之处在于:开始同步之前没有计算过需要的空间并提示;无法立刻删除已经同步的内容再重新开始同步;同步的时候不先同步消息本身而是先把附件上传进去,而且附件传进去之后没有消息引用它,也不会及时进行垃圾清理;扩容之后重新打开同步,无法继续上传内容。
基本上来说我觉得我的 iCloud 里面消息的存储已经处于一锅粥的状态了,目前我能想到最简单的方式就是等它过期后重新打开同步。
联系人同步的噩梦
我的数字内容中心化于 Microsoft 账户,所以在 iOS 设备上我关闭了 iCloud 联系人同步,用 Microsoft 账户同步联系人。此外,我用 Outlook for iOS 管理邮件和日历,所以我设置手机的前几步就是删除 Mail 应用。
我把 Microsoft 账户加入 iPhone 进行同步后,无论怎样都无法同步到联系人。我尝试了关闭并打开联系人同步、删除账户再添加,都没有效果。与之相对比,同时处于插电、满电、同一网络下的 iPhone SE 却可以同步,而且关闭并打开联系人同步、删除账户再添加都可以重新正确同步。
我百思不得其解。过了好几个小时,我决定把 Mail 应用加回来,因为可以在 Mail 里面通过下拉刷新来强迫同步。加回来之后打开 Microsoft 账户的邮件同步,发现 Mail 里面有一条 消息,大意是(省略了不重要的内容):
需要您的操作来同步内容
Microsoft 推荐 Outlook for iOS。您已经设置使用内置 Mail、Calendar 和 Contacts 同步 Microsoft 账户,在同步开始之前,我们希望您了解使用内置 app 和 Outlook for iOS 同步您的账户之间的区别。
请选择您希望获得的体验:
- 免费下载 Outlook for iOS
- 继续使用 Mail
如果您没有回应,内容将在几个小时内开始同步到您的设备。
这个消息并不是邮件,而是 ExchangeActive Sync 的魔法。类似的消息在 Outlook.com 从非统一协议但支持 EAS 切换到完全基于 Exchange 的时候也会出现在 Outlook (Windows Desktop) 里,提示用户应该删除并重新(用 AutoDiscover)添加 Outlook.com 邮箱。
如果选择“继续使用 Mail”,则会转到 一个网页 提示你“我们了解您偏好不使用 Outlook for iOS 了,您的内容将会开始同步”,并且内容立刻就会同步进来。
Microsoft 这个设定的愚蠢之处在于:我虽然知道 Outlook for iOS 可以自动把联系人保存到设备上,但是我并不想这么做,我想通过 iOS 的 EAS 同步联系人,但是用 Outlook for iOS 同步邮件和日历;如果我跳过了强行读一下邮件的步骤,我需要等很久很久才会开始同步。Microsoft 应该立刻同步日历和联系人,并通过 EAS 的邮件魔法来提示用户,这样一个完全不关心邮件的用户仍然可以正确同步联系人。
幻想杀手
作为非常擅长触发可复现软件 bug 的人,今次也不例外。该 bug 在 iOS 12.1 上可稳定复现(美国无锁 iPhone XS 和中国无锁 iPhone SE)。复现步骤:
- 整理主屏幕使主屏幕只有一屏 widgets 和一屏 app。
- 打开任意一个未添加到主屏幕的网页。
- 添加该页面到主屏幕。
该 bug 的现象是:在原先一屏 app 后侧(对于从左到右的语言来说是右侧)出现另一屏,但内容是空的。实际上,新固定的网页在这一屏,要消除该现象,最简单的方法是:长按某个 app 或文件夹,让图标开始抖动,再切换到新的一屏一次(如果本来就在新的一屏,离开再回来)。此后,你将看到新固定的页面的图标,并可以正常操作之。
下面的视频展示了这个 bug 的复现过程。如果你的浏览器不支持 HTML5 video
标签,你可以点击 这里 查看视频。
由于 孫志貴的经历,我实在是没兴趣严肃给 Apple 汇报 bug。
请启用 JavaScript 来查看由 Disqus 驱动的评论。