持续创作,加快生长!这是我参加「日新方案 10 月更文应战」的第6天,点击检查活动概况

您能在这儿看到啥

  1. 温故知新
  2. iOS打包流程
  3. iOS项目装备
  4. iOS终究打包
  5. DEMO
  6. 脚本地址

温故知新

往期文章

Flutter 解放双手-Shell主动化打包之概要

Flutter 解放双手-Shell主动化打包之装备

*Flutter 解放双手-Shell主动化打包之APK

流程图如下所示
Flutter 解放双手-Shell自动化打包之IPA
脚本目录如下所示
Flutter 解放双手-Shell自动化打包之IPA
打包导出的文件.如下所示
Flutter 解放双手-Shell自动化打包之IPA

这些基础装备,便是打包的基石.给咱们指明了路途.依据上面的流程图.shell主动化打包.总共分为四步

  • 参数装备
  • 清缓存
  • 导出文件
  • 打包

在此之前,前三步,咱们都现已完结.不了解的同学,能够看看往期文章.

当然打包系列不会是最终一步.

由于之前事务需求.对咱们的事务来说,确实打包上传,便是结束.

但由于爱折腾的我.天然也不会放过群消息(未发布)这个功用.

后续也会不断丰富解放双手系列.喜爱的能够点点重视.

好了,回归主题.— Flutter 解放双手-Shell主动化打包之IPA

iOS打包流程

Flutter 解放双手-Shell自动化打包之IPA

从上面的流程图中,咱们发现有一个奇怪的过程.那便是前期装备.下面我先来解说一下这个.

前期装备

前因

咱们这儿挑选的打包指令,是苹果官方供给的xcodebuild.简单易上手.下面先看一下pack_ipa.sh文件,咱们哪里运用了xcodebuild.运用了xcodebuild什么功用.

archive
Flutter 解放双手-Shell自动化打包之IPA
export
Flutter 解放双手-Shell自动化打包之IPA

xcodebuild exportArchive的指令中,咱们得知.

最终导出ipa文件的时分,有一个特别的参数exportOpptionsPlist.

这个参数指定导出IPA包的特点.分为developad-hocappstore三种类型.

由于咱们这儿xcode中签名办法是automatic,也便是登录开发者账号,让xcode主动装备证书的办法.

所以导出的exportOpptionsPlist会和手动装备证书的不一样.

假如你运用的是手动装备.不必担心.

下面咱们也会解说一下,exportOpptionsPlist怎样获取.

这儿咱们就简单讲一下xcodebuild的运用.

可选参数 参数阐明
xcodebuild type [build(编译) 、 archive(归档)、 exprotArchive(导出)]
-workspace 编译工作空间称号
-scheme 编译方案称号
-archivePath 被指定任何创立的档案将被放置的目录,或应导出存档
-configuration 为构建每一个目标运用build装备称号
-destination 运用由目标阐明(用逗号分隔的一系列的key =描绘目的地运用值对)中描绘的目的地
-exportOptionsPlist 指定用于装备归档导出plist文件的途径
-exportArchive 指定归档应导出

后边我会写一篇flutter 解放双手-XcodeBuild,来具体的解说一下,敬请期待哦

说到这儿,总会算是把你引到了前期装备的主题上了.持续看看后果吧.

后果

Flutter 解放双手-Shell自动化打包之IPA

从上面的流程图.咱们来逐个解说一下,exportOpptionsPlist是怎样找到的.

  1. 装备iOS项目

    • 主动装备证书
      Flutter 解放双手-Shell自动化打包之IPA
      如上图所示,登录自己的开发者账号即可.
    • 手动装备证书
      Flutter 解放双手-Shell自动化打包之IPA
      如上图所示,把挑选对应描绘文件即可
  2. Xcode Archive

    Flutter 解放双手-Shell自动化打包之IPA

  3. 手动导出IPA

    Flutter 解放双手-Shell自动化打包之IPA

    App Store:上传商铺版别,release环境
    Ad Hoc:能够经过蒲公英下载安装的release环境,也能够收到推送
    Development: Debug环境.
    

    当然,咱们也能够经过修正打包环境,让Ad Hoc环境为Debug.可是,请慎用.修正Archive环境.如下所示

    1. Edit Scheme
      Flutter 解放双手-Shell自动化打包之IPA
    2. Change Build Configuration
      Flutter 解放双手-Shell自动化打包之IPA
      经过修正Archive build环境,就能够到达咱们的目的,但还是那句话,请慎用.
  4. 获取ExportOptions.plist

    Flutter 解放双手-Shell自动化打包之IPA
    这样咱们就获取到ExportOptions.plist,当然假如你运用的也xcode 主动装备证书,那么你就不必从头获取ExportOptions.plist文件了,由于.我现已帮你装备好了.如下所示

    Flutter 解放双手-Shell自动化打包之IPA
    Flutter 解放双手-Shell自动化打包之IPA

    从上面的文件里.咱们能够看出,各个环境的ExportOptions.plist,只是有一点点的不同.

    尽管我也能够经过plutil -replace指令,修正一个ExportOptions.plist文件.来到达三个ExportOptions.plist的作用.

    为了更好的区别app-stroead-hocdevelopment这三个环境,还有由于每个项目装备也不一样.各个环境可能各不相同.区别开也方便修正.

    至此.前期装备完结.这样咱们就能够好好的讲一下pack_ipa.sh文件了.

pack_ipa.sh

