iOS多Target项目自动化打包并上传蒲公英

/ 0评 / 0

最近遇到一个需求,就是同一份iOS源码用不同的账号打包不同平台(App Store或企业打包)的多个app,并且每个app的名称、图标、启动图和app内的一些基础信息不同,并且要对这些app持续维护更新。最终采用多 target + fastlane 的方式实现,此篇文章记录下流程和注意点。

配置多Target

我们在一个工程里创建多个target来管理不同的app的配置信息,首先在 TARGETS 里右键选择要作为模板的target,点击Duplicate复制target。

这个操作会复制一个target、scheme和info.plist 配置文件,得到下图:

然后我们可以修改target、scheme和info.plist名称。

注意修改info.plist文件名后需要重新为 target 指定info.plist配置文件。

然后我们就可以单独修改这个target的Bundle Identifier、app图标等信息了,比如我们修改app的图标,先添加AppIcon。

然后设置AppIcon,启动图也是同理。

如果在app内需要根据不同的target配置一些差异性的内容或图片,我们可以在对应的info.plist中添加字段来控制。比如我们可以在info.plist中添加我们想要的数据:

然后创建一个配置文件来保存这些配置到内存中供我们使用,我用的是Swift语言,所以我使用全局变量,如果是OC可以使用单利对象的形式。

然后在程序启动的时候去加载这些配置信息。

这样我们就可以在app内对字符串、图片或者一些逻辑判断进行区别控制了。最后需要注意的是,如果使用的是CocoaPods来管理我们的第三方库,我们需要在Profile里重新指定下target。

至此我们对项目的多target配置已经完成,我们已经可以使用Xcode来打包这些target了。接下来,我们使用fastlane来自动构建我们的项目。

配置Fastlane

安装fastlane的过程请自行谷歌或查阅官方文档 https://github.com/fastlane/fastlane ,这里就不赘述了,下面的步骤是确保你已经成功安装了Fastlane的情况下继续的。

在项目目录,初始化fastlane。

$ fastlane init

执行过程中,第一个?号直接回车,后面会提示输入苹果开发者账号等信息,设置后会自动去下载app元数据信息。如果我们是使用多个账号打包,这里可以随便输入一个即可,这次需求不需要自动提交App Store,所以无需在意。

fastlane初始化成功后,会在项目目录下生成一个fastlane目录,里面会有以下几个文件和目录。

Appfile文件:用于配置app_identifier、apple_id、team_id。

Deliverfile文件:用于配置跟 app 版本发布到App Store相关的信息,我们这里暂时不使用。

Fastfile文件:用于编写逻辑脚本,使用 ruby 语言,比如打包、上传到App Store或蒲公英的脚本。

metadata目录:存放 app 元数据,包括 app 简介、Icon、Copyright 等信息。

screenshots目录:存放App Store下载的应用截图。

接下来我们可以针对每个target单独创建一个环境配置文件,在fastlane目录下创建 .env.xxxx 文件,内容参考如下:

APPLE_ID = "开发者账号"
FASTLANE_PASSWORD = "开发者密码"

TEAM_ID = "团队ID"
APP_IDENTIFIER = "Bundle Identifier"
SCHEME_NAME = "scheme名称"
METHOD = "打包方式,可选enterprise、app-store等"

然后在Appfile文件中引用这些配置:

app_identifier ENV['APP_IDENTIFIER']
apple_id ENV['APPLE_ID']
team_id ENV['TEAM_ID']

最后在Fastfile文件中编写打包逻辑:

fastlane_version "2.66.2"

default_platform :ios

platform :ios do

  desc "打包单个"
  lane :deploy do
    gym(
      scheme: ENV['SCHEME_NAME'],
      export_method: ENV['METHOD'],
      output_directory: "导出ipa文件的目录路径"
      )
  end

  desc "打包所有"
  lane :deploy_all do
    cocoapods
    sh "fastlane deploy --env daihuanbao"
    sh "fastlane deploy --env kahuan"
    sh "fastlane deploy --env qingsonghuan"
    sh "fastlane deploy --env shishihuan"
    sh "fastlane deploy --env suixinghuan"
    sh "fastlane deploy --env ti500wanshenhe"
    sh "fastlane deploy --env wuyoudaihuan"
    sh "fastlane deploy --env yihuan"
    sh "fastlane deploy --env eyongka"

  end

end

就算是不会Ruby语法,从上面的代码中也能清晰的看出,我们只是反复的去调用gym打包不同的target。也就是有多少个target就配置多少个 .env 配置文件,有多少个 .env 配置文件就在 deploy_all 中执行多少次 deploy 指令。

至此我们可以使用一下命令,打包所有target到指定的ipa目录了,如果不需要上传到蒲公英或者希望自己手动上传的话可以这样做。

fastlane deploy_all

配置蒲公英

蒲公英官网的文档中有详细的说明 https://www.pgyer.com/doc/view/fastlane ,这里我简介的介绍一下流程。首先我们要先安装蒲公英提供的fastlane插件:

fastlane add_plugin pgyer

安装成功后,会在项目根目录下生成 Gemfile 和 Gemfile.lock 文件,在fastlane目录下生成 Pluginfile 文件。我们需要修改 Gemfile 文件,在 gem 'fastlane' 后面添加 gem 'cocoapods' ,修改后的内容如下:

# Autogenerated by fastlane
#
# Ensure this file is checked in to source control!

source "https://rubygems.org"

gem 'fastlane'
gem 'cocoapods'

plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)

然后还需要在 Fastfile 文件中配置蒲公英的 app_keyuser_key ,在 https://www.pgyer.com/account/api 可以查看自己蒲公英的key。修改后 Fastfile 的内容如下:

fastlane_version "2.66.2"

default_platform :ios

platform :ios do

  desc "打包单个"
  lane :deploy do
    gym(
      scheme: ENV['SCHEME_NAME'],
      export_method: ENV['METHOD'],
      output_directory: "导出ipa文件的目录路径"
      )
    pgyer(api_key: "你的app_key", user_key: "你的user_key")
  end

  desc "打包所有"
  lane :deploy_all do
    cocoapods
    sh "fastlane deploy --env daihuanbao"
    sh "fastlane deploy --env kahuan"
    sh "fastlane deploy --env qingsonghuan"
    sh "fastlane deploy --env shishihuan"
    sh "fastlane deploy --env suixinghuan"
    sh "fastlane deploy --env ti500wanshenhe"
    sh "fastlane deploy --env wuyoudaihuan"
    sh "fastlane deploy --env yihuan"
    sh "fastlane deploy --env eyongka"

  end

end

最后我们可以回到项目所在目录,执行以下命令进行自动打包自动上传到蒲公英:

bundle exec fastlane deploy_all

最终配置完成后的目录结构参考:

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注