之前尝试过在 VMWare
上安装黑苹果来运行 Flutter
的 IOS
端,但是卡在了安装 XCode
这一步。这次 Flutter
端在接入 IOS
的 Notification Service Extension
时遇到很多问题,于是就想自己配置一个 MacOs
环境来协助他解决这个问题。下面是全部的安装过程。
系统安装
之前安装的 MacOS
版本是 11.6.6
的,这次选择了 10.15.5
,因为搜索出来的安装教程中大多使用的都是这个版本。
在 Windows 安装 MacOS 10.15 虚拟机调试 Flutter iOS 应用 这篇博客中有详细的安装步骤,包括各种需要的资源都有,我这里就不再赘述了。
dmg镜像转cdr
在下载系统镜像时,下载的镜像后缀是 dmg
类型的,而 vmware
需要的镜像类型是 cdr
的,因此需要对下载下来的镜像进行处理。
找到了一篇文章:windows系统下,如何将dmg文件转化为cdr文件。
选择 Tools
菜单,点击 create disk image
选择转换后 cdr
文件存储位置,注意文件名要自己修改,后缀设置为 cdr
等待转换完成即可
转换成功
分辨率调整(优化系统卡顿)
在安装完 VMWare Tools
后,发现系统异常的卡顿,完全不能正常操作。于是尝试将 VMWare Tools
卸载,卡顿感大大降低,已经不影响正常使用了。但是 VMWare Tools
是必不可少的,所以这么做只能算拆东墙补西墙。
针对这个问题,我猜测是与我的电脑配置有关,我的电脑分辨率是 2k
的,查看安装了 VMWare Tools
后的 MacOs
,发现分辨率也是 2k
。但是 MacOS
的显存只有 128M
,显然不足以带动这么高的分辨率。于是猜测,是否可以通过调整虚拟机的分辨率,来优化系统运行速度。
在虚拟机的设置中找到了这个配置,如下:
将其调整后,重新运行虚拟机,卡顿感大大减轻!
安装 XCode
正常的安装 XCode
是直接在 AppStore
中安装就可以了,但是由于安装的 MacOs
版本比较老,AppStore
中无法直接下载,会报下面的提示:
因此只能通过手动下载安装包的方式来安装,前往 XCode 下载地址,找支持当前系统版本的 XCode
,我的 MacOS
版本是 10.15.5
,下载的 XCode
版本是 12.1
(注:如果之后需要安装 Flutter
,需要首先确定对应的 Flutter
版本支持的最低版本 XCode
,我在这里就踩了个坑,开始选择的 XCode
版本是 11.7
,之后安装的 Flutter
版本是 2.8.1
,在执行 flutter doctor
时被提示 XCode
版本过低,最低支持 12.0.1
版本的,导致我又重新安装了一遍):
安装完毕之后打开 XCode
,检查一下下面的配置是否配置,如果不配置的话,之后执行 flutter doctor
将找不到已安装的 XCode
。
pod install
卡住
是在执行红框中的命令时卡住的,原因是这个项目太大了
可以通过下面的链接查看这个项目的大小:链接。这是github的api,打开之后显示一串json,是项目的相关信息,在里面找size,即是项目大小。换算下来是 965.9M
,所以下载肯定是需要一定时间的。
但是这么一直干等也不是办法,在 Mac
系统中可以通过 活动监视器 来查看当前的下载进程,如下:
clone
下来后安装步骤继续执行,之后报了一个错误,MobileVlcKit
依赖安装失败:
目前发现这个错误对项目的运行并没有影响,所以暂时没有处理。
Java
环境配置
首先下载 JDK
:JDK8 - MacOS 下载地址
下载安装完毕后,需要配置 Java
环境,打开
SVN
安装
首先需要安装 HomeBrew
工具,Homebrew
是一款 MacOS
平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。安装命令如下:
1 | /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" |
接着使用下面的命令安装 SVN
1 | brew install subversion |
之后可以安装一些 SVN
的客户端,由于我之后会使用 Android Studio
,里面已经集成了 SVN
的一些基本功能,所以这里就不再安装第三方客户端了。
使用 SVN
将代码拉取下来:
1 | svn checkout [仓库地址] |
Android Studio
安装
官网下载:地址
安装成功后,打开 Android Studio
。安装 Flutter
、Dart
插件,如下:
Android Studio
上找不到真机设备
如下,将设备连接到电脑上时,Android Studio
中没有显示对应的设备
在 VMWare
的虚拟机选项中可以找到设备的连接信息,如下:
这个问题也与虚拟机设置有关,调整虚拟机设置中的 USB
选项即可,如下:
之后重启虚拟机,连接设备,成功找到
扩展 MacOS
的磁盘空间
在 Android Stuio
中 Build
项目时,发现磁盘空间已经不够了,需要对磁盘空间进行拓展。
这篇博客中有完整的拓展磁盘空间的方法:MacOS 10.15 VMware 虚拟机扩展磁盘。
使用 XCode
构建时报错找不到依赖
错误信息如下,报错的位置是 GeneratedPluginRegistrant.m
文件:
在 GeneratedPluginRegistrant.m Module not found. 这篇讨论中有好多种解决办法,尝试了其中的几种,最终我的处理办法如下:
- 首先将原先
ios
目录下pod
生成的几个文件和文件夹全部移除,接着执行flutter clean
命令 - 然后执行
flutter pub get
- 之后运行
flutter build ios
,初次运行可能会报错,其中某些依赖找不到,这时需要修改Podfile
文件,增加如下配置:参考文章然后还有可能报错1
2source 'https://github.com/aliyun/aliyun-specs.git'
source 'https://github.com/CocoaPods/Specs.git'curl: (60) SSL certificate problem: certificate has expired
,可以在命令行执行下面的命令:参考文章1
echo insecure >> ~/.curlrc
- 之后再运行
flutter build ios
就可以了(可能需要等待一段时间)
上面的第3步在与 flutter
端同事沟通后,得知他的解决办法是直接修改 Podfile
文件,他的 Podfile
文件内容如下:
1 | # Uncomment this line to define a global platform for your project |
修改 Podfile
后执行 flutter build ios
,发现还有报错:
这里搜遍了各种博客都没找到解决办法,与 App
端同事的配置进行了对比也没有差异。执行了清除本地依赖然后重新拉取的操作也无济于事,目前只能猜测是我的 XCode
版本比较低:12.1
。最后无奈之下只能将这两处报错的代码注释掉,项目才运行起来。
构建App时报错
报错信息如下
App
端同事提示可以直接在 XCode
Run
也可以,尝试了一下,Build Successed
,但是在安装时出现了下面的提示:
在 Google
上搜索了一下,发现可能是 XCode
版本过低导致的,我的设备是 Apple 11
,对应的系统是 IOS 15.4
,XCode
版本只有 12.1
,在 StackOverflow
上有人给了一个 XCode
和 IOS
版本的对应关系表:
这个问题目前只能通过升级 XCode
来解决,但是当前版本的系统不支持更高版本的 XCode
了,因此目前这个问题没法解决。真机调试也就没法继续了,目前只能将 App
运行在虚拟机上进行测试,之后尝试一下安装更高版本的 MacOs
。
解决构建时的报错(2022-10-12)
无意间发现了一篇文章:Could not locate device support files,可以解决 Xcode
版本过低但 IOS
版本过高,导致不能进行真机调试的问题。
这个处理办法是添加一个适配指定 IOS
版本的包到 XCode
安装目录,之后就可以进行真机调试了。先从 适配包下载地址 下载指定版本的包,比如我的 IOS
设备版本是 15.5
,就下载 15.5
版本的包,然后按照 Could not locate device support files 这个里面的教程,将下载下来的包放入 XCode
的指定目录下:
之后重启 XCode
,重新构建项目,报了下面的错误,与之前不一样:
按照 iPhone not connected. Xcode will continue when iPhone is connected 给的解决办法处理一下即可:
解决之后进入 Xcode
的 window -> Devices and Simulators
菜单,应该没有报错信息:
之后重新构建,成功触发了安装进程,但是又报了错误:
在 The code signature version is no longer supported 找到了解决办法:
在 XCode
中添加如下配置即可:
之后重新进行构建,可以在下面的 Tag
中查看构建进程
等待一段时间后,安装成功!
通过 Flutter
安装 release
版
上面通过 Xcode
安装的 App
必须插上数据线才能运行,数据线一旦断开 App
将无法运行。解决办法就是通过 Flutter
安装 release
版。
注:虽然安装的是
release
版,但对应的Api
服务地址还是线下的,如果使用线上的Api
地址,推送将无法送达。
直接在 Android Studio
的 terminal
中执行命令:flutter run --release
。之前运行这个命令时是会报错的,无法安装成功。
等待一段时间后,安装成功!