前段时间写了关于flutter的一系列基础知识和入门的一些坑,中间把ios端的项目编译部署等工作一带而过,这里我觉得还是有必要专门写一篇文章来讲讲这个,顺便把环境问题也一起说了。

我们都知道开发ios应用需要用到苹果电脑,即使flutter也不例外,flutter编译构建需要Xcode来协助,而Xcode 是没有win平台应用的,那只能倒逼着我们去买苹果电脑,但是身边没有苹果电脑怎么办呢,不喜欢折腾的程序员不是好程序员,生命不息,折腾不止,我们一起来装黑苹果:

   我的笔记本配置基本是符合要求的,我们去黑苹果(黑苹果星球-分享Mac的精彩世界)网站下载专门的镜像,不过这里的资源是需要收费的,我可是花了30大洋冲的会员,我下载镜像的是带有oc和clover工具的,这两个工具实际上就是管理引导efi 和启动的,另外还需要准备一个8g以上的优盘,还有就是要下载transmac这个软件,用来往优盘烧录镜像, 烧录的时候需要先把优盘搞成苹果的系统磁盘格式,然后再加载镜像,需要等待好长一会,进度走完就可以了,这个时候会看到优盘的目录变化了,分成了好几个磁盘,有oc和clover,他们就是对应的两种启动方式,他们根目录是有一个efi文件夹的,里面结构是这样的:

黑苹果 做ios开发 黑苹果能做ios开发吗_安卓

 kexts里面是我们所需要的驱动,都会放在里面,config.plist是配置文件,当我们修改kexts里的驱动时,是需要改配置文件对应上的,那个网站也会有对应的驱动,根据电脑硬件型号和mac版本,可自行下载,现在优盘是默认给我们生成好了的,config.plist也是准备了很多,用于启动不了时可供我们替换使用,这时候我们就可以重启电脑准备安装了(记住要备份好数据哦):

根据自己笔记本快速启动优盘,即可进入下面画面:


黑苹果 做ios开发 黑苹果能做ios开发吗_ios_02

中间电脑会重启几次,都是正常现象,如果你是固态硬盘,大概半小时40分钟就差不多了,然后就是按照提示设置语言/用户名/键盘等,下面就是我的oc自动识别的启动系统(我做的是win+mac双系统)

黑苹果 做ios开发 黑苹果能做ios开发吗_flutter_03

所有的都配置好之后就进入系统了

黑苹果 做ios开发 黑苹果能做ios开发吗_ios_04

 这时候还需要一个步骤,因为你发现其实我们的安装盘目录下也有一个oc和clover的文件夹,如果你u盘上oc和clover的efi文件里面的内容被你替换了,那你也需要保证u盘和硬盘的内容一致。还有就是除了11.6的系统外,其他的不要试图去找独显驱动,什么开普勒什么的都不好使,因为我有分屏的需求,分屏必须接独显,后来被逼的直接买了个usb转hdmi,试试人家三方的驱动咋样,结果只是投个影像而已,不能扩展,而且延迟很高,不要跟我入坑,直到现在我都是就一个笔记本屏幕来开发,费点眼睛费点吧,也比像win卡的十天半月做个系统强。

黑苹果至此完成,详细的安装步骤请移步专门的装系统教程,我们下边重点来说flutter:

接下来我们下载android studio sdk ndk jdk flutter-sdk dart和flutter插件 xcode 等所需要的开发软件和环境:在这里还是有不少坑的,

一.环境问题,首先除了软件的一些环境配置外(比较简单,不赘述),还需要在mac的系统进行环境配置

