iOS自动打包

利用 xcdeobulid 打包项目、上传

Posted by     JT on June 29, 2017

利用xcode的命令行工具 xcdeobulid 进行项目的编译打包,生成ipa包,并上传到fir

前言

现在网上的自动打包教程几乎都还是xcodebuild + xcrun的方式先生成.app包 再生成.ipa包,结果弄了一整天硬是没成功~

后来发现PackageApplication is deprecated,悲剧。然后手动压缩的 .ipa包因为签名问题无法装到手机上。

后来用了archive + -exportArchive终于可以了~

正文

Xcodebuild

xcodebuild 的使用可以用 man xcodebuild查看。

查看项目详情

# cd 项目主目录
xcodebuild -list

输出项目的信息

Information about project "StackGameSceneKit":
    Targets:
        StackGameSceneKit
        StackGameSceneKitTests

    Build Configurations:
        Debug
        Release

    If no build configuration is specified and -scheme is not passed then "Release" is used.

    Schemes:
        StackGameSceneKit

要留意 ConfigurationsSchemes这两个属性。

自动打包流程

生成 archive

生成archive的命令是 xcodebuild archive

xcodebuild archive -workspace ${project_name}.xcworkspace \
               -scheme ${scheme_name} \
               -configuration ${build_configuration} \
               -archivePath ${export_archive_path}
  • 参数一:项目类型,,如果是混合项目 workspace 就用 -workspace,如果是 project 就用 -project

  • -scheme:项目名,上面xcodebuild -list中的 Schemes

  • -configuration :编译类型,在configuration选择, Debug 或者 Release

  • -archivePath:生成 archive 包的路径,需要精确到 xx/xx.archive

首先需要创建一个AdHocExportOptions.plist文件

导出ipa包

导出.ipa包经常会出现错误,在ruby2.4.0版本中会报错,所以请使用其他版本的ruby,最初的原因是使用了 ruby2.4.0 进行编译时出现的错误。

解决方法是低版本的 ruby 进行编译,如使用系统版本:rvm use system。后面升级macOS系统(10.12.5)后发现 ruby2.4.0 能成功 导出ipa包了。

导出ipa包使用命令:xcodebuild -exportArchive

xcodebuild  -exportArchive \
            -archivePath ${export_archive_path} \
            -exportPath ${export_ipa_path} \
            -exportOptionsPlist ${ExportOptionsPlistPath}
  • archivePath:上面生成 archive 的路径
  • -exportPath:导出 ipa包 的路径
  • exportOptionsPlist:导出 ipa包 类型,需要指定格式的plist文件,分别是AppStroeAdHocEnterprise,如下图

选择这三个类别需要分别创建三个plist文件:

  • AdHocExportOptionsPlist.plist

  • AppStoreExportOptionsPlist.plist

  • EnterpriseExportOptionsPlist.plist

上传到 Fir

将项目上传到 Fir

下载 fir 命令行工具

gem install fir-cli

获取 fir 的 API Token(右上角)

上传

fir publish "ipa_Path" -T "firApiToken"

自动打包脚本

再次提醒,请不要使用 ruby 2.4.0 运行该脚本!,若在 ruby 2.4.0 下编译失败,请切换低版本的ruby。

切换完毕记得重新安装 fir 命令行工具。

脚本我fork了 jkpang 的脚本进行修改,添加了自动上传到 fir 的功能。

使用方法在Github上有详细介绍。

GitHub:https://github.com/qiubaiying/iOSAutoArchiveScript

Ruby相关

利用 自定义终端指令 简化打包过程

以zsh为例:

open ~/.zshrc 添加自定义命令 cd + sh

alias mybuild='cd 项目地址/iOSAutoArchiveScript/ &&  sh 项目地址/iOSAutoArchiveScript/iOSAutoArchiveScript.sh' 这样打开终端输入`mybuild`,就可以轻松实现一键打包上传了

fastlane 打包

安装前的准备

  • 确认安装了ruby, 终端查看本地ruby版本 ruby -v
  • 确认安装了Xcode命令行工具,xcode-select --install

安装

  • 安装fastlane : sudo gem install fastlane -NV
  • 如果出现 404 not found,可以尝试切换一下镜像源
#查看gem源
gem sources
# 删除默认的gem源
gem sources --remove https://ruby.taobao.org/ # 增加rubygems作为gem源
gem sources --a https://rubygems.org/
# 查看当前的gem源
gem sources
*** CURRENT SOURCES *** https://rubygems.org/
  • 在⼯工程⽬目录下初始化 : fastlane init

  • init 过程中给出4个选项,如果需要上传包到iTunes Connect,选3,填写Apple ID
  • 安装完成后在项⽬目⽬目录下fastlane⽂文件夹中有两个⽂文件,Appfile和Fastfile,打开Fastlane⽂文件,添加下⾯面的pgy命令
default_platform(:ios)

platform :ios do
  	desc "upload to pgyer"
	lane :pgy do
    	sigh(
    		skip_certificate_verification: true,
    		provisioning_name: 'CRMDis'
    	)
		gym(
			scheme:'CRM',
			# app-store、ad-hoc、package、enterprise、development
    		export_method: "enterprise",
    		export_options: {
    			provisioningProfiles: {
    				"com.offcn.crm.enterprise" => "CRMDis",
    			}
  			},
    		export_xcargs: "-allowProvisioningUpdates",
    		output_directory: '~/Desktop/PGY'
  		)
        pgyer(api_key: "b7161afbeede59068929efb2f4a5d283", user_key: "81dd4c0bcdeb7f57d19f885c6f54f4e1")
        # firim(firim_api_token: '')
    end
end

Appfile文件

app_identifier("com.offcn.crm.enterprise") # The bundle identifier of your app
apple_id("wangshichao@offcn.com") # Your Apple email address

itc_team_id("119540342") # App Store Connect Team ID
team_id("T33U9W2B55") # Developer Portal Team ID

# For more information about the Appfile, see:
#     https://docs.fastlane.tools/advanced/#appfile
  • 安装蒲公英插件, sudo fastlane add_plugin pgyer
  • 执行 fastlane pgy 打包,⽂文件输出位置可以在output_directoy中修改

shell 打包

参考