为了打造 HomeLab 桌面监控和个人消息推送终端,我偶然入手了一台发布于十年前的老设备(iPad2)。为了能够更方便的使用这台设备,需要对这台设备进行一些特殊操作,比如系统降级、系统运行服务精简。

本篇内容,将作为监控终端打造的前篇,先聊聊如何对这台老设备进行系统精简。

写在前面

这台设备的最终效果图类似下面这样。

接近完成的效果图

出于方便后续进行系统降级和持久化越狱,来安装或运行自定义程序,我推荐使用搭载了“过时的” 32 位芯片的苹果设备,比如:iPad 2~4、iPad Mini 1、iPhone 3GS~5。这些设备在二手市场中供应充足,因为一般场景的使用价值不高,所以价格相对便宜。由于过去十年设备迭代速度非常快,许多机器硬件甚至还处于比较新的状态。

第一步:进行系统升级

为了确保后续使用稳定,建议退出设备的 Apple 账号,并对老设备进行系统还原。当然,由于 Apple 已经放弃针对这类 32 位芯片的设备的系统升级和维护,所以我们也可以直接将系统通过 MacOS 直接升级或使用恢复模式切换到 9.3.5 这个老设备能够使用的最高的系统版本。

操作方式很简单,将设备调整为恢复模式,或者在正常模式下连接电脑,在 Finder 中选择升级设备即可。

连接电脑后,对设备进行升级

等待设备完成系统升级之后,就可以看到久违的 iOS 9 系统界面啦。

久违的 iOS 9 系统界面

这时如果使用 “爱思” 之类的工具,可以看到设备的信息概览。

iPad2 设备系统基础信息

可以看到我手上这台设备,虽然出生于 2011 年,距今已有一个生肖轮回,但其实使用次数并不算多。

如果你只需要一台 7x24 小时能够用来展示网页程序的屏幕,那么到这步或许已经足够了,虽然在这台设备上运行网页会感觉到明显的卡顿

但是,我的目标显然不仅于此,我希望能够在这台设备上运行一些后台程序,并且设备要足够的流畅,这也能够避免进程被系统杀灭(程序闪退的一部分原因)。

虽然在 iOS 9.3.5 系统上,我们也能够进行设备越狱,并运行一些后台程序,但由于这个版本的 iOS 并不支持完美越狱,我们的越狱程序的有效期仅存在于每次运行越狱程序后到设备重启之前。并且,由于 iOS 9 之后 Apple 应用程序签名的有效期变的更短了,如果我们的设备在运行一周之后因为一些事情重启,上面的签名和安装流程还需要再来一遍,这未免太麻烦了

为了使用上更简单,需要考虑对设备进行“系统降级”。

第二步:准备系统降级

关于这类设备的系统降级,需要先使用一个闭源的软件完成“临时性越狱” https://phoenixpwn.com/

访问 Phoenix 项目页面,下载包含 32 位芯片设备漏洞的 IPA 程序,然后使用个人账号对应用进行签名,这里对软件的签名方案不唯一,我列举三种:

  • 可以使用 Cydia Impactor
  • 可以使用 Sideloadly
  • 还可以使用被集成在“爱思”这类刷机工具里的签名工具

这里选择哪款工具都无所谓,因为这个工具,我们只需要使用一次

对软件完成签名后(使用个人或临时注册的 Apple ID 签名即可),我们将其安装到设备中,会出现一个画着凤凰的图标。

在设备中安装已经完成签名的 Phoenix

虽然签名后的软件能够被安装到设备中,但是此时软件的签名证书因为未被系统信任,所以软件并不能被直接运行,还需要我们进行一些额外的操作。

对我们自签名的应用选择信任

在系统设置中的“通用”菜单中选择“设备管理”,能够看到我们签名“Phoenix”所使用的 Apple ID 账号。点击这个账号,会进入新的界面,在新的界面中选择信任这个应用。

然后打开“Phoenix”,一路“下一步”,就能完成设备的“越狱”啦。

设备在越狱过程中会自动重启(Spring Board 重载),当重启完毕后,桌面如果出现了 Cydia 的图标,那么说明越狱成功,可以进行下一步操作了。如果没有出现 Cydia 的应用图标,那么需要再运行一遍“Phoenix”。

完成了设备的“临时越狱”之后,就可以进行系统降级操作啦。

第三步:开始系统降级

系统降级操作,推荐使用这个开源项目 https://github.com/LukeZGD/iOS-OTA-Downgrader ,能够简化流程。

我们可以选择的系统降级方案有两种:将设备降级到 8.4.1 或者降级到 6.1.3 。

如果只计划在老设备上跑后台任务,那么降级到 iOS 6.1.3 就可以了,搭配系统应用和服务精简,我们可以获得 200MB 以上的可用内存;但如果考虑长期使用网页程序,iOS 8.4.1 会是一个更合适的选择。

想要完成系统降级,我们需要做几件事:

  1. 在 Cydia 中添加软件源 https://lukezgd.github.io/repo/,然后完成安装 opensshdropbear
  2. 将平板和电脑使用数据线连接好。
  3. 下载https://github.com/LukeZGD/iOS-OTA-Downgrader项目,然后执行 restore.sh 脚本,选择设备降级,你想降级的系统版本,然后同样是“一路 Next”,接着等着设备完成自动安装即可。

一切完毕之后,“新系统”的欢迎界面会展示在你的面前。

不同版本的 iOS 欢迎界面

