美文网首页
Fastlane - 从创建证书到上传到App Store

Fastlane - 从创建证书到上传到App Store

作者: WillPan | 来源:发表于2018-06-04 19:19 被阅读599次

简介

fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化签名、配置、打包、发布等工作
为什么要用fastlane?
因为一行命令就可以实现编译、打包(ad-hoc&app store)、发布(蒲公英、App Store),剩下的时间你就可以愉快地喝茶看新闻了。而且配合Jenkins可以很好地实现持续集成,举个例子:在公司的Gitlab上打一个v开头的tag,就会自动编译打包新版本啦

话不多说直接进入实战环节,其他介绍可参考:blog.devzeng.com
安装fastlane:

sudo gem install fastlane

注:下文的PROJECT_DIR指的是工程根目录,eg:/Users/pan/Documents/Project/Demo/FastLaneDemo2

初始化fastlane

先创建工程或打开工程,这里以创建FastLaneDemo2为例,在Xcode创建FastLaneDemo2之后,先取消Xcode自动管理签名选项:

工程设置.png

初始化fastlane,终端运行:

fastlane init

终端: What would you like to use fastlane for?
你:选择 3. 🚀 Automate App Store distribution,即发布自动化,这里主要是想自动配置开发者账号
终端:Please enter your Apple ID developer credentials Apple ID Username:
你:输入自己的AppleID(开启两步验证的账号要输入验证码)
终端:Do you want fastlane to create the App ID for you on the Apple Developer Portal? (y/n)
你:输入n,不在Apple Developer创建应用
终端:Would you like fastlane to create the App on iTunes Connect for
you? (y/n)
你:输入n,不在iTunes Connect 创建应用
终端:Continue by pressing Enter ⏎
你:三次Enter键
执行完这几部就会发现工程根目录新增了fastlane文件夹,打开PROJECT_DIR/fastlane/Appfile 文件,会发现开发者账号配置完毕:

app_identifier("com.showu.FastlaneDemo2") # 你的应用的 bundle identifier 
apple_id("3*******5@qq.com") # 你的AppleID邮箱

itc_team_id("11*****78") # iTunes Connect Team ID
team_id("6FB****FUR") # Developer Portal Team ID

在Apple Developer和iTunesConnect创建App

PROJECT_DIR/fastlane/Fastfile 文件增加:createApp Action

    #在iTunesConnect创建App
    #如果出现The app name you entered is already being used错误请更换app_name值
    #push_notification: "on"表示App开启通知功能
    lane :createApp do
        produce(
            username: '3*******5@qq.com',
            app_identifier: 'com.showu.FastLaneDemo2',
            app_name: 'FastLaneDemo2018',
            language: 'English',
            #如果只在AppleDeveloper创建app,不在iTunesConnect创建app的话
            #skip_itc: true,
            app_version: '1.0',
            enable_services: {
                app_group: "on",
                push_notification: "on",
            }
        )
    end

这里用到了fastlane的第一个工具:produce(←push_notification等更多参数配置请戳进去查看)。作用是使用命令行在iTunes Connect和Dev Portal上创建新的iOS应用程序

终端输入

fastlane createApp

刷新Apple Developer和iTunesConnect官网,会发现新增了一个App:FastLaneDemo2018

创建、下载、安装Provisioning Profiles

PROJECT_DIR/fastlane/Fastfile 文件增加:adhoc_profile Action

    #下载provisioning_profile
    lane :adhoc_profile do
        #如果没有在Apple Developer创建证书的话,get_certificates会帮你自动创建证书
        get_certificates
        sigh(
            username: '3*******5@qq.com',
            app_identifier: 'com.showu.FastLaneDemo2',
            force: true,
            provisioning_name: 'com.showu.FastLaneDemo2_AdHoc',
            ignore_profiles_with_different_name: true,
            adhoc: true
        )
    end

终端输入

fastlane adhoc_profile

小插曲:

{"responseId"=>"2914996e-aaef-47d8-b279-f0ca557275a4", "resultCode"=>35, "resultString"=>"There were errors in the data supplied. Please correct and re-submit.", "userString"=>"There are no current IOS devices on this team matching the provided device IDs.", "creationTimestamp"=>"2018-06-04T09:11:01Z", "protocolVersion"=>"QH65B2", "userLocale"=>"en_US", "requestUrl"=>"https://developer.apple.com/services-account/QH65B2/account/ios/profile/createProvisioningProfile.action", "httpCode"=>200, "validationMessages"=>[{"validationKey"=>"deviceIds", "validationUserMessage"=>"There are no current IOS devices on this team matching the provided device IDs."}]}

原因:There are no current IOS devices on this team matching the provided device IDs.
因为用的是新的开发者账号,所以AppleDeveloper没有添加设备,所以需要添加至少一台设备才能打Ad-Hoc包
既然用了fastlane,咱就可以用命令行来做这个操作:

添加Devices到AppleDeveloper

创建一个制表符tab分隔的文件devices.txt如下:

Device ID   Device Name
6ccb3dc72b0c574fa5e****29d3cad609d3cb080    Pan
4af771e47a9067610d****846be8ea5f9bc0faa1    Yan 

