iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上

iOS自动化编译打包提交-Shell脚本实现 平时,我们把app提交给测试人员或发布出去,需要执行以下过程: 阅读详情

如果移动端访问不佳,可以访问我的个人博客

用fir.im测试已经好长时间了,感觉每次打包上传都很麻烦,想着是不是可以用脚本自动打包,在网上搜了一下确实有,下面总结一下如何使用脚本自动打包上传到fir.im,以及打包过程中遇到的问题和解决办法

相关资料和下载

首先是打包脚本的下载地址,这个是我找到的比较全的一个,里面有很多不同功能的shell脚本,亲测好用,传送门

还有关于fir指令的一些介绍可以去这里查看,传送门

第一步安装fir-cil

fir-cli 使用 Ruby 构建, 无需编译, 只要安装相应 gem 即可.

$ ruby -v # > 1.9.3
$ gem install fir-cli

常见的安装问题

  • 使用系统自带的 Ruby 安装, 需确保 ruby-dev 已被正确的安装:

    $ xcode-select --install        # OS X 系统
    $ sudo apt-get install ruby-dev # Linux 系统
  • 出现 Permission denied 相关错误:

    在命令前加上 sudo

  • 出现 Gem::RemoteFetcher::FetchError 相关错误:

    更换 Ruby 的淘宝源(由于国内网络原因, 你懂的), 并升级下系统自带的 gem

    $ gem sources --remove https://rubygems.org/
    $ gem sources -a https://ruby.taobao.org/
    $ gem sources -l
    *** CURRENT SOURCES ***
    
    https://ruby.taobao.org
    
    # 请确保只有 ruby.taobao.org, 如果有其他的源, 请 remove 掉
    
    
    gem update --system
    gem install fir-cli
  • Mac OS X 10.11 以后的版本, 由于10.11引入了 rootless, 无法直接安装 fir-cli, 有以下三种解决办法:

    1. 使用 Homebrew 及 RVM 安装 Ruby, 再安装 fir-cli(推荐)

    
    # Install Homebrew:
    
    $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
    
    # Install RVM:
    
    $ \curl -sSL https://get.rvm.io | bash -s stable --ruby
    
    $ gem install fir-cli

    2. 指定 fir-cli 中 bin 文件的 PATH

    $ export PATH=/usr/local/bin:$PATH;gem install -n /usr/local/bin fir-cli

    3. 重写 Ruby Gem 的 bindir

    $ echo 'gem: --bindir /usr/local/bin' >> ~/.gemrc
    $ gem install fir-cli

第二步登录fir.im

登录指令非常简单,只需要fir login API Token,这里面的API Token就是你fir帐号下的API Token,然后通过fir me查看你是否登录成功.

首先获取API Token

这里写图片描述

这里写图片描述

在终端里登录你的fir

  fir login API Token
  fir me

如果出现一下类似的情况说明登录成功了.
这里写图片描述

获取需要上传应用的appID

这里写图片描述

第三步使用下载下来的shell脚本进行打包上传

先看一下脚本代码:

#! bin/bash
#Author:Bruce http://www.heyuan110.com
#Update Date:2015.06.23
#Use:命令行进入目录直接执行sh Build+DeployToFir.sh即可完成打包发布到fir.im

export LC_ALL=zh_CN.GB2312;
export LANG=zh_CN.GB2312

###############设置需编译的项目配置名称
buildConfig="Release" #编译的方式,有Release,Debug,自定义的AdHoc等

##########################################################################################
##############################以下部分为自动生产部分,不需要手动修改############################
##########################################################################################
projectName=`find . -name *.xcodeproj | awk -F "[/.]" '{print $(NF-1)}'` #项目名称
projectDir=`pwd` #项目所在目录的绝对路径
wwwIPADir=~/Desktop/$projectName-IPA #ipa,icon最后所在的目录绝对路径
isWorkSpace=true  #判断是用的workspace还是直接project,workspace设置为true,否则设置为false

echo "~~~~~~~~~~~~~~~~~~~开始编译~~~~~~~~~~~~~~~~~~~"
if [ -d "$wwwIPADir" ]; then
    echo $wwwIPADir
    echo "文件目录存在" 
else 
    echo "文件目录不存在" 
    mkdir -pv $wwwIPADir
    echo "创建${wwwIPADir}目录成功"
fi

