(flutter)黑苹果系统 Xcode iOS flutter 跑通真机模拟器 此oc clover 彼oc swift

news2024/11/25 1:52:19

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

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

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

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

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

8dfe84fca0d949b1b4a17fc0a34dae33.png

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

2b576a5965974d2892fd9cb51e681866.png

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

 这时候还需要一个步骤,因为你发现其实我们的安装盘目录下也有一个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_弹道吖的博客-CSDN博客,直接运行它的脚本命令:/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

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

二.运行到苹果手机

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

 点开后就打开了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' 。

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

ca19a7f8f32145009a4e4247efbdb4d2.png

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

source ~/.bash_profile

flutter run --release

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/392442.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【NLP】Word2Vec 介绍

Word2Vec 是一种非常流行的自然语言处理技术&#xff0c;它将每个单词表示为高维向量&#xff0c;并且通过向量之间的相似度来表示单词之间的语义关系。 1 One-Hot 编码&#x1f342; 在自然语言处理任务中&#xff0c;我们需要将文本转换为计算机可以理解的形式&#xff0c;即…

ChatGPT后劲很大,问题也是

ChatGPT亮相即封神&#xff0c;最初的访客是程序员、工程师、AI从业者、投资人&#xff0c;最后是无数懵懂又好奇的普通人&#xff1a;ChatGPT是什么&#xff1f;自己会被ChatGPT取代吗&#xff1f;看待ChatGPT的立场也是两个极端&#xff1a; 快乐&#xff0c;是因为ChatGPT太…

科普| 什么是云原生?

“新冠疫情从根本上改变了商业模式&#xff0c;工作流向在线迁移的速度比以往任何时候都要快。越来越多的公司和消费者依靠电子商务“ B2B”和B2C”&#xff0c;以及网上银行促进创新以满足日益增长的客户需求&#xff0c;云原生技术在其中发挥重要作用&#xff0c;同时也加速了…

vm centos7搭建k8s集群

关闭防火墙&#xff0c;三台systemctl stop firewalld关闭selinux&#xff0c;三台sed -i s/enforcing/disabled/ /etc/selinux/config关闭swap&#xff0c;三台swapoff -a设置主机名&#xff0c;三台hostnamectl set-hostname 主机名&#xff0c;三个主机名分别设置成k8s-mast…

JavaScript新手学习手册-基础代码(一)

什么是JavaScript&#xff1f; 百度百科 什么是控制台&#xff1f; 网页➡快捷键F12 进入Console就是控制台&#xff0c;它的作用与开发软件相同&#xff0c;可以进行代码的编写在紫色位置进行编写&#xff0c;另外console.log()方法所打印的内容都是在此进行输出。 一&#…

Spark Join

Spark Join关联形式内关联外关联左外关联右外关联全外关联左半/逆关联关联机制NLJSMJHJ分发模式Join 选择等值 Join不等值 JoinJoin 按照关联形式&#xff08;Join Types&#xff09;划分 : 内关联、外关联、左关联、右关联 Join 按实现机制划分 : NLJ (Nested Loop Join) 、S…

【操作系统原理实验】页面替换策略模拟实现

选择一种高级语言如C/C等&#xff0c;编写一个页面替换算法的模拟实现程序。1) 设计内存管理相关数据结构&#xff1b;2) 随机生成一个页面请求序列&#xff1b;3) 设置内存管理模拟的关键参数&#xff1b;4) 实现该页面置换算法&#xff1b;5) 模拟实现给定配置请求序列的换页…

【python socket】实现websocket服务端

一、获取握手信息首先通过如下代码&#xff0c;我们使用socket来获取客户端的握手信息import socketsock socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(("127.0.0.1", 8002)) sock.li…

启动项管理工具Autoruns使用实验(20)

实验目的 &#xff08;1&#xff09;了解注册表的相关知识&#xff1b; &#xff08;2&#xff09;了解程序在开机过程中的自启动&#xff1b; &#xff08;3&#xff09;掌握Autoruns在注册表和启动项方面的功能&#xff1b;预备知识 注册表是windows操作系统中的一个核心数据…

Android Framework-Android启动过程

第一个系统进程&#xff08;init&#xff09; Android设备的启动必须经历3个阶段&#xff0c;即Boot Loader、Linux Kernel和Android系统服务&#xff0c;默认情况下它们都有各自的启动界面。严格来说&#xff0c;Android系统实际上是运行于Linux内核之上的一系列“服务进程”…

