1. 背景
在搭建iOS环境的过程中一些问题和经验总结下,以作参考.
2. 开发者&证书
在iOS上无论是开发调试还是发布应用都必须要有开发账号. 注册地址:developer.apple.com/
个人开发者
注册了账号后就能调试开发了. 例如从Github上拖下来的项目,想编译运行看看效果
导入项目后,步骤:
- 勾选自动签名,Automatically manage signing
- 选择个人账号
- 给应用取一个名称,即:Bundle ID.注意:这个名称是唯一的,你不能复用别人的BundleID.
正式开发环境
首先需要去苹果开发者网站上,下载证书和描述文件.
证书的申请与下载可以参考这里:
iOS证书(.p12)和描述文件(.mobileprovision)申请
这些东西的作用:
- 描述文件(Profiles)
描述文件决定你的应用能否发布. 这个就相当于Android的签名文件. 一般开发/发布/企业包的描述文件还不一样,在创建项目的时候需要申请多个.
- 证书(Certificates)
证书决定你的mac能不能开发与发布应用.
- Bundle ID
就是Android的包名,相当于在AppStore里面的身份地址,BundleID是绑定了Profiles的,必须对应.
- 真机测试
如果需要在真机测试,必须把你的测试机也录入设备管理.
总结起来就是:iOS开发, 证书 + 描述文件 + BundleID + 真机管理 缺一不可.
3. Pod依赖
- 创建
Podfile
文件.
没有安装Pods的时候只有一个Runner.xcodeproj文件,通过Flutter创建的示例工程就是这样的,也能直接打开.但是就像是做Android开发的时候,必须要依赖Gladle导入各种组件代码,那么iOS的Podfile
文件就相当于Android的gradle
文件 我一般是直接从上一个项目拷贝一个Podfile
文件过来,稍作修改,作为当前项目的Pod配置文件.
pod install
pod install的过程就是安装依赖库的过程. 在Android上直接执行build操作就行了,他会自动去安装依赖,但是iOS这两步是分离的. 先安装,再编译.
- 打开
Runner.xcworkspace
打开后会看到,项目有两部分组成. 一个是主项目,一个是依赖的Pod库,可以直接看到Pod库里面的代码.
要注意的是,如果flutter的配置文件变化了,需要执行的操作是
flutter pub get
cd ios
pod install
或者类似的操作完成Pods代码的同步.
4. 构建&发布
1. 编译运行
- flutter默认iOS Target是8.0, 这里手动修改下. 这个就相当于Android的Build Target SDK.
- 查看Debug/Release/InHourse(企业包)的配置信息有没有报错
2. 正式包发布
原计划是使用CI来构建iOS的产物,但是发现无法拿到公司编译集群的机器权限,也就没办法安装Flutter环境,无法在集群上使用Flutter了. 目前方式是RD自己手动使用Archive构建
- 配置Archive Config文件
这里选择你要打包的配置,就跟Android选择Debug/Release/渠道包是一样的.
- 执行Archive
构建完成后,看下信息是不是对的(区分企业包和AppStore的配置参数)
- 产物 构建产物,XCode会帮我们存储起来,下次可以直接通过Window来打开
如果是企业包构建,选择第三个.
后面还要再次选择下证书.
3. 渠道包发布
打包完成后执行Export操作.
导出到对应的文件夹下,找到.ipa文件
这就是需要的产物.
直接在蒲公英,把ipa文件拖进去,会自动生成一个二维码,方便扫码安装.还可以在CI上做个每天定时任务,然后将产物通过 蒲公英的API自动上传上去,通过这样来构建deaily包.
5.总结
-
简单来说iOS上对开发者管理很严格. 开发账户,profile,证书,调试真机管理,BundleID,再加上付费的门槛
-
iOS依赖构建是通过Pod来进行的,相对于Android用的Gradle来说可能没那么智能. 但是想一下AndroidStudio的智能,并没有给我的开发效率带来多大的提升,反而因为各种奇奇怪怪的问题经常卡死不动,又要用命令行
--debug --info
去看哪个地方又出问题了.
另外就对比下目录管理结构,我觉得Xcode更好些
XCode的层级目录,平时可以直接关闭着. 大部分时候都不用去关心依赖库里面到底是一些什么东西,要用的时候再打开看就是.
- 应用打包发布这个,XCode上手工操作,确实很繁琐.但是如果有了CI后,直接从流水线上取,这个也不是问题.