如果你纠结选择哪个版本,可以考虑都降级一遍,对于 A5 芯片的设备来说,可以无限次的进行刷机降级、甚至是在一台设备上完成多版本系统的安装。只需要重复本文提到的第一步到第三步的操作即可。

第四步:开始系统精简

iOS 中有许多内置的程序,在 https://www.theiphonewiki.com/wiki//Applications 中,有一些针对这些服务的描述,如果你好奇这些程序是什么的话,可以自行浏览。

针对文章开头提到的桌面监控、个人消息推送场景,我清理掉了除了 AppStore、消息、设置、Safari 之外的所有程序,下面的脚本供你参考:

cd /Applications/
rm -rf Camera.app/ FaceTime.app/ FacebookAccountMigrationDialog.app/ Family.app/ Feedback\ Assistant\ iOS.app/ Game\ Center.app/ GameCenterUIService.app/ GameController.app/ MailCompositionService.app/ Maps.app/ MobileCal.app/ MobileNotes.app/ MobileStore.app/ MobileSlideShow.app/ Music.app/ MusicUIService.app/ Photo\ Booth.app/ PhotosViewService.app/ Podcasts.app/ Print\ Center.app/ PrintStatus.app/ Reminders.app/ SLGoogleAuth.app/ MobileMail.app/ TencentWeiboAccountMigrationDialog.app/ Tips.app/ Videos.app/ iBooks.app/ iAdOptOut.app/ MobileTimer.app/ iPodOut.app/ AdSheet.app/ SocialUIService.app/ FieldTest.app/ iOS\ Diagnostics.app/ quicklookd.app/ DemoApp.app/

cd /Library/Application\ Support/
rm -rf AdSheet/ Mail/

cd /System/Library/AccessibilityBundles/
rm -rf AdSheet.axbundle Calculator.axbundle Camera.axbundle CameraKit.axbundle Compass.axbundle CompassViewCalibrationService.axbundle FaceTime.axbundle FacebookSettings.axbundle Fitness.axbundle FitnessUI.axbundle Game\ Center.axbundle/ GameCenterPrivateUIFramework.axbundle GameCenterUIFramework.axbundle GameCenterUIService.axbundle GameKitFramework.axbundle Health.axbundle HealthKitUI.axbundle Image-QuickLook.axbundle InCallService.axbundle IncomingCall.axbundle
rm -rf MapKitFramework.axbundle Maps.axbundle MobileCal.axbundle MobileMail.axbundle MobileMailSettings.axbundle MobileNotes.axbundle MobilePhone.axbundle MobileTimer.axbundle MobileTimerFramework.axbundle Movie-QuickLook.axbundle Music.axbundle MusicLibrary.axbundle MusicSettings.axbundle MusicUI.axbundle Nike.axbundle
rm -rf PassKitFramework.axbundle Photo\ Booth.axbundle/ PhotoLibraryFramework.axbundle PhotoLibraryServices.axbundle PhotosFramework.axbundle PhotosUIFramework.axbundle PictureFramePlugin.axbundle Podcasts.axbundle PublishToMobileMe.axbundle PublishToYouTube.axbundle QuickLook.axbundle QuickSpeak.bundle QuickTime\ Plugin.axbundle/ RadarCompose.axbundle Reminders.axbundle RemindersWidget.axbundle SiriUI.axbundle SiriViewService.axbundle Siriland.axbundle SocialFramework.axbundle SocialUIService.axbundle SocialWeeApp.axbundle SpeakThis.axuiservice SportsTrainerFramework.axbundle Stocks\ WatchKit\ Extension.axbundle/ Stocks.axbundle StocksFramework.axbundle StocksWeeApp.axbundle Tips.axbundle TwitterFramework.axbundle TwitterSettings.axbundle VoiceMemos.axbundle VoiceMemosFramework.axbundle VoiceOver.axuiservice VoiceOverTouch.axbundle Weather\ WatchKit\ Extension.axbundle/ Weather.axbundle WeatherFramework.axbundle WeatherNotifications.axbundle iAdFramework.axbundle iBooks.axbundle iPodUI.axbundle iTunesStoreFramework.axbundle iTunesStoreUIFramework.axbundle

cd /System/Library/BulletinBoardPlugins
rm -rf PhotoLibraryDataProvider.bundle/ SocialBulletinBoardProvider.bundle/ WeatherNotifications.bundle/ CalendarProvider.bundle/

cd /System/Library/PreferenceBundles/
rm -rf CarKitSettings.bundle FacebookSettings.bundle FlickrSettings.bundle GameCenterSettings.bundle MapsSettings.bundle MobileSlideShowSettings.bundle MusicSettings.bundle  NewsstandSettings.bundle NotesSettings.bundle RemindersSettings.bundle TencentWeiboSettings.bundle TwitterSettings.bundle VideoSettings.bundle VimeoSettings.bundle WeiboSettings.bundle

cd /System/Library/PrivateFrameworks/
rm -rf CarKit.framework HomeKitDaemon.framework MusicLibrary.framework iTunesStore.framework MapsSupport.framework MediaRemote.framework/ FamilyNotification.framework HomeSharing.framework GeoServices.framework CallHistory.framework

cd /System/Library/LaunchDaemons
rm -rf /System/Library/Frameworks/HealthKit.framework

当上面的脚本都执行完毕之后,重启设备,除了能看到桌面的系统图标少了之外,我们也能够直观的感受到系统不再卡顿,甚至打开网页的速度都变快了。

最后

关于 Apple 老设备(系统)精简就先聊到这里,下一篇内容中,我们将展开聊聊本篇文章中提到的 “桌面监控” 和 “消息推送”。

–EOF