iOS自动化构建 - fastlane持续集成(蒲公英、钉钉)

96
LuisX 595a1b60 08f6 4beb 998f 2bf55e230555
1.1 2018.03.07 14:47* 字数 603

本文主要使用 fastlane 配置 iOS 的持续集成,一行命令实现, 自动编译、打包、上传蒲公英、钉钉机器人通知的功能。

如果对 fastlane 还不了解,可以阅读Fastlane自动化构建工具(完整解决测试和发布流程)这篇文章,简单了解一下,想要深入了解,可以前往Fastlane官网

一、安装 fastlane

1、进入工程根目录

cd [工程根目录]

2、初始化 fastlane

fastlane init

3、What would you like to use fastlane for?
选择 3 (其实任何选项都可以,后面可以完善)

4、Parsing your local Xcode project to find the available schemes and the app identifier?
选择 工程的 scheme

5、Please enter your Apple ID developer credentials?
输入 Apple ID

6、Would you like fastlane to manage your app's metadata?
选择 y

7、打开工程,设置Current Project Version 和 Versioning System


8、新开一个窗口,进入工程根目录,更新 bundle

cd [工程根目录]
bundle update

二、蒲公英 App 上传

1、进入工程根目录

cd [工程根目录]

2、安装蒲公英的 fastlane 插件

fastlane add_plugin pgyer

三、钉钉机器人通知

1、钉钉 -> 群机器人 -> 添加机器人


2、复制 webhook


四、fastfile 配置

Fastlane 会自动在工程根目录中生成 fastlane 目录,其中就会有 fastlane 的配置文件 fastlane/Fastfile

参考文档:
Fastlane 操作文档
使用 Fastlane 上传 App 到蒲公英
钉钉开放平台 自定义机器人

2、配置 Fastfile,可以根据如下代码片段进行完善

配置项(替换[******]

app 相关

名称 说明
ipa_name ipa 名字

gym 相关

名称 说明
scheme 工程 scheme

pgyer 相关

名称 说明
api_key 蒲公英 app api_key
user_key 蒲公英 app user_key

dingding 相关

名称 说明
app_url app 下载链接
app_icon app 图标链接
dingTalk_url 钉钉机器人 webhook

达人店目前的 Fastfile

default_platform(:ios)

# 网络请求依赖
require 'net/http'
require 'uri'
require 'json'

platform :ios do
  
  # release发布包
  desc "Push a new release build to the App Store"
  lane :release do
    increment_build_number(xcodeproj: "DaRenShop.xcodeproj")
    build_app(workspace: "DaRenShop.xcworkspace", scheme: "DaRenShop")
    upload_to_app_store
  end

  # debug测试包
  desc "Push a new debug build to the pgyer.com"
  ipa_dir  = "fastlane_build/"
  ipa_name = "[******]" + Time.new.strftime('%Y-%m-%d_%H:%M')

  lane :pgyer_debug do |options|
  gym(
    # 打包前clean项目
    clean: true, 
    # 构建时,隐藏不必要的信息  
    silent: true,           
    # bitcode
    include_bitcode: false,                             
    # 导出方式 app-store、ad-hoc、enterprise、development
    export_method: "ad-hoc",        
    # scheme    
    scheme: "[******]",                 
    # 环境 Debug、Release
    configuration: "Debug",             
    # ipa的存放目录
    output_directory: ipa_dir,          
    # 输出ipa的文件名为当前的build号
    output_name: ipa_name                 
    )

  # 蒲公英
  pgyer(
    api_key: "[******]", 
    user_key: "[******]",
    update_description: 
    options[:desc]
    )

  # 钉钉机器人
  app_patch   = ipa_dir + "/#{ipa_name}.ipa"
  app_version = get_ipa_info_plist_value(ipa: app_patch, key: "CFBundleShortVersionString")
  app_build_version = get_ipa_info_plist_value(ipa: app_patch, key: "CFBundleVersion")
  app_name    = get_ipa_info_plist_value(ipa: app_patch, key: "CFBundleDisplayName")
  app_url = "[******]"
  app_icon = "[******]"
  dingTalk_url = "[******]"
  
  markdown = 
  {
    msgtype: "link", 
    link: {
        text: "已经更新啦,快来试试吧!", 
        title: "iOS #{app_name} #{app_version} (#{app_build_version}) 内测版", 
        picUrl: "#{app_icon}", 
        messageUrl: "#{app_url}"
    }
}

  uri = URI.parse(dingTalk_url)
  https = Net::HTTP.new(uri.host, uri.port)
  https.use_ssl = true

  request = Net::HTTP::Post.new(uri.request_uri)
  request.add_field('Content-Type', 'application/json')
  request.body = markdown.to_json

  response = https.request(request)
  puts "------------------------------"
  puts "Response #{response.code} #{response.message}: #{response.body}"

  end

end

五、开始构建

1、进入工程根目录

cd [工程根目录]

2、执行fastlane pgyer_debug命令

fastlane pgyer_debug

3、 构建完成


4、钉钉通知


六、自动更新设备列表

1.前往 Apple Developer,在 Devices 中添加 相应的新设备
2.本地删除 ~/Library/MobileDevice/Provisioning 路径下所有内容。
(注:同时管理多个 AppleID 要防止误删)
3.Xcode中按住 command + , 打开偏好设置,Accounts 中选择 相应的AppleID 点击 Download Manual Profiles 把远端管理的 provisioning profile 更新到本地。

七、问题汇总

1.报错 xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
原因:安装了多个 Xcode,xcodebuild 找不到原来的 Xcode 了。
解决:重新选择正确的 Xcode。

sudo xcode-select --switch /Applications/Xcode9.app/Contents/Developer/
iOS 开发
Web note ad 1