flutter项目苹果编译运行打包上线
背景介绍
首先flutter项目里面又个ios文件夹就相当于那个android文件夹一个道理,外面是flutter的dart代码里面就是各自的原生代码,至于是怎么转译过去的我猜就是每次运行的时候编译过去了。
然后就是苹果app是.ipa结尾的,苹果的app只能用苹果电脑打包发版,并且要求很多,其实可以直接用xcode直接运行,但是前辈姐说在as先运行,一开始真的我搞不明白as和xcode都扮演着什么角色,后来这那的就是不断撞南墙才知道原来as就是和在windowds电脑上没什么区别,xcode是苹果自带的就是专门用来开发苹果生态软件的东西,是可以直接在里面运行的,但是我是真的没找到控制台在哪,所以还是先用as运行然后看报错,已经试过了两边报错一样。
准备条件
首先一个完整的过程首先就是运行编译成功,用as还有个原因大概是可以先不用管证书那一套,应该是吧虽然现在还没运行出来,然后之后其实很简单就是按照xcode上一步步点就行。在此之前需要准备好苹果的相关文件。首先得有个账号,然后在你的账号里还有team,这个team也用得到,然后就是他申请的那些东西,首先最好先申请appid,这个东西一个app一个,不管以后更不更新都只是这一个,然后设备,这个就是如果你想运行到某个手机上你就得把你手机加上去,最后搞证书和描述文件,这一步就需要到苹果电脑的钥匙串,应该是一个电脑就一个,反正需要的时候穿上去就行,分为两种开发和发行,还没搞明白具体怎么用,但是as里面又个auto什么可以自动识别,识别不了也可以下到本地自己选,据前辈姐说如果证书不过期就可以不用再重新生成啥的,如果过期也不会影响已经发版的app
基础知识吧
完全不懂到不断看报错才能稍微懂点的关于苹果生态的一些基础词。
对于android来说可以直接在flutter项目运行,运行之前pubget,苹果的话这些我也先执行了,在之后进入ios项目很多说要运行 pod install,但是我观察发现在flutter项目运行 flutter build ios --release的时候也会运行pod install不知道是不是一个步骤还是都运行好了,记得flutter clean。
pod应该就是CocoaPods 是一个用于Swift和Objective-C Cocoa项目的依赖管理工具。它简化了在iOS和macOS项目中添加、更新和管理第三方库的过程
然后这里就有一个文件是podfile,这个就相当于pubspec.yaml,是两种不同编程语言生态系统中用于管理项目依赖的文件。
ios项目列表:
Flutter.podspec 和 Podfile.lock 是在 iOS 开发中使用 CocoaPods 作为依赖管理工具时涉及的两个不同文件,它们在项目管理和构建过程中扮演着不同的角色。以下是它们之间的联系和区别:
Flutter.podspec
定义:Flutter.podspec 是一个用于定义 Flutter 模块的 Podspec 文件。它包含了模块的元数据、源代码的位置、依赖关系、编译设置等信息。
作用:它告诉 CocoaPods 如何集成 Flutter 模块到 iOS 项目中,包括如何获取源代码、编译和链接模块。
内容:通常包含模块的名称、版本、描述、作者、源代码路径、依赖的 Pods、资源文件等。
更新:当 Flutter 模块更新时,Flutter.podspec 文件可能需要被修改以反映这些变化。
Podfile.lock
定义:Podfile.lock 是一个由 CocoaPods 生成的文件,它记录了当前项目依赖的每个 Pod 的确切版本。
作用:确保项目中的所有开发者以及持续集成环境使用相同版本的依赖库,从而保持构建的一致性。
内容:包含每个 Pod 的版本号、校验和、依赖关系以及安装时的依赖树。
更新:当运行 pod install 或 pod update 命令时,Podfile.lock 可能会被更新以反映依赖关系的改变。
联系
依赖管理:两者都与依赖管理有关。Flutter.podspec 定义了 Flutter 模块自身的依赖,而 Podfile.lock 确保了这些依赖的具体版本。
项目构建:在构建项目时,CocoaPods 会使用 Flutter.podspec 来集成 Flutter 模块,并使用 Podfile.lock 来确保所有依赖项的版本正确。
区别
文件类型:Flutter.podspec 是一个 Podspec 文件,用于定义一个 Pod;而 Podfile.lock 是一个锁定文件,用于记录项目依赖的详细版本信息。
内容:Flutter.podspec 包含了模块的定义和配置,而 Podfile.lock 只记录了依赖的版本信息。
更新频率:Flutter.podspec 在模块更新时可能需要修改,而 Podfile.lock 在每次运行 pod install 或 pod update 时都可能更新。
作用域:Flutter.podspec 是针对单个 Flutter 模块的,而 Podfile.lock 是针对整个 iOS 项目的。
总的来说,Flutter.podspec 是一个用于定义和配置 Flutter 模块的文件,而 Podfile.lock 是一个用于确保项目依赖一致性的锁定文件。它们共同工作,帮助开发者管理和维护 iOS 项目中的依赖关系。
swift和Objective-C都是苹果的语言,类似于vue和js区别吧我个人理解,一个新一个老。
这里就不得不提一下一个报错:
‘install_plugin-Swift.h’ file not found
看看ai说的:
这三个文件共同构成了一个Flutter插件,它们各自的作用和联系如下:
文件作用
InstallPlugin.h
这是一个Objective-C的头文件,它声明了一个InstallPlugin类,该类遵循FlutterPlugin协议。
它的作用是提供一个公开的接口,以便Flutter框架可以注册和使用这个插件。
InstallPlugin.m
这是一个Objective-C的实现文件,它包含了InstallPlugin类的具体实现。
在这个文件中,它调用了SwiftInstallPlugin的registerWithRegistrar:方法,将Swift编写的插件注册到Flutter框架中。
SwiftInstallPlugin.swift
这是一个Swift源文件,它定义了一个SwiftInstallPlugin类,该类同样遵循FlutterPlugin协议。
它实现了具体的方法,比如gotoAppStore,这些方法可以通过Flutter的MethodChannel被Dart代码调用。
文件联系
InstallPlugin.h和InstallPlugin.m共同定义了一个Objective-C的插件入口点,它允许Flutter框架与Swift编写的插件交互。
SwiftInstallPlugin.swift包含了插件的实际实现,它使用Swift编写,因此需要通过Objective-C的桥接头文件与Objective-C代码进行交互。
报错原因
错误 ‘install_plugin-Swift.h’ file not found 发生在InstallPlugin.m文件中,这通常是因为以下原因:
Xcode没有正确地为Swift类生成Objective-C的头文件。
桥接头文件没有被正确地配置在Xcode的构建设置中。
最终我找到了其他文件同样目录结构都是这样三个文件的把这个
#import <install_plugin-Swift.h>
改成
#if __has_include(<install_plugin/install_plugin-Swift.h>)
#import <install_plugin/install_plugin-Swift.h>
#else
#import "install_plugin-Swift.h"
#endif
行吧先写到这,总结一下:苹果垃圾!