ios 自动打包命令_iOS 制作自动打包脚本 Xcode8.3.2

本文包含以下内容:

前言

做iOS开发,打包APP是比较频繁的事情,每次都手动去配置一堆东西确实是比较乏味。

另外,我目前负责维护的APP在发布时,不同的Mode设置不同的AppIcon和BundleID,

所以要是可以简单执行一个脚本就完成打包的各种配置,那就轻松了!

于是乎,我就在网上学习了一下实现自动打包的方法,但是好多都是老版本的教程。

所以我打算参考别人的教程,然后自己也研究研究,再把研究的结果和大家分享一下。

不喜勿喷哈,但是如果有好的建议,也欢迎大家提出!

Okay,follow me !

1.shell脚本的编写

这段时间我学了学Go语言,也买了个阿里云服务器来捣鼓,

然后就很自然地学了一些Linux指令和shell脚本编写相关的知识。

突然发现,我们做iOS开发的也最好去学学后端、Linux指令和shell脚本编写。

为什么呢?

a) 学后端,你会想办法去学习数据库优化,写出更高效的SQL语句;

b) 学后端,你会考虑到安全问题,写出稳健性更好的代码;

c) 学后端,你会去学很多极其实用的Linux命令,这样有助于你更好地使用你的macbook,因为很多命令在macbook上也是可以用的,这样其实也丰富了你的基础知识;

d) 学后端,你可能还得学习写shell脚本来完成一些繁杂的工作,而学会shell脚本的编写将让你受益终生;

e) shell脚本强大、易学、易用;

这里附上一个Shell脚本学习网站,强大、易学、易用,请相信我!😄

2.使用xcodebuild命令进行打包

打开终端,输入 man xcodebuild ,回车:

这里有说明命令的用法,如果英语读起来吃力,可以复制到谷歌翻译:

大意就是你可以使用xcodebuild命令来build project或者workspace。

如果使用了Cocoapods,build的就一定是workspace了。

可以使用-list, -showBuildSettings, -showsdks, -usage, and -version这些命令来查看一些相关的信息。

只是通过这些命令来查看对应的配置信息而已,这些命令对于打包不会产生什么影响。

注意:以下示例shell脚本代码中的变量都需要自定义并赋值!

【清理build工作目录】在项目根目录执行:

clean -configuration ${development_mode} || exit

【打包】在项目根目录执行:

xcodebuild \

archive-workspace ${project_path}/${project_name}.xcworkspace \-scheme ${scheme_name} \-configuration ${development_mode} \-archivePath ${build_path}/${project_name}.xcarchive || exit

archive 指明操作是打包;

-workspace 指明需要打包的是一个workspace而不是project,

如果是打包project,这里的路径和问价明就更改为对应的project即可;

-scheme 一般和项目同名;

-configuration 指明打包模式是Debug还是Release;

-archivePath 指明打包操作的路径;

|| exit 指明如果这一条命令执行失败,则退出当前shell;

【导出安装包】在项目根目录执行:

xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \-configuration ${development_mode} \-exportPath ${exportFilePath} \-exportOptionsPlist ${exportOptionsPlistPath}|| exit

有一些配置项和上面的 xcodebuild archive 是相同的,所以需要两个命令的参数匹配

-exportPath 指明.ipa文件到处的路径;

-exportOptionsPlist 指明exportOptions.plist 文件的位置,这个文件是-exportArchive必需的参数;

实测exportOptions.plist文件里可以什么都不配置,

只要Xcode的project或者workspace里设置好了对应参数就好!

exportOptions.plist文件内容:

如果通过Xcode打开这个exportOptions.plist文件,你也可以为其配置以下内容(资料来源):

method: (String) The method of distribution, whichcan be set as any of the following:

app-store

enterprise

ad-hoc

development

teamID: (String) The development program team identifier.

uploadSymbols: (Boolean) Option to include symbolsin the generated ipa file.

uploadBitcode: (Boolean) Option to include Bitcode.

3.完整的可用示例(加入了-quiet参数,只输出错误和警告信息):

#! /bin/bash

# created by Ficow Shen

