iOS 制作自动打包脚本 Xcode8.3.2

本文包含以下内容:

前言

1.shell脚本的编写

2.xcodebuild命令

3.完整的可用示例

参考资料



前言

  做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文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>

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

method: (String) The method of distribution, which can 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 symbols in 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  || exit
echo ‘*** 清理完成 ***‘

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  || exit
echo ‘*** 编译完成 ***‘

echo ‘*** 正在 打包 ***‘
xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive -configuration ${development_mode} -exportPath ${exportFilePath} -exportOptionsPlist ${exportOptionsPlistPath} -quiet || exit

if [ -e $exportFilePath/$scheme_name.ipa ]; then
    echo "*** .ipa文件已导出 ***"
    open $exportFilePath
else
    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 || exit
    cp -r AutoPack/IconOfDebug/AppIcon.appiconset/ 项目根目录/Images.xcassets/AppIcon.appiconset || exit

    echo ‘* 已更改AppIcon 为:测试版 图标‘
}
useReleaseIcon(){

    rm -rf 项目根目录/Images.xcassets/AppIcon.appiconset || exit
    cp -r AutoPack/IconOfRelease/AppIcon.appiconset/ 项目根目录/Images.xcassets/AppIcon.appiconset || exit

    echo ‘* 已更改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 加载完毕!‘


参考资料: 

iOS自动打包并发布脚本

[iOS]从零开始写个自动打包IPA脚本

iOS 自动打包

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



Ficow原创,转载请注明出处:http://www.cnblogs.com/ficow/p/6823962.html

时间: 2024-08-08 17:03:37

iOS 制作自动打包脚本 Xcode8.3.2的相关文章

源码:自己用Python写的iOS项目自动打包脚本

http://www.cocoachina.com/ios/20160307/15501.html 什么?又要测试包! 做iOS开发几年了,每天除了码代码,改Bug之外,最让我烦恼的莫过于测试的妹子跑过来:“刚才的Bug都改完了吧,再打个包吧”.然而对于这个自己应尽的义务我已经烦透了,先不说要配置各种参数什么的,光是用xcode打包时候clean代码,验证证书就让我焦头烂额,时不时还要翻个墙甚至要手机开个热点才能打包成功.每次打包顺利的话,也要7~8分钟,每天n个包,想早点完成任务准时下班想都别

iOS 本地自动打包工具

1.为什么要自动打包工具? 每修改一个问题,测试都让你打包一个上传fir , 你要clean -> 编译打包 -> 上传fir -> 通知测试.而且打包速度好慢,太浪费时间了.如果有一个工具能自动的帮你做完上面所有的事情,岂不是快哉? 2.网上有那么多自动打包工具,我直接下载就行了为啥还要学习? 没错网上有很多打包工具,包括github上也有一些直接从github下载并打包上传的,但是他们的不一定适合你,首先下载下来要配置各种参数,不会配,还有网上大多是针对普通项目,但是我们项目是coc

IOS工程自动打包并发布脚本实现

http://blog.csdn.net/ccf0703/article/details/8588667 文章首发地址:http://webfrogs.me/2013/02/18/ios-automation/ 作者:webfrogs 转载请注明出处. 前言 IOS的开发过程中,当需要给测试人员发布测试包的时候,直接使用xcode来做的效率是非常低下的.尤其是当有一点小改动需要重新出包时,那简直是个折磨的人的工作.通过一番研究后,遂决定写一系列脚本,以代替人工完成打包和发布的过程. 目前脚本已经

自己写的一个IOS自动打包脚本工具

#!/bin/bash #----------------------------------------------------------------------------------# 功能:编译xcode项目并打ipa包# 使用说明:# 编译project# ipa-package <project directory> [-c <project configuration>] [-n] [-o <ipa output directory>]## 参数说明:

在Mac和Window上配置android自动打包

配置自动打包脚本,首先就是要配置gradle命令,这里你假设已经有了android开发环境. Window上配置gradle: 选中计算机=>右键属性=>高级系统设置=>高级=>环境变量=>系统环境变量:找到path:在最后跟添加你的gradle的bin路径: 我这里gradle的路径: C:\Users\Administrator\.gradle\wrapper\dists\gradle-3.3-all\55gk2rcmfc6p2dg9u9ohc3hw9\gradle-3.

ANT自动打包U3D安卓项目研究笔记

概述 因项目使用Atlassian Stash作为项目源码管理端,且其支持Ant命令自动编译,可使其根据最新的代码自动打包,故产生该研究Ant打包的任务.在此将研究过程及一些相关知识整理记录在此. 本文部分内容可以说就是Android和Ant自动打包的配置,只是在其基础上扩充了Unity3D的部分. 阅读本文需要:知道Android开发环境大概需要哪些东西,知道Unity3D编辑器的基本使用方法. 本文并不是系统学习Ant以及Android自动打包的文章,只是笔者通过网络搜索一系列文章,然后通过

【转】用PowerDesigner制作数据库升级脚本

[原创]用PowerDesigner制作数据库升级脚本 很多人使用PD的时候就问有没有制作自动升级脚本的功能.其实是有的. 操作原理: 1.保存原来的版本,另存为apm的文件,生成一个Archive Model. 2.生成升级脚本,需要选择原来的版本 操作步骤: 1.打开PDM文件,选择Save as .... 另存为,在弹出的窗口中选择apm的文件类型,输入文件名保存即可. 2.修改相关的数据模型的内容,然后保存. 3.选择DataBase菜单中的modify database... 菜单 4

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

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

用python编写ios工程自动编译、打包ipa等脚本

第一次使用python请先看:http://my.oschina.net/LangZiAiFer/blog/298763 代码管理我用的是Git: 工程clone如下: def gitClone(): os.system ('git clone https://[email protected]/xxx/goccia.git ~/desktop/20140804') return https://[email protected]/xxx/goccia.git是git服务器路径,不必care:~