fastlane 自动打包到 fir.im 的踩坑之路

之前一直使用 fir-cli 工具来对项目进行打包,看了《小团队的自动化发布-Fastlane 带来的全自动化发布》这篇文章,决定试一试 fastlane 自动打包并上传到 fir.im。fastlane 参考文档可以到其github上进行查看,这里仅记录在使用 fastlane 自动打包到 fir.im 时踩过的坑。

安装

确保 Xcode 命令行工具安装了最新版本

xcode-select --install

接下来是安装 fastlane ,官网给出了三种方法

6D91F873-D681-4024-B806-51EAA641484A.png

第一种是通过 Homebrew 软件包管理器来进行安装,第二种就是我们最熟悉的方式,下载安装包来进行安装,第三种是通过 RubyGems 来进行,RubyGems 是一个方便的 Ruby 程序包管理器,可以将一个 Ruby 应用程序打包到一个 Gem 里,作为一个安装单元。 一个 Gem 就是一个封装起来的应用程序或代码库。这里选择了第三种方法。

sudo gem install fastlane

初始化

到项目的根目录下,初始化 Fastlane

fastlane init

运行结束大概就是这个样子


ADD21E70-2BBC-42B8-9279-B3BFE7911975.png.png

84D432DC-A035-4CEA-BF7A-BF08787CD956.png.png

会让你输入你的 Apple ID 之类的,会问你这个app是否需要在 iTunes Connect 等中创建,这里我选择了 n ,此时初始化结束,在项目目录下的 fastlane 文件夹下生成了两个文件 Appfile 和 Fastfile,这里面的具体内容 《小团队的自动化发布-Fastlane 带来的全自动化发布》已经讲解的很清楚了,就直接略过了,直接上 Fastfile 中用到的代码,因打包使用的是企业证书,因此将 method 方法设置为 enterprise 。

 lane :to_firim do
  # 如果你用 pod install
  cocoapods
  # 如果你没有申请adhoc证书,sigh会自动帮你申请,并且添加到Xcode里
  #sigh(adhoc: true)
  # 以下两个action来自fastlane-plugin-versioning,
  # 第一个递增 Build,第二个设定Version。
  # 如果你有多个target,就必须指定target的值,否则它会直接找找到的第一个plist修改
  # 在这里我建议每一个打的包的Build都要不一样,这样crash了拿到日志,可以对应到ipa上
  increment_build_number_in_plist(target: "XXXXX")
  increment_version_number_in_plist(
    target: "XXXXX",
    version_number: '1.9.0'
    )
  # gym用来编译ipa
  gym(
    output_directory: './firim',
    export_options: {
      method: "enterprise", # 指定打包方式
      teamID: "XXXXX",
      thinning: "<none>"
    },
    scheme: "XXXXX"
    )
  # 上传ipa到fir.im服务器,在fir.im获取firim_api_token
  firim(firim_api_token: "XXXXXXXXXXXXXXXXXXXX")
end

要运行上端代码,需要先添加两个插件,不然会报错

fastlane add_plugin versioning
fastlane add_plugin firim

踩坑之旅

接下来就可以执行以来命令来完成打包到 fir.im

fastlane to_firim

第一次执行到 cocopods 出错 😓

43CBAA33-12D4-4724-944D-570D99D5BC0B.png

错误信息:

cocoapods is not part of the bundle, Add it to your Gemfile 

这里首先要介绍下 bundle ,在配置文件 Gemfile 里说明你的应用依赖哪些第三方包,它会自动帮助你下载安装,并会下载这些包的依赖包。

于是到项目目录文件下找到 Gemfile 文件,添加 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)

执行

bundle install

重新执行

fastlane to_firim

结果执行到 cocoapods 又出错了 😓😓


CFD949AB-56FB-4A7B-A044-3A064414A441.png.png

这次的错误信息是:

The 'Pods-XXXXXX' target has frameworks with conflicting names: ummobclick.framework

大意是说和友盟有冲突,最终在这里找到了解决方法,参照里面的方法,现将友盟相关SDK注释掉,执行 pod update, 然后去掉注释,重新执行 pod update,重新执行打包命令,结果又出问题了(╯‵□′)╯︵┻━┻,不多说上图

