Martin

思想空间

我是Martin,iOS / Android 开发者。


欢迎来到我的思想空间

使用fastlane实现持续集成实践

需求:实现自动打包并发布

方案:使用fastlane实现adhoc和inhouse两个版本的自动打包,使用fir.im平台实现上传和下载

使用fastlane实现自动打包

fastlane基本介绍及下载安装这里就不讲了,官方文档已经讲的很清楚了,这里直接开始实践。

首先实现adhoc版本的打包

根据官方的指引,安装完fastlane后到达网页,通过简单的配置生成一个最简单的Fastfile放到项目根目录的fastlane文件夹下。如图:tupian

生成的Fastfile主要内容如下:

 lane :beta do
  cocoapods

  increment_build_number

  # build your iOS app
  gym(
    # scheme: "YourScheme"
  )
end

根据我们的需求,做些修改:将beta改成adhoc,添加scheme等配置如下:

lane :adhoc do
    gym(
      scheme: "YourScheme”,
      output_directory: "adhocipa", #输出ipa目录
      output_name: "adhoc.ipa",  #输出ipa文件名
      use_legacy_build_api: true
    )
end

关于证书的配置,到本篇文章撰写时,已经使用xcode8开发,fastlane可以很智能的匹配xcode中配置的证书和授权文件,可以参考Setting up your Xcode Project.

总之:在xcode上配置好证书后我们不需要做任何其他事情。

你可以使用Automatically manage signing如图:tu

也可以手动指定证书和授权文件,如图:tuu

此时在控制台输入:

     fastlane adhoc

即可打包成功

下面实现inhouse版本的打包

要实现inhouse版本的打包,我们需要修改项目的Bundle ID,并且重新指定证书和授权文件,fastlane提供了很多方法来签名,具体需要好好查看文档,像action中的projectcode-sign等等。

这里我们采用一种偷懒的方法,使用resign,具体脚本如下:

lane :inhouse do
    outputdirectory = "inhouseipa"
    outputname = "inhouse.ipa"
    
    gym(
      scheme: "YourScheme",
      output_directory: "#{outputdirectory}", # Destination directory. Defaults to current directory.
      output_name: "#{outputname}", 
      use_legacy_build_api: true
    )

    resign(
      bundle_id: "com.XXX.inhouse",
      ipa: "#{outputdirectory}/#{outputname}",
      signing_identity: "iPhone Distribution: XXXX",
      provisioning_profile: "ProvisioningProfiles/XXX_inhouse.mobileprovision",
    )

end

首先我们新建了一个inhouse命令,指定了输出文件夹和文件名,并执行gym命令,它和之前的adhoc内容是一样的,也就是说执行完gym即可生成一个adhoc的包。

下面我们执行resign命令,指定需要resign的ipa包,重新设置id,证书和授权文件,如此即可打出inhouse的包。

下面我们将打包好的ipa发布到fir.im平台

先安装fir,fir.im提供可上传命令,还有jenjins插件,具体还没有细看,总之先使用上传命令,新建build.sh脚本,脚本实现如下:

#!/bin/bash

project_path=$(pwd)

if [ $1 == "inhouse" ]
  then  
  fastlane inhouse
  ipa_path="${project_path}/inhouseipa/inhouse.ipa"
  #上传到fir
  fir publish ${ipa_path} -T "your fir.im token" -c "$2"
elif [ $1 == "adhoc" ]
  then
  fastlane adhoc
  ipa_path="${project_path}/adhocipa/adhoc.ipa"
  #上传到fir
  fir publish ${ipa_path} -T "your fir.im token" -c "$2"
fi

在控制台执行:

sh build.sh adhoc adhoctest

或者:

sh build.sh inhouse inhousetest     

第一个参数指定fastlane的命令,第二个参数说明提交日志。

总结

以上即完成了使用fastlane实现adhoc和inhouse两个版本的自动打包,使用fir.im平台实现上传和下载的全部。但上述脚本显然还有很多问题,我们后续再更新,

最近的文章

swift泛型协议实践

swift中泛型主要有三种应用,泛型函数,泛型类型,泛型协议。这篇文档主要记录在使用泛型协议中遇到的问题,其他简单提一下泛型函数当我们需要的泛型作用于只存在于函数内部时即可用泛型函数,如:func swapTwoValues<T>(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA}使用方法:var someString = "hello"var anotherString...…

总结知识管理继续阅读
更早的文章

使用Mirror实现自定义对象转JSON及对象序列化

需求实现一个基类Model,继承它的类不需要再写代码即可实现对象转json即对象序列化实现效果如下基类为JSONModel,为了测试其健壮性,下面的例子写了一些嵌套关系创建一些类,继承JSONModel: //用户类 class User : JSONModel { var name:String = "" //姓名 var nickname:String? //昵称 var age:Int = 0 //年龄 var emails:[String]?...…

总结知识管理继续阅读