###############进入项目目录
cd $projectDir
rm -rf ./build
buildAppToDir=$projectDir/build #编译打包完成后.app文件存放的目录

###############获取版本号,bundleID
infoPlist="$projectName/Info.plist"
bundleVersion=`/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $infoPlist`
bundleIdentifier=`/usr/libexec/PlistBuddy -c "Print CFBundleIdentifier" $infoPlist`
bundleBuildVersion=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $infoPlist`

###############开始编译app
if $isWorkSpace ; then  #判断编译方式
    echo  "开始编译workspace...." 
    xcodebuild  -workspace $projectName.xcworkspace -scheme $projectName  -configuration $buildConfig clean build SYMROOT=$buildAppToDir
else
    echo  "开始编译target...."
    xcodebuild  -target  $projectName  -configuration $buildConfig clean build SYMROOT=$buildAppToDir
fi
#判断编译结果
if test $? -eq 0
then
echo "~~~~~~~~~~~~~~~~~~~编译成功~~~~~~~~~~~~~~~~~~~"
else
echo "~~~~~~~~~~~~~~~~~~~编译失败~~~~~~~~~~~~~~~~~~~"
exit 1
fi

###############开始打包成.ipa
ipaName=`echo $projectName | tr "[:upper:]" "[:lower:]"` #将项目名转小写
findFolderName=`find . -name "$buildConfig-*" -type d |xargs basename` #查找目录
appDir=$buildAppToDir/$findFolderName/  #app所在路径
echo "开始打包$projectName.app成$projectName.ipa....."
xcrun -sdk iphoneos PackageApplication -v $appDir/$projectName.app -o $appDir/$ipaName.ipa #将app打包成ipa

###############开始拷贝到目标下载目录
#检查文件是否存在
if [ -f "$appDir/$ipaName.ipa" ]
then
echo "打包$ipaName.ipa成功."
else
echo "打包$ipaName.ipa失败."
exit 1
fi

path=$wwwIPADir/$projectName$(date +%Y%m%d%H%M%S).ipa
cp -f -p $appDir/$ipaName.ipa $path   #拷贝ipa文件
echo "复制$ipaName.ipa到${wwwIPADir}成功"
echo "~~~~~~~~~~~~~~~~~~~结束编译,处理成功~~~~~~~~~~~~~~~~~~~"
#open $wwwIPADir

#####开始上传,如果只需要打ipa包出来不需要上传,可以删除下面的代码
export LANG=en_US
export LC_ALL=en_US;
echo "正在上传到fir.im...."
#####http://fir.im/api/v2/app/appID?token=APIToken,里面的appID是你要上传应用的appID,APIToken是你fir上的APIToken
fir p $path
changelog=`cat $projectDir/README`
curl -X PUT --data "changelog=$changelog" http://fir.im/api/v2/app/appID?token=APIToken
echo "\n打包上传更新成功!"
rm -rf $buildAppToDir
rm -rf $projectDir/tmp

上面对关键代码都做了详细解释,下面只需要执行shell脚本就能打包上传了。

执行shell脚本,打包上传

  • 首先把这个脚本文件放到你的项目工程目录下

  • 然后打开终端,cd到脚本文件在的目录下,执行命名sh build_deployto_fir.sh

然后看到一下类似的画面说明上传成功:

这里写图片描述

执行脚本过程中遇到的问题和解决方案

fir: command not found

这个是因为没有安装fir-cil,导致找不到相应的命令行,只需要安装一下就行了,详情见上文写的如何安装fir-cil。

README: No such file or directory

那是因为你的脚本目录下没有README的文件,只需要建一个README的文件就行了,打开终端,cd到当前位置,然后执行下面的命令:

touch README

ERROR – : Token can not be blank

这个原因是因为你没有登录fir导致的,你执行这个脚本之前应该先登录一下fir,详情请看上文写的登录fir.im。

以上就是我对于打包上传到fir上的脚本使用的总结,如果大家有问题可以随时问我,谢谢大家的阅读。

脚本自动打包 使用shell脚本自动打包上传到fir.im上 第一步安装fir-cil $ ruby -v # > 1.9.3 $ gem install fir-cli 常见问题解决方案 第二步登录fir.im 在终端使用fir login API Token命令登录,API Token在fir官网获取.使用fir me查看登录状态. fir login API Token fir m 阅读详情

相关推荐

自动化iOS应用打包与分发流程

在本章中,我们详细了解了如何利用Python脚本自动化地将iOS应用上传至蒲公英和fir.im两个流行的测试平台。我们讨论了必要的账号配置,上传API接口的调用方法,以及接口交互和异常处理机制。自动化上传不仅节省了大量手动操作的时间,还为持续集成和持续部署流程提供了强大支持。本章我们详细介绍了如何实现一键发布后的邮件通知功能,包括邮件发送机制的介绍、SMTP服务器的配置与认证、邮件发送脚本的编写与集成,以及如何根据不同场景定制邮件内容和生成发送日志。

weixin_28771751的博客 1124

mac 上传iOS/安卓安装包到蒲公英或者fir分发平台shell脚本

上传蒲公英脚本 #!/bin/sh #上传的完整路径 allPath="/Users/user/Desktop/app.ipa" # 蒲公英 API_Key API_Key="XXXXXXX" # ============ 蒲公英 上传 ============ pgygerFunc(){ echo "所有参数 = $*" # echo "参数个数 = $#" # echo "查看方法返回值 = $?" allPath=$1 api_key=$2 if [ -e "${all

558

swift-PythoniOS自动打包脚本(包含上传到fir)

Python iOS 自动打包脚本(包含上传到fir)

iOS利用Shell脚本,一键打包发布到AppStore、蒲公英、Fir(附iOS持续集成总结)

    之前研究过用Jenkins搭建自动化打包平台(在本人博客里),用来给测试人员打包或者上传AppStore,但是这个相对有点复杂,最近在研究使用脚本文件来实现iOS的打包发布,实现一键持续集成的工作。使用的时候,只需要在控制台执行一下脚本文件,就可以完成编译、打包、发布的所有流程。    这里有一篇总结的很不错的博客,大家可以参考,我就不再重复解释了,链接如下(里边有使用介绍和脚本文件下载地...

大飞哥的专栏 6356

RC模型车多电机驱动方案:从电调PWM原理到四电机安全连接实战

在电机控制领域,PWM(脉冲宽度调制)是实现精确调速的核心技术。其原理是通过调节固定周期内高电平的脉宽来编码控制指令,进而驱动电子调速器(电调)改变输出功率。这项技术对于需要多电机协同工作的场景,如RC模型车的差速转向或重型负载驱动,具有关键价值。它能实现动力的精细分配与同步,提升车辆的可控性与通过性。在实际应用中,为确保系统稳定,必须关注电流分配与信号同步问题。例如,通过为每个电机配备独立电调并采用信号并联(Y线)的方式,可以构建可靠的四电机驱动系统。这种方案能有效避免因单个电调过载或电机反电动势不一致导

weixin_30664615的博客 381

WSL2下用QEMU模拟ARM开发板:从编译uboot到调试全流程(附常见错误解决)

本文详细介绍了在WSL2环境下使用QEMU模拟ARM开发板的完整流程,包括uboot编译、内核调试等关键步骤。通过QEMU模拟vexpress-a9开发板,开发者可以高效搭建嵌入式开发环境,解决常见错误并提升开发效率。

solidity8miner的博客 286

iOS Shell脚本自动打包

地址:iOS自动打包 参考:Python实现iOS自动化打包详解 中 基于编译的打包 步骤: 1.打开终端 1.1 输入: sh 和一个空格。 1.2 把文件 ‘iOSAutoPacking.sh’ 拖入终端。 2.输入打包文件路径 2.1 在项目的’Products’文件夹中找到以.app结尾的文件。 2.2 Show in Finder。 2.3 拖入终端。 ...

豪冷的博客 7469

利用DRONEKIT-SITL + MAVPROXY + QGroundControl模拟飞行

dronekit: 一种用于无人机控制的python库。 dronekit-sitl:一种本地仿真工具,相当于本地虚拟化了一个无人机。 mavproxy:数据转发软件(类似于插线板的感觉,一个输入,多个相同的输出)。打开一个Anaconda prompt 首先激活相应的环境 然后运行如下命令: 保持2中的Anaconda prompt处于运行状态,另打开一个Anaconda prompt窗口,运行如下命令: tcp:127.0.0.1:5760: SITL默认端口,作为mavproxy的输入,把输入数据转发

Done___的博客 4344

iOS 手把手教你shell脚本自动化打包

第一步:准备脚本文件,代码如下 #工程名(自定义) project_name=你的工程名 #打包模式 Debug/Release(自定义) development_mode=Release #scheme名(自定义,一般与工程名相同) scheme_name=你的工程名 #plist文件所在路径 exportOptionsPlistPath=./ExportOptions.plist #导出.ipa文件所在路径 exportFilePath=~/Desktop/$project_name-ipa

shuzhi57的博客 1154

电机控制必看!SVPWM谐波优化:5段式与7段式全参数对比测试

本文通过实测数据,对比分析了电机控制中5段式与7段式SVPWM控制算法的谐波性能。实验表明,7段式SVPWM在电流波形质量(THD)和低速性能上更优,而5段式SVPWM则在开关损耗和效率方面表现突出。文章为工程师在不同应用场景(如对噪音、效率或动态响应的侧重)下的算法选型提供了清晰的依据和实用的工程指南。

weixin_28331555的博客 178

01|无代码开发 | 如何使用Zion实现导航网站制作

以上就是我制作导航网站的心得,分享给大家,作为一个小白想要独立搭建一个网站还是比较困难的,而在Zion不仅可以用可视化的方法进行搭建,甚至还可以一键发布,不用考虑服务器域名啥的问题,真是太方便了。

2301_76262110的博客 1390

详解Shell脚本实现iOS自动化编译打包提交

前言 现在涉及到编译打包的工作主要是以下两个: 提交测试版本给测试同事 提交App Store审核 两个流程分别是: 修改证书和配置文件,然后「Product -> Archive」编译打包,之后在自动弹出的 「Organizer」 中进行选择,根据需要导出 ad hoc enterprise 类型的 ipa 包。等待导出之后再提交到Fir上,等Fir提交完成就需要...

weixin_30617695的博客 532

VBOX 3iS实战:如何用GNSS+IMU搞定车辆动态坡度测量(附避坑指南)

本文详细介绍了VBOX 3iS在车辆动态坡度测量中的高阶应用,通过GNSS+IMU融合技术和卡尔曼滤波算法,有效解决了传统测量方法在动态环境中的局限性。文章提供了设备配置、实战策略和数据后处理的实用指南,帮助工程师提升测量精度和效率。

weixin_42520796的博客 321

iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上-b

用fir.im测试已经好长时间了,感觉每次打包上传都很麻烦,想着是不是可以用脚本自动打包,在网上搜了一下确实有,下面总结一下如何使用脚本自动打包上传到fir.im,以及打包过程中遇到的问题和解决办法 相关资料和下载 首先是打包脚本的下载地址,这个是我找到的比较全的一个,里面有很多不同功能的shell脚本,亲测好用,传送门:https://github.com/heyuan110/Bas...

weixin_34393428的博客 124

Linux USB Gadget框架解析:从设备模拟到驱动开发实战

USB(通用串行总线)是现代计算机系统中应用最广泛的外设连接标准,其主从动态切换的特性使其在嵌入式系统中扮演着双重角色。与I2C、SPI等固定主从架构不同,USB设备需要同时支持主机(Host)和从机(Device)两种模式,这催生了Linux内核中独特的USB Gadget框架。该框架通过分层设计,将硬件控制器驱动(UDC)、功能逻辑(Function)和配置管理(Configfs)解耦,实现了灵活的设备模拟能力。在工程实践中,开发者可以利用Gadget框架快速实现U盘、网络适配器、串口转换器等常见USB

weixin_28007513的博客 561

WPF高级 | WPF 与数据库交互:连接、查询与数据更新

WPF高级 | WPF 与数据库交互:连接、查询与数据更新,在现代应用程序开发中,数据的存储和管理至关重要。Windows Presentation Foundation(WPF)作为一款强大的图形界面开发框架,常常需要与数据库进行交互,以实现数据的持久化存储、读取和更新。本文将深入探讨 WPF 与数据库交互的各个方面,包括数据库连接的建立、数据查询的执行以及数据更新的操作,并通过丰富的代码示例和详细的概念解释,帮助读者掌握这一关键技术。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 6万+

iOS一键搞定自动打包并发布到AppStore和Fir

日常编译打包工作主要是以下两个目的: 提交测试版本ipa给测试人员 配置好测试描述文件,然后Product -> Archive编译打包,选择Organizer,导出ad hoc 的 ipa 包。再上传到Fir等第三方平台上,然后通知测试同事进行测试。整个流程下来需要人工监守操作比较耗费时间。 提交ipa包到App Store已供审核

每天进步一点点 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

iOS开发进阶 - 使用shell脚本自动打包上传到fir上

用fir.im测试已经好长时间了,感觉每次打包上传都很麻烦,想着是不是可以用脚本自动打包,在网上搜了一下确实有,下面总结一下如何使用脚本自动打包上传到fir.im,以及打包过程中遇到的问题和解决办法 相关资料和下载 首先是打包脚本的下载地址,这个是我找到的比较全的一个,里面有很多不同功能的shell脚本,亲测好用,传送门 还有关于fir指令的一些介绍可以去这里查看,传送门

吴凯强的博客 2470

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IOS 通过脚本自动打包工具 webfrogs/xcode_shell

ios 开发通过xcode 打包其实效率不是太高,所以就有人,用shell 写了一个,自动打包,发邮件,等一系列便捷的服务。webfrogs/xcode_shell 源码下载地址,下载后请仔细阅读README.md文件,这里详细的告诉了你,webfrogs/xcode_shell使用方法。 如果还是不明白 ,我这就给你写几个简单的例子, 1.首选 将webfrogs/xcode_shell下载下

草帽的专栏 1526

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

iOS由传统打包上传到自动化打包上传

前言 在iOS开发中,我们常用的打包上传方式就是用Xcode的archive方式打包。到了测试阶段,需要频繁的打包提交到测试平台,整个流程包括:编译-打包-上传,整个过程需要我们去坚守每一步操作,提交app store同样免不了一系列复杂动手操作过程。因此,就研究了iOS自动化打包,通过使用shell脚本,输入命令,一键打包上传,提高工作效率。 在讲自动化打包之前,我们先看下我们传统的打包方式: ...

weixin_36218496的博客 634

ios 自动打包命令_iOS自动化打包 命令行打包+fir

作为开发人员,每次给测试打包是一件很痛苦的事情,所以本着懒惰的思想,我就在想,在我电脑证书都配备齐全的前提下,能不能用终端实现一键打包,并自动上传内测网站(如:蒲公英,fir等),并自动发邮件通知相关人员(这个功能我暂时未实现,希望知道的朋友能告诉我下怎么实现,在此谢过了!).通过网上的搜索,发现还真有这样的方法,但是所谓是,八仙过海各显神通,各种方法都有,有shell脚本的,有配置enkins,...

weixin_39792751的博客 284

iOS 自动打包发布到Fir和AppStore

特别说明:如果项目没有采用Cocoapods管理,没有.xcworkspace,只有xcodeproj;只需要将脚本中这句 xcodebuild \ archive -workspace ${project_path}/${project_name}.xcworkspace \ 这句替换成下面这样就ok了 xcodebuild \ archive -project ${proj...

weixin_30628077的博客 140

[Xcode]Xcode自动打ipa包脚本

打包脚本.sh文件 # !/bin/sh if [ ! -d ~/genParentPackage ];then mkdir -p ~/genParentPackage fi ROOT_PATH=~/genParentPackage #############安装brew和xctool############# if which brew 2>/dev/null; then echo

超越 1791

iOS自动化打包 xcodebuild

使用xcode自带的xcodebuild 命令通过脚本进行打包 打包->导出ipa, 两行关键的脚本代码 1.Archive xcodebuild archive -archivePath <archivePath> -project <projectName> -workspace...

weixin_33916256的博客 207

xcode 选择configuraftions 打包_分利宝IOS自动化打包

前言在iOS开发中,我们常用的打包上传方式就是用Xcode的archive方式打包。到了测试阶段,需要频繁的打包提交到测试平台,整个流程包括:编译-打包-上传,整个过程需要我们去坚守每一步操作,提交app store同样免不了一系列复杂动手操作过程。对此,我们研究了iOS自动化打包,通过使用shell脚本,输入命令,一键打包上传,提高工作效率。在了解自动化打包之前,我们先看下我们传统的打...

weixin_27102543的博客 378
上一篇: iOS开发小结 - 播放系统提示音使用总结(AudioToolbox)
下一篇: Swift学习笔记 - 位移枚举的按位或运算
W_C__L
W_C__L 领域专家: 移动开发技术领域 领域专家: 移动开发技术领域
博客等级 码龄14年 194粉丝 68原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值