(1)flutter环境变量,在终端依次输入下面命令

   <1>. 创建环境文件:touch .bash_profile

   <2>. 打开文件:open .bash_profile,配置镜像和路径如下:

  export PUB_HOSTED_URL=[https://pub.flutter-io.cn](https://links.jianshu.com/go?to=https%3A%2F%2Fpub.flutter-io.cn)

export FLUTTER_STORAGE_BASE_URL=[https://storage.flutter-io.cn](https://links.jianshu.com/go?to=https%3A%2F%2Fstorage.flutter-io.cn)

export PATH=/Users/lg/Documents/flutter/bin:$PATH
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

3. 保存:source .bash_profile

4.检查:flutter doctor

2.安装cocoapods,这个是调试苹果手机时候android studio必须要的系统环境,这个地方装了两天,试遍了所有的命令,翻边了所有的资料,什么gem啦,brew啦,翻墙啦,最后顺利出坑源于这篇文章,mac电脑如何下载homebrew_mac下载brew_弹道吖的博客,直接运行它的脚本命令:/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

黑苹果 做ios开发 黑苹果能做ios开发吗_flutter_05

然后按步骤执行可顺利安装brew, 然后通过这个包管理器,执行brew install cocoapods即可完成安装。

二.运行到苹果手机

在android studio里打开ios目录下的AppDelegate文件,这个文件其实就相当于咱们android的mainactivity,然后在右上角,可以看到有个打开xcode的快捷提示,

黑苹果 做ios开发 黑苹果能做ios开发吗_flutter_06

 点开后就打开了xcode的编辑页面,就可以通过xcode编写switf或者c++的代码了,他会有错误提示补全等,下面贴一下我的AppDelegate的通讯代码:

import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  let flutterEngine = FlutterEngine(name: "my flutter engine")
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
     flutterEngine.run();
    let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
    let channel = FlutterMethodChannel(name: "samples.flutter.io/lib", binaryMessenger: controller.binaryMessenger)
       channel.setMethodCallHandler { (call:FlutterMethodCall, result:@escaping FlutterResult) in
            //微信登陆
           if (call.method == "UmGetWxInfo") {
               var data = [self.UmGetWxInfo(value : result)];
               result(data);
           }
  
           //微信分享
           if (call.method == "shareWX") {
               var data = [self.shareWX(dia : call.arguments as! Dictionary<String, String>)];
              result(data);
           }

           //微信支付
           if (call.method == "wxPay") {
               var data = [self.wxPay(dia : call.arguments as! Dictionary<String, String>)];
              result(data);
           }

           //阿里支付
           if (call.method == "aliasPay") {
               var data = [self.aliasPay(pay:  call.arguments as! String)];
              result(data);
           }
     }

   GeneratedPluginRegistrant.register(with: self.flutterEngine);
   GeneratedPluginRegistrant.register(with: self); //注意权限问题
    return super.application(application, didFinishLaunchingWithOptions: launchOptions);
  }

    //微信登陆
    func UmGetWxInfo(value:FlutterResult)->Int{
      return 1;
    }

    //微信分享
    func shareWX(dia: Dictionary<String, String>)->String{
      return "123";
    }
    
    //微信支付
    func wxPay(dia: Dictionary<String, String>)->String{
      return "123";
    }

    //阿里支付
    func aliasPay(pay:String)->String{
      return "123";
    }

    
}

运行:可以直接插上苹果手机,点击信任之后,androidstudio 就识别到了,可以直接点击ide中的运行,但那只是debug模式,你会发现:

[!] Automatically assigning platform `iOS` with version `11.0` on target `Runner` because no platform was specified.

这时候只需要注释掉podfile里的版本限制即可,例如:platform :ios, '11.0' 。

然后好不容易运行到手机后后再从手机第二次打开你又会发现以下情况:

黑苹果 做ios开发 黑苹果能做ios开发吗_黑苹果 做ios开发_07

这是因为你是在debug模式运行的,ios14以上苹果给限制了,所以我们可以运行正式版命令:
运行命令之前先执行:

source ~/.bash_profile

flutter run --release

如果报安全问题,可以再执行一下命令。就可以完美运行了。

flutter run --release --no-sound-null-safety

至此苹果的部署就全部完成了。