#工程绝对路径

project_path=$(pwd)

#工程名

project_name=自定义

#打包模式 Debug/Release

development_mode=Debug

#scheme名

scheme_name=自定义

#build文件夹路径

build_path=${project_path}/build

#plist文件所在路径

exportOptionsPlistPath=${project_path}/exportOptions.plist

#导出.ipa文件所在路径

exportFilePath=${project_path}/ipa/${development_mode}echo '*** 正在 清理工程 ***'xcodebuild \

clean-configuration ${development_mode} -quiet ||exitecho '*** 清理完成 ***'

echo '*** 正在 编译工程 For'${development_mode}

xcodebuild \

archive-workspace ${project_path}/${project_name}.xcworkspace \-scheme ${scheme_name} \-configuration ${development_mode} \-archivePath ${build_path}/${project_name}.xcarchive -quiet ||exitecho '*** 编译完成 ***'

echo '*** 正在 打包 ***'xcodebuild-exportArchive -archivePath ${build_path}/${project_name}.xcarchive \-configuration ${development_mode} \-exportPath ${exportFilePath} \-exportOptionsPlist ${exportOptionsPlistPath} \-quiet ||exitif [ -e $exportFilePath/$scheme_name.ipa ]; then

echo "*** .ipa文件已导出 ***"open $exportFilePathelse

echo "*** 创建.ipa文件失败 ***"

fi

echo '*** 打包完成 ***'

注意:

a.当需要输入的shell命令过长时,可以用\来进行合理的换行分隔;

b.如果需要打包的是project,则在archieve中将-workspace替换为-project,

然后将.xcworkspace的路径替换为.xcodeproj的路径;

可供参考的建议:

a.在项目根目录新建一个AutoPack目录,将所有脚本放置到这个目录中,

打包完成后的.ipa文件也导出到这个目录里,便于统一管理;

b.如果需要替换BundleID,用git先保存项目的当前状态,然后去修改Bundle Identifier,

这时候可以通过git查看修改记录,然后就知道BundleID的修改该如何写脚本来执行了;

c.如果需要替换程序图标,直接删除Images.xcassets中的AppIcon.appiconset,

然后复制新的进去即可,连同Contents.json文件也一起替换掉;

d.可以将一些操作封装为函数便于重用,可以在某个文件中使用source命令将函数体所在的文件包含进来;

以下是一些可供参考的示例脚本,请注意命令内部的空格分隔!

替换图标的示例脚本:

#! /bin/bash

# created by Ficow Shen

useDebugIcon(){rm -rf 项目根目录/Images.xcassets/AppIcon.appiconset ||exitcp -r AutoPack/IconOfDebug/AppIcon.appiconset/ 项目根目录/Images.xcassets/AppIcon.appiconset ||exitecho '* 已更改AppIcon 为:测试版 图标'}

useReleaseIcon(){rm -rf 项目根目录/Images.xcassets/AppIcon.appiconset ||exitcp -r AutoPack/IconOfRelease/AppIcon.appiconset/ 项目根目录/Images.xcassets/AppIcon.appiconset ||exitecho '* 已更改AppIcon 为:正式版 图标'}echo 'changeAppIcon.sh 加载完毕!'

替换BundleID的示例脚本:

#! /bin/bash

# created by Ficow Shen

useDebugBundleID(){

cd 项目根目录.xcodeproj/#sed -i 直接修改源文件,'' 备份文件名, 's/要被取代的字串/新的字串/g', 需要设置bundleID的文件

# 假设com.a.a是测试环境使用的,com.b.b是正式环境使用的sed -i '' 's/com.a.a/com.b.b/g' project.pbxproj ||exit

cd ..echo '* 已更改bundle ID 为:com.b.b'}

useReleaseBundleID(){

cd 项目根目录.xcodeproj/

sed -i '' 's/com.b.b/com.a.a/g' project.pbxproj ||exit

cd ..echo '* 已更改bundle ID 为:com.a.a'}echo 'editBundleID.sh 加载完毕!'

参考资料:

-- 感谢以上文章作者的热心分享!😄

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值