iOS进阶 - Xcode自动打包ipa并上传到fir.im

感谢大神@shupengzhang的指导,感谢网上大神的文章,那么我们进入正题!

引用文章以及文章内的传送门:http://blog.csdn.net/wang631106979/article/details/52299083

归纳总结,简化步骤,希望能帮助大家。

(PS:我们不生产脚本,我们只是搬运工)

(PS2:1.随着Xcode的升级,脚本可能需要修改,2.fir.im现在需要实名,需要实名后才可以上传。)

废话篇:

  文章主内容分两部分:1.打包(双击鼠标即可完成ipa包)

                                     2.上传fir.im(可选操作,双击鼠标,用于生成其他用户可安装的二维码)

        打包:终端运行shell脚本即可,一键执行。解决Xcode打包时繁琐的操作,任何更改,轻轻一点,即可完成。编译过程,一目了然,失败错误,直观显示。

        上传:可选操作,直接扫码安装,之前除了扔一个ipa包给测试(添加UDID),还有就是真机安装,真的很麻烦。(没有网络就爱莫能助了)

        本文只介绍方法,不提供原理分析,例如:上传fir.im为何可以直接安装使用?实质上,好比企业级应用,fir.im自建了一个内部企业账号,你在点击安装时,获取了你的UDID添加为企业内部成员,实现了内测功能。具体可以自己去看相关资料:iOS App内测分发教程       

那我们真正的进入正题(前面是骗你的,别打我~)!!!

内容概要:     

材料介绍(主要4个东西,具体操作和步骤会在下方分条目说明):

打包:1.pack.sh(打包与上传的脚本) 2.packageApplication-master(打包工具)

上传:3.fir.im (网站应用生成)4.fir-cli (上传时需要的环境)

下载传送门:pack.sh 与 packageApplication-master  密码:mt7q (链接:https://pan.baidu.com/s/1miOLSDE 密码:mt7q)

(说明:pack.sh只负责打包,pack&upload.sh打包且上传,需要更改id和token,如何操作请继续以下内容。)

上传传送门:fir.im内测分发 、fir-cli环境安装 

打包相关:(具体后续补充)

步骤:

1.拷贝pack.sh(pack&upload.sh)到工程目录下


iOS进阶 - Xcode自动打包ipa并上传到fir.im_第1张图片
说明:普通工程与cocoapods工程都可以!!!

附录:pack.sh 源码(copy自大神) (下载不下来的童鞋,直接这里拷贝生成即可。)


#/bin/bash: bin/bash: No such file or directoryuthor:Bruce http://www.heyuan110.com

#Update Date:2015.06.23

#Use:命令行进入目录直接执行sh Build+DeployToFir.sh即可完成打包发布到fir.im

cd `dirname $0`

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

projectName2=`find . -name *.xcworkspace | awk -F "[/.]" '{print $(NF-1)}'` #项目名称

if [ "$projectName" = "$projectName2" ]; then

isWorkSpace=true

else

isWorkSpace=false

fi

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/59c4aec9548b7a73bd0002fa?token=804de2e8d3a43c3b04199ba29ad39378

#echo "\n打包上传更新成功!"

#rm -rf $buildAppToDir

#rm -rf $projectDir/tmp


pack.sh 源码说明


iOS进阶 - Xcode自动打包ipa并上传到fir.im_第2张图片
用Xcode打开,或者其他打开,进行编辑


iOS进阶 - Xcode自动打包ipa并上传到fir.im_第3张图片
pack.sh和pack&upload.sh文件说明

2.解压PackageApplication,查看README.md,拷贝文件到指定目录下


iOS进阶 - Xcode自动打包ipa并上传到fir.im_第4张图片
解压后的PackageApplication文件和使用说明README.md


iOS进阶 - Xcode自动打包ipa并上传到fir.im_第5张图片
快速进入目录:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin


iOS进阶 - Xcode自动打包ipa并上传到fir.im_第6张图片
最终效果

3.新建的工程,请确保代码正常运行,选择了team,不报错,(Xcode 9去除Main.storyboary 和LaunchScreen.storyboard的 safe area 的勾选。)


iOS进阶 - Xcode自动打包ipa并上传到fir.im_第7张图片
确认工程设置(这样才能正常打包)
iOS进阶 - Xcode自动打包ipa并上传到fir.im_第8张图片
去除 safe area
iOS进阶 - Xcode自动打包ipa并上传到fir.im_第9张图片
Xcode 9去除safe area

4.使用终端打开方式打开 pack.sh


iOS进阶 - Xcode自动打包ipa并上传到fir.im_第10张图片
用终端运行pack.sh开始打包

5.自动生成了build文件夹,里面包含打包后的所有信息。(不用了就手动删除,解shell最后的移除注释,可以成功后自己删除)。

iOS进阶 - Xcode自动打包ipa并上传到fir.im_第11张图片
成功打包出可用的ipa了

如果你不需要上传,到这里就可以结束了!


问题:可能出现编译失败的问题( tool 'xcodebuild' requires Xcode, but active developer directory '/Library/……)

解决:终端输入 sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/

上传相关:(具体后续补充)

手动上传:

(这个我就不说了,直接在fir.im中上传ipa即可,然后给出二维码,扫的人都可以直接安装使用。)

自动上传步骤:

1.注册fir.im 并生成token 和 id (id的生成目前只会先拖一个打包好的ipa进去就会生成了)

生成id和token 

iOS进阶 - Xcode自动打包ipa并上传到fir.im_第12张图片
上传ipa

上传ipa有可能失败,原因打包方式不对,请选择Ad Hoc

iOS进阶 - Xcode自动打包ipa并上传到fir.im_第13张图片
AD Hoc

查看应用ID

iOS进阶 - Xcode自动打包ipa并上传到fir.im_第14张图片
查看应用ID

生成token

iOS进阶 - Xcode自动打包ipa并上传到fir.im_第15张图片


2. fir-cli环境安装 

常见问题:

1.ERROR:  While executing gem ... (Errno::EACCES)

Permission denied  - /Users/

解决办法:命令前加 sudo

2.ERROR:  While executing gem ... (OpenSSL::SSL::SSLError) hostname "gems.ruby-china.org" does not match the server certificate’ 

解决办法:移除 gem sources –remove https://ruby.taobao.org/

添加新源

sudo gem sources -a https://gems.ruby-china.org/

如果还出现这个错误

移除Https

sudo gem sources --remove https://gems.ruby-china.org/

添加http

sudo gem sources -a http://gems.ruby-china.org/

执行命令:gem install fir-cli 安装即可。

确认安装成功:终端命令 fir login 你的token 获取到你的信息即成功了。

3.选择用xcode打开pach&upload.sh,修改 id为自己的应用id,修改token为你自己的id。

iOS进阶 - Xcode自动打包ipa并上传到fir.im_第16张图片
pack.sh和pack&upload.sh文件说明

4.使用终端打开方式打开 pach&upload.sh

5.自动上传成功(也生成了build文件夹,里面包含打包后的所有信息。)


iOS进阶 - Xcode自动打包ipa并上传到fir.im_第17张图片
成功打包

尽情的使用吧!如果还有疑问,或者遇到问题,欢迎留言(不能及时回答的,请见谅)

你可能感兴趣的:(iOS进阶 - Xcode自动打包ipa并上传到fir.im)