D86B2555-D5B2-462A-8E03-CC1197D00DB8.png.png

提示

'AFURLConnectionOperation.h' file not found

用 Xcode 打开项目一看,确实有报错

2033E9EF-880A-4F18-B2C9-5404BC864E10.png.png

感觉奇怪,之前明明可以正常运行,难道是 pod update 更新之后引入的问题?
对比 pod update 之前 AFNetworking 中 UIKit 的代码,发现更新之后多了个 UIAlertView+AFNetworking ,AFURLConnectionOperation.h not found 错入的引入正是由于该文件。于是我参照了上面处理友盟冲突的方法,移除之后又重新添加,然后问题就解决了。

56D603B7-2A99-4040-8ED7-F0FA02933837.png.png
97AFBE44-3543-45B9-A3B4-D2760B9218A9.png.png

再一次运行打包命令,🐶,其实第一次设置 fastlane 中的 gym 时,并没有设置 teamID,结果报错

# gym用来编译ipa
  gym(
    output_directory: './firim',
    export_options: {
      method: "enterprise", # 这可以不指定
      thinning: "<none>"
    },
    scheme: "XXXXXXX"
    )
E8826E04-79CA-440C-A852-FE2C83A7FF43.png.png

在 Fastlane 中添加 teamID 之后,再次运行打包命令,终于执行成功上传到了 fir.im。

其实在执行的过程中,因为选择了企业账号,刚开始的时候 gym 中 method 选择了 ad-hoc,出了差错,具体错误可以看下图,因此在打包的过程中一定要注意证书与 method 的选择。

 Can't find any applicable signing identities for items: (
"<IDEDistributionItem: 0x7f9869b91370 'com.wenwen.group' '<DVTFilePath:0x7f9868bbe760:'/Users/jing/Library/Developer/Xcode/Archives/2017-06-07/GroupWenWen 2017-06-07 16.12.07.xcarchive/Products/Applications/GroupWenWen.app'>'>"
)
Errors={
"<DVTSigningCertificate: 0x7f9869a257c0; name='iPhone Distribution: Beijing Sogou Technology Development Co., Ltd.', hash='08556715143C5BD36F7B8F3AAF342495A701CA6C', serialNumber='6EAB97F1C9F31281', certificateKind='1.2.840.113635.100.6.1.4, issueDate='2016-05-10 06:43:09 +0000''>" =     {
"<IDEDistributionItem: 0x7f9869b91370 'com.wenwen.group' '<DVTFilePath:0x7f9868bbe760:'/Users/jing/Library/Developer/Xcode/Archives/2017-06-07/GroupWenWen 2017-06-07 16.12.07.xcarchive/Products/Applications/GroupWenWen.app'>'>" = "Error Domain=IDECodesignResolverErrorDomain Code=10 \"No matching provisioning profiles found\" UserInfo={NSLocalizedRecoverySuggestion=No valid 'ad-hoc' profiles were found., NSLocalizedDescription=No matching provisioning profiles found, IDECodesignResolverError_ResolutionInputsKey=<IDECodesignResolutionInputs: 0x7f9869a38270; portalTeamID='TUX63H4XEY', usingTeamBasedSigning='NO', bundleIdentifier='com.wenwen.group', targetName='(null)', provisioningProfilePurpose='2', requiresProvisioningProfile='YES', provisioningProfilePlatform='iOS', certificateKind='1.2.840.113635.100.6.1.4', requiredEntitlements='{\n    \"application-identifier\" = \"TUX63H4XEY.com.wenwen.group\";\n    \"keychain-access-groups\" =     (\n        \"TUX63H4XEY.com.wenwen.group\"\n    );\n}', requiredCodesignableDevices='(null)', requiredFeatures='(null)'>\n}";
};
}
...

参考文章

https://whlsxl.github.io/#to_firim
https://henter.me/post/ruby-rvm-gem-rake-bundle-rails.html
http://www.jianshu.com/p/a04a6e055669

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容