Flutter iOS环境搭建Tips

629 阅读4分钟

1. 背景

在搭建iOS环境的过程中一些问题和经验总结下,以作参考.

2. 开发者&证书

在iOS上无论是开发调试还是发布应用都必须要有开发账号. 注册地址:developer.apple.com/

个人开发者

注册了账号后就能调试开发了. 例如从Github上拖下来的项目,想编译运行看看效果

导入项目后,步骤:

  1. 勾选自动签名,Automatically manage signing
  2. 选择个人账号
  3. 给应用取一个名称,即:Bundle ID.注意:这个名称是唯一的,你不能复用别人的BundleID.

正式开发环境

首先需要去苹果开发者网站上,下载证书和描述文件.

证书的申请与下载可以参考这里:

iOS证书(.p12)和描述文件(.mobileprovision)申请

这些东西的作用:

  1. 描述文件(Profiles)

描述文件决定你的应用能否发布. 这个就相当于Android的签名文件. 一般开发/发布/企业包的描述文件还不一样,在创建项目的时候需要申请多个.

  1. 证书(Certificates)

证书决定你的mac能不能开发与发布应用.

  1. Bundle ID

就是Android的包名,相当于在AppStore里面的身份地址,BundleID是绑定了Profiles的,必须对应.

  1. 真机测试

如果需要在真机测试,必须把你的测试机也录入设备管理.

总结起来就是:iOS开发, 证书 + 描述文件 + BundleID + 真机管理 缺一不可.

3. Pod依赖

  1. 创建Podfile文件.

没有安装Pods的时候只有一个Runner.xcodeproj文件,通过Flutter创建的示例工程就是这样的,也能直接打开.但是就像是做Android开发的时候,必须要依赖Gladle导入各种组件代码,那么iOS的Podfile文件就相当于Android的gradle文件 我一般是直接从上一个项目拷贝一个Podfile文件过来,稍作修改,作为当前项目的Pod配置文件.

  1. pod install

pod install的过程就是安装依赖库的过程. 在Android上直接执行build操作就行了,他会自动去安装依赖,但是iOS这两步是分离的. 先安装,再编译.

  1. 打开Runner.xcworkspace

打开后会看到,项目有两部分组成. 一个是主项目,一个是依赖的Pod库,可以直接看到Pod库里面的代码.

要注意的是,如果flutter的配置文件变化了,需要执行的操作是

flutter pub get
cd ios
pod install

或者类似的操作完成Pods代码的同步.

4. 构建&发布

1. 编译运行

  1. flutter默认iOS Target是8.0, 这里手动修改下. 这个就相当于Android的Build Target SDK.
  2. 查看Debug/Release/InHourse(企业包)的配置信息有没有报错

2. 正式包发布

原计划是使用CI来构建iOS的产物,但是发现无法拿到公司编译集群的机器权限,也就没办法安装Flutter环境,无法在集群上使用Flutter了. 目前方式是RD自己手动使用Archive构建

  1. 配置Archive Config文件

这里选择你要打包的配置,就跟Android选择Debug/Release/渠道包是一样的.

  1. 执行Archive

构建完成后,看下信息是不是对的(区分企业包和AppStore的配置参数)

  1. 产物 构建产物,XCode会帮我们存储起来,下次可以直接通过Window来打开

如果是企业包构建,选择第三个.

后面还要再次选择下证书.

3. 渠道包发布

打包完成后执行Export操作.

导出到对应的文件夹下,找到.ipa文件

这就是需要的产物.

直接在蒲公英,把ipa文件拖进去,会自动生成一个二维码,方便扫码安装.还可以在CI上做个每天定时任务,然后将产物通过 蒲公英的API自动上传上去,通过这样来构建deaily包.

5.总结

  1. 简单来说iOS上对开发者管理很严格. 开发账户,profile,证书,调试真机管理,BundleID,再加上付费的门槛

  2. iOS依赖构建是通过Pod来进行的,相对于Android用的Gradle来说可能没那么智能. 但是想一下AndroidStudio的智能,并没有给我的开发效率带来多大的提升,反而因为各种奇奇怪怪的问题经常卡死不动,又要用命令行--debug --info去看哪个地方又出问题了.

另外就对比下目录管理结构,我觉得Xcode更好些

XCode的层级目录,平时可以直接关闭着. 大部分时候都不用去关心依赖库里面到底是一些什么东西,要用的时候再打开看就是.

  1. 应用打包发布这个,XCode上手工操作,确实很繁琐.但是如果有了CI后,直接从流水线上取,这个也不是问题.