注意:
要放在PROJECT_DIR路径下面,每行包含一个设备ID和一个设备名称。您可以将第一行用于标题,因为该行在分析时会被忽略。
第二行是设备ID和自定义名称,中间要加tab符号,推荐使用Sublime Text文本编辑器
打开AppleDeveloper的TXT文件,参考:help.apple.com

PROJECT_DIR/fastlane/Fastfile文件增加:add_device action

    lane :add_device do
        register_devices(
            devices_file: "./devices.txt"
        ) 
    end

终端输入

fastlane add_device

设备添加成功!

重新下载安装provisioning profile:

fastlane adhoc_profile

会发现工程根目录多了AdHoc_com.showu.FastLaneDemo2.mobileprovision文件,现在我们就可以愉快地打包了

打Ad-Hoc包

如果有多个Target,需要先设置scheme,参考:developer.apple.com
Product > Schemes > Manage Schemes, 点击 '+' 按钮, 选择自己刚才新建的target (FastLaneDemoDev),点击 'OK' 按钮,右侧的Shared选项记得勾上

PROJECT_DIR/fastlane/Fastfile文件增加:adhoc Action

    #打ad-hoc包
    lane :adhoc do
        #build_app 是gym的别名,可以换成gym
        build_app(
            scheme: "FastLaneDemoDev",
            export_method: "ad-hoc"
        )
        
    end

然后打开Xcode工程,选择合适的配置文件:


选择合格的配置,请忽略细节.png

终端输入:

fastlane adhoc 

即可在工程根目录看到生成的ipa

如果需要上传ipa到蒲公英,可先安装蒲公英的 Fastlane 插件,终端输入:

fastlane add_plugin pgyer

会在PROJECT_DIR/fastlane/新增Pluginfile文件、修改Gemfile文件
修改PROJECT_DIR/fastlane/Fastfile文件,增加如下action,增加上传到蒲公英功能,参数获取请参考:蒲公英官网

    #打ad-hoc包
    lane :adhoc do
        #build_app 是gym的别名,可以换成gym
        build_app(
            scheme: "FastLaneDemoDev",
            export_method: "ad-hoc"
        )
        #上传到蒲公英
        pgyer(api_key: "c9f01d6**************c206ea2cd", user_key: "2dfd4fc**************c7b758b1")
        # upload_to_app_store(skip_metadata: true, skip_screenshots: true)
    end

打App Store包

修改PROJECT_DIR/fastlane/Fastfile文件,增加如下action

lane :appstore_ipa do
    #下载安装provisioning profile
    sigh(
      username: '3*******3@qq.com',
      app_identifier: 'com.*****.FastlaneDemo1',
      force: true,
      provisioning_name: 'com.*****.FastlaneDemo1 AppStore',
      ignore_profiles_with_different_name: true,
    )
    gym(
      scheme: "FastlaneDemo1",
      export_method: "app-store",
      #如果用到了LLVM混淆工具的话可以指定toolchain(下面是https://github.com/HikariObfuscator/Hikari):
      #toolchain:"com.naville.hikari",
      output_name:"FastlaneDemo1_AppStore.ipa"
    )
  end

然后打开Xcode工程,在Target - General - Signing(Release) 选择合适的配置文件(同上),运行fastlane appstore_ipa即可生成ipa

上传ipa到iTunesConnect

PROJECT_DIR/fastlane/Fastfile文件新增以下Action:

    lane :upload do
        # upload_to_app_store
        # submit_for_review:上传完成后提交新版本进行审查,这里选择不,提交审核前自己检查下
        # force:跳过HTML报告文件验证
        # ignore_language_directory_validation:在元数据和screeenshot目录中发现无效语言时忽略错误
        deliver(
            submit_for_review: false,
            force: true,
            ignore_language_directory_validation:true,
            metadata_path: "./metadata"
        )
    end

这里用到了一个deliver工具,可上传二进制文件到iTunesConnect,我这里忽略了商店截图等参数的配置,直接上传二进制文件,如果不想登录iTunesConnect一个个地设置请参考(deliver章节](https://docs.fastlane.tools/actions/deliver/),这样在本地填好了txt文本就可以自动帮你填写提交审核需要的资料了
终端运行fastlane upload,几分钟后就可以在构建版本里看到了

当然,你也可以把前面的所有action实现组合一下,用一个新action代替

其他实用Action

生成不同尺寸的icon

准备一张1024*1024的图片,放到根目录,
先安装appicon插件,更多参数请参考appicon README

fastlane add_plugin appicon 

再在PROJECT_DIR/fastlane/Fastfile文件新增以下代码:

    lane :generate_icon do 
    #执行自定义脚本,比如修改启动页图片
    # sh "your_shell.sh"
    #如果支持iPad请使用[:ipad, :iphone, :ios_marketing]
    appicon(
      appicon_image_file: './AppIcon.png',
      appicon_devices: [:iphone, :ios_marketing],
      appicon_path: 'FastlaneDemo2/Assets.xcassets'
    )
  end

运行fastlane generate_icon,即可在Xcode工程生成各种尺寸的icon

更多使用指令,请去官网探索吧!

相关文章

网友评论

      本文标题:Fastlane - 从创建证书到上传到App Store

      本文链接:https://www.haomeiwen.com/subject/truysftx.html