iOS-Jenkins脚本打包上传fir

来源:互联网 发布:加工中心编程视频教程 编辑:程序博客网 时间:2024/05/17 19:16

这次jenkins打包先介绍一下脚本的方式,配置jenkins的方法后续在补上。这种脚本的方式比较简单,要不要jenkins都可以,因为jenkins做的也就是执行几句命令和直接在终端执行没什么区别。

脚本涉及的工具:

  • xcodebuild
  • xcrun
  • fir-cli
    其中,xcodebuild和xcrun都是xcode自带的工具,如果没有可以通过下面命令安装,至于这两个工具中的各种命令在这里就不介绍了,有兴趣的同学可以用help查找命令

xcode-select –install

fir-cli
fir提供的脚本工具,主要利用它登录,上传ipa包用,同样可以help查找帮助,或者查看githudfir-cli

若没用fir命令:gem install fir-cli

脚本代码

#!/bin/shecho go to `dirname $0`cd `dirname $0`echo `pwd`dir=`pwd`appName="工程scheme"distDir="$dir/buildipa"configuration="Release"workspace="xxx.xcworkspace" #如果工程是用pod管理的话tool="xcodebuild"#pod update  如果有需要#git pull    如果有需要#清除上次的打包数据$tool clean -workspace $workspace -scheme $appName -configuration $configuration -sdk iphoneos SYMROOT=`pwd`/buildsif [ -d $distDir ];thenrm -rf "$distDir"mkdir $distDirelsemkdir $distDirfireleaseDir="builds/$configuration-iphoneos"rm -rf "$releaseDir"$tool -workspace $workspace -scheme $appName -configuration $configuration -sdk iphoneos build SYMROOT=`pwd`/buildsecho "xcode build completed-----------------"cp -R "$releaseDir/$appName.app" "$distDir/$appName.app"cd "$distDir/$appName.app"/usr/bin/xcrun -sdk iphoneos PackageApplication -v "$distDir/$appName.app" -o "$distDir/$appName.ipa"cd ..fir login fir的API Tokenfir publish "$appName.ipa"

把该填的几项填好,丢到工程目录下面,如果不想用jenkins的话,直接在终端进入该目录下,执行以下命令就可以了。
注:xxx是你的脚本名称。

sh xxx.sh或者赋予脚本权限再去执行chmod +x ./xxx.sh./xxx.sh

要配置jenkins的话也很简单,就一个脚本的配置,如下图,jenkins的安装以及单独配置jenkins不用脚本的方式下次再介绍。
这里写图片描述

坑点

另外说一个xcode 8.2以后的一个坑,看脚本里面有这样一句代码

/usr/bin/xcrun -sdk iphoneos PackageApplication -v "$distDir/$appName.app" -o "$distDir/$appName.ipa"

这句代码的意思就是利用xcode的PackageApplication工具把 .app文件打包成 .ipa文件,但是,xcode 8.2以后这个插件没有了,当你执行的脚本的时候会报这样的一个错误:

xcrun: error: unable to find utility “PackageApplication”, not a developer tool or in PATH。

意思是说没有PackageApplication这个工具,那么这个时候你就需要在老版本的/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin这个目录下面拷贝一份,到新版本的这个目录。如果你没有可以在附件中下载。
PackageApplication下载

到目前为止,你至少能直接用脚本或者jenkins来自动打包并上传到fir上面了,下面是后来的开发过程中遇到的问题以及优化工作,不过你完全可以按照上面的方法来打包!!!

后续开发补充

后续的开发中遇到了两个问题:
1. 在后来的开发中偶然看到打包输出的日志中有这么一行代码

warning: PackageApplication is deprecated, use `xcodebuild -exportArchive` instead.

看起来苹果已经把PackageApplication废弃了,xcode8.2之后不提供这个工具也是合理的,这个警告也清楚的告诉我们用 xcodebuild -exportArchive来代替。

2.在打包的时候我们用上述的方法,会发打的.app和.ipa包都会比用xcode打出来的大。虽说这个问题不影响我们正常的时候,但是始终感觉是个要解决的问题。查看输出日志发现这句日志:

+ /usr/bin/zip --symlinks --verbose --recurse-paths /Users/xxx/buildipa/xxx.ipa .

看到这句就能猜测xcrun打出的 .ipa 的方式,应该是压缩成zip之后改成ipa包的,所以打出的包比较大。
你也许会发现 .app包也是比xcode直接打出来的大,问题就出现在这句命令上面:

$tool -workspace $workspace -scheme $appName -configuration $configuration -sdk iphoneos build SYMROOT=`pwd`/builds

虽然我们用的是xcodebuild工具,但是并没有用archive命令,进入到工程中的build文件夹中,build的文件也不是.archive文件,而是很多文件在一起。由此可见.archive也是一种压缩形式,用这种格式,也是对内容的一次压缩。

基于上面的两个问题就开始研究xcodebuild -exportArchive看看是否在解决第一个问题的同时,解决第二个问题。

使用xcodebuild工具,主要用到两个方法:

xcodebuild archive -workspace "$workspaceName" -scheme "$scheme" -configuration "$configuration" -archivePath "$archiveBuildDir"#$exportOptionsPlist是对应使用的Plist的完整路径(包括文件名),exportIpaDir路径下生成.ipa文件xcodebuild -exportArchive -archivePath "$archiveBuildDir" -exportOptionsPlist "$exportOptionsPlist" -exportPath "$exportIpaDir"

xcodebuild -exportArchive一定是要有exportOptionsPlist的,创建一个plist文件,plist的key你可以用help来查看,我设置了两个key,其他的key你可以自己去设置与实践,文档中写的很清楚了。

methoddevelopment      compileBitcodeNO

method的可选值:app-store, ad-hoc, enterprise, development

附上脚本:

#!/bin/shecho go to `dirname $0`cd `dirname $0`echo `pwd`dir=`pwd`workspaceName="xxx.xcworkspace"scheme="xxx"configuration="Release"archiveBuildDir="$dir/build/$scheme.xcarchive"exportIpaDir="$dir/buildipa"exportOptionsPlist="$dir/adhocPlist.plist"echo "--------------------Product -> Archive--------------------"xcodebuild archive -workspace "$workspaceName" -scheme "$scheme" -configuration "$configuration" -archivePath "$archiveBuildDir"echo "--------------------xcode Archive completed-----------------"#exportOptionsPlist是对应使用的Plist的完整路径(包括文件名),exportIpaDir路径下生成.ipa文件xcodebuild -exportArchive -archivePath "$archiveBuildDir" -exportOptionsPlist "$exportOptionsPlist" -exportPath "$exportIpaDir"cd "$exportIpaDir"fir login xxxfir publish "$scheme.ipa"
原创粉丝点击