元宇宙XR应用,如何迎接大规模普及的时代?

未来&#xff0c;具有互动性、沉浸感的元宇宙/XR应用将逐渐成为主流&#xff0c;这个趋势已毋庸置疑。 然而&#xff0c;在大趋势下&#xff0c;大众终端用户普遍设备能力不足、网络传输时延、GPU算力分配限制等技术挑战&#xff0c;依然是元宇宙/XR应用在大众广泛渗透的瓶颈。…

【vulhub漏洞复现】Fastjson 1.2.24反序列化漏洞

一、漏洞详情Fastjson 是一个 Java 库&#xff0c;可以将 Java 对象转换为 JSON 格式&#xff0c;也可以将 JSON 字符串转换为 Java 对象。漏洞成因&#xff1a;目标网站在解析 json 时&#xff0c;未对 json 内容进行验证&#xff0c;直接将 json 解析成 java 对象并执行&…

国产数字源表在压力传感器电阻测量上的应用

压力传感器分类压力传感器(Pressure Transducer)是能感受压力信号&#xff0c;并能按照一定的规律将压力信号转换成可用的输出的电信号的器件或装置,压力传感器通常由压力敏感元件和信号处理单元组成。常见的压力传感器有四种:应变式压力传感器、压阻式压力传感器、电容式压力传…

OpenMMLab 目标检测

OpenMMLab 目标检测1. 目标检测简介1.1 滑窗2. 基础知识2.1 边界框&#xff08;Bounding Box&#xff09;3. 两阶段目标检测算法3.1 多尺度检测技术4. 单阶段目标检测算法4.1 YOLO: You Only Look Once (2015)4.2 SSD: Single Shot MultiBox Detetor (2016)5. 无锚框目标检测算…

Nginx的搭建与核心配置

目录 一.Nginx是什么&#xff1f; 1.Nginx概述 2.Nginx模块与作用 3.Nginx三大作用&#xff1a;反向代理、负载均衡、动静分离 二.Nginx和Apache的差异 三.安装Nginx 1.编译安装 2.yum安装 四.Nginx的信号使用 五.Nginx的核心配置指令 1.访问状态统计配置 2.基于授…

非华为电脑安装华为电脑管家以及注意事项

非华为电脑安装华为电脑管家前言安装注意事项效果展示前言 非华为电脑是可以安装华为电脑管家的&#xff0c;不过部分功能可能不兼容。值得一提的是&#xff0c;超级终端、多屏协同、文件共享、远程控制等功能大部分电脑是可以使用的&#xff0c;本人在联想ThinkBook 15电脑上…

【CS144】Lab1总结

Lab1Lab汇总概述具体实现Lab汇总 概述 lab1要求实现一个字符串的装配器&#xff0c;用于将TCPTCPTCP接收方接收到的字节流拼接起来&#xff0c;并缓存一定量的乱序到达的字节&#xff0c;便于TCPTCPTCP接收方相关功能的实现。 具体实现 该装配器实现的重点是push_substring…

Java线程池使用与原理解析2(自定义线程池、合适的线程数量、线程池阻塞队列、线程拒绝策略)

在上篇我们学习了线程池各个参数的含义&#xff0c;线程池任务处理流程&#xff0c;使用线程池的好处等内容&#xff0c;本篇我们学习如何创建一个适合我们业务的线程池。为此&#xff0c;我们有必要先学习一下如何大概确定我们线程池核心线程数、怎么设置阻塞队列的类型与大小…

Malware Dev 04 - 隐匿之 ETW(Event Tracing for Windows)Bypass

写在最前 如果你是信息安全爱好者&#xff0c;如果你想考一些证书来提升自己的能力&#xff0c;那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里&#xff1a; https://discord.gg/9XvvuFq9Wb我拥有 OSCP&#xff0c;OSEP&#xff0c;OSWE&#xff0c;OSED&…

使用leangoo领歌单团队敏捷开发项目管理

概述单团队敏捷开发主要是针对10人以下、只有一个Scrum团队的小型产品或项目的敏捷开发。对于小型团队来说&#xff0c;在Leangoo中创建一个单团队敏捷开发项目就可以很好地支持团队产品或项目的开发。适用场景适用于单个团队进行Scrum敏捷开发协作&#xff0c;Leangoo项目内也…