经过咱们上面的流程图.我把IPA总共分为5部分.如下所示

  1. 装备环境

    首要目的是为了装备export_options_plistbuild_typeconfiguration,判断逻辑如下所示

      # 依据上传类型,确定是上传商铺版别
      if [[ $upload_type == 1 ]]; then
         export_options_plist=$export_options_plist_store
         build_type="release"
         configuration="Release"
      elif [[ $project_build_type == 1 ]]; then
         # 假如不是上商铺,那便是上传蒲公英了,
         # 蒲公英是要承认打包环境
         # 这儿边打包环境是release
         export_options_plist=$export_options_plist_hoc
         build_type="release"
         configuration="Release"
      else
         # 这儿便是debug
         build_type="debug"
         configuration="Debug"
         export_options_plist=$export_options_plist_dev
      fi
    
  2. 编译iOS

    这儿咱们运用的还是flutter build,这个指令.当然也是能够运用xcodebuild的.如下所示

    • flutter build
      if [ -e "${project_path}"/pubspec.yaml ]; then
           echomsg "编译FLUTTER"
           ### 依据**装备环境**
           ### 咱们获取到了打包的环境 build_type
           ### 然后执行 build 指令
           flutter build ios --$build_type
       fi
      
    • xcodebuid build
      xcodebuild \
           build -workspace "${project_workspace_path}" \
           -scheme "$project_scheme" \
           -configuration $configuration \
           -destination 'generic/platform=iOS' \
           -quiet || **exit**
      
  3. archive

      echomsg "开始archive"
      xcodebuild archive \
          -workspace "${project_workspace_path}" \
          -scheme "$project_scheme" \
          -configuration $configuration \
          -archivePath "${export_xcarchive_path}${xcarchive_name}" \
          -destination "$generic" -quiet || exit  
    
  4. exportArchive

    为了更好的完结导出,现已判断导出文件是否成功.咱们需求知道导出文件的姓名.

    IPA的姓名,是依据info.plist文件中的CFBundleName字段,进行命名的.其格局如下 CFBundleName.ipa

    因而咱们需求获取到info.plist文件,并获取到CFBundleName字段对应的姓名才能够.

    所以我在exportArchive的时分,分4步来完结,如下所示:

    1. 获取info.plist

      有两个地方能够获取咱们想要的info.plist

      • 工程项目中的info.plist
        Flutter 解放双手-Shell自动化打包之IPA
      • archive中的info.plist
        Flutter 解放双手-Shell自动化打包之IPA
        这儿我挑选了archive中的info.plist,现在想想,如同把获取弄的麻烦了,直接运用项目中的info.plist文件即可.为难了.好了咱们看一下代码吧 info_plist="$export_xcarchive_path$xcarchive_name/Products/Applications/Runner.app/Info.plist"
    2. 获取CFBundleName

       ipa_name=$(/usr/libexec/PlistBuddy -c "Print CFBundleName" "$info_plist")
      
    3. 修正export_options_plist文件中的团队ID.

      获取TeamId

      经过archive,咱们在export_xcarchive_path中的info.plist文件中,找到咱们想要的Team.获取代码如下

       run_plist="$export_xcarchive_path$xcarchive_name/Info.plist"
       ipa_teamID=$(/usr/libexec/PlistBuddy -c "Print ApplicationProperties:Team" "$run_plist")
      

      修正TeamId

      这样咱们就获取到了TeamId,然后经过plutil指令,来修正plist文件,就拿到了完好的export_options_plist文件了,修正Team代码如下.

      plutil -replace teamID -string "$ipa_teamID" "$export_options_plist"
      
    4. 执行导出指令

      经过前面过程,终于到了导出了,直接上代码

      # 导出上传商铺的ipa
       xcodebuild \
           -exportArchive -archivePath "$export_xcarchive_path$xcarchive_name" \
           -exportPath "${export_ipa_path}" \
           -exportOptionsPlist "${export_options_plist}" \
           -destination "$generic" \
           -allowProvisioningUpdates -quiet || exit
      

      经过上面的过程,假如状况是成功的.咱们就能获取到IPA.到这儿,咱们基本上打包完结了,高不高兴,简不简单.唉,可对于我来说,也是学习了不少东西呢.下面,咱们再把上传搞定就齐活了.

  5. 上传

    从上面的流程图中,上传分为商铺蒲公英.下面咱们来看一下吧

    商铺

    上传商铺,咱们用的是苹果供给的xcrun altool指令.

    上传分为两种暗码验证机制,一种是密钥,一种是专属暗码.

    这儿咱们选用的专属暗码办法.想要学习xcrun altool的同学,我将会在后续文章里,做具体解说.这儿咱们就不再细讲.

    当然,上传首要分为两个过程

     1. 验证app
         ```
         xcrun altool \
              --validate-app \
              -f "$export_ipa_path/$ipa_name.ipa" \
              ## 开发者账号
              -u "$xcrun_u" \
              ## 开发者专属暗码
              -p "$xcrun_p" \
              ## 验证类型
              -t ios
         ```
     3. 上传app
         ```
         xcrun altool \
              --upload-app \
              -f "$export_ipa_path/$ipa_name.ipa" \
              -u "$xcrun_u" \
              -p "$xcrun_p" \
              -t ios
         ```
        > 经过上面的流程,你的**IPA**就上传到商铺了,是不是很省劲啊.
    

    蒲公英

    蒲公英相对简单一点,由于咱们用的pgyer_uload.sh文件,现已封装的很好.只需求调用办法.如下所示

      echomsg "开始上传ipa到蒲公英"
      ### 调用办法需求两个参数
      ### 第一个是你蒲公英的key,
      ### 第二个便是IPA的全途径即可
      uploadPgyer "$api_key" "$export_ipa_path/$ipa_name".ipa
    

至此.Flutter 解放双手-Shell主动化打包之IPA完结.后续有什么问题,我也会持续更新.喜爱的能够点点赞,重视一下.

Flutter 解放双手系列

文章列表入口