参考:

打包的具体操作步骤:

  https://www.jianshu.com/p/6a0aa8cd2e97

打包时使用到的参数详解,参考这篇:

  https://debugtalk.com/post/iOS-Android-Packing-with-Jenkins-details/index.html

xcodebuild命令详解:

  https://www.jianshu.com/p/770d5df137bf

注意:

补充一点:

  xcodeproj和xcworkspace的区别是:xcworkspace使用了cocoapods来管理第3方库

  采用Cocoapod管理项目依赖,每次拉取最新代码后直接编译可能会报错。这往往是因为其他同事更新了依赖库(新增了第三方库或升级了某些库),而本地还采用之前的第三方库进行编译,从而会出现依赖库缺失或版本不匹配等问题。

  应对的做法是,在每次build之前都更新一下Cocoapod。

# Update pod repository
pod repo update
# Install pod dependencies
pod install

  配置完后,先进行构建 ,可以 拉到代码 再进行第2步的修改

  可以看到已经将代码 clone到本地了

在执行正式的脚本前,要做一些准备工作:

ios使用pods管理第三方库,每次构建job时,需要先更新pods库

。和python中用pip管理第3方库类似。不更新第3方库,将导致程序中依赖第3方库的功能不可用

export LANG=en_US.UTF-8
# xcworkspace文件所在目录
TARGET_PATH="trunk/5iwork/ios"
#Podfile路径
PODFILE=${WORKSPACE}/${TARGET_PATH} cd ${PODFILE} echo -e "============Update pod repository============"
pod repo update echo -e "============Install pod dependencies============"
echo ${PODFILE}
pod install

注意这些命令要在项目目录xcworkspace文件所在目录执行

打包脚本:

## !/bin/sh
## 项目名
TARGET_NAME="cbs_new5iwork"
## xcworkspace文件所在目录
TARGET_PATH="trunk/5iwork/ios"
## Scheme名
SCHEME="cbs_new5iwork"
##=======================
## 编译类型
BUILD_TYPE=staging #jenkins布署环境,通过代码配置的:打包uat时选择的是staging|线上对应的是Release,Release包需要开发打包
#BUILD_TYPE="Release" #测试编译类型
## 当前目录
SORCEPATH=${WORKSPACE} #jenkins job配置目录
#SORCEPATH="/Users/5i5j/Desktop" #测试路径
# workspace名
SPACE=${WORKSPACE}/${TARGET_PATH}/${TARGET_NAME}.xcworkspace
##xcarchive文件的存放路径
ARCHIVEPATH=${SORCEPATH}/build/${SCHEME}.xcarchive
## ipa文件的存放路径
EXPORTPATH=${SORCEPATH}/build/${SCHEME}
## ExportOptions.plist文件的存放路径
#EXPORTOPTIONSPLIST=$SORCEPATH/build/ExportOptions.plist
EXPORTOPTIONSPLIST=${WORKSPACE}/${TARGET_PATH}/cbs_new5iwork/Resources/ExportOptions.plist ## 导出后的ipa路径
EXPORTPATHIPA=${SORCEPATH}/build/${SCHEME}/${SCHEME}.ipa ## 清理老的xcarchive文件
rm -rf ${ARCHIVEPATH} echo -e "============First Build Clean============"
## 清理缓存
xcodebuild clean -workspace ${SPACE} -scheme ${SCHEME} -configuration ${BUILD_TYPE} echo -e "============Build Clean============"
## 输出关键信息
echo -e " TARGET_NAME : ${TARGET_NAME}"
echo -e " BUILD_TYPE : ${BUILD_TYPE}"
echo -e " SORCEPATH : ${SORCEPATH}"
echo -e " ARCHIVEPATH : ${ARCHIVEPATH}"
echo -e " EXPORTPATH : ${EXPORTPATH}"
echo -e " EXPORTOPTIONSPLIST : ${EXPORTOPTIONSPLIST}" echo -e "============Build Archive============" ## 导出archive包
xcodebuild archive -workspace ${SPACE} -scheme ${SCHEME} -archivePath ${ARCHIVEPATH} -configuration ${BUILD_TYPE} echo -e "============Build Archive Success============" echo -e "============Export IPA============" ## 导出IPA包
xcodebuild -exportArchive -archivePath ${ARCHIVEPATH} -exportPath ${EXPORTPATH} -exportOptionsPlist ${EXPORTOPTIONSPLIST} echo -e "============Export IPA SUCCESS============" ## 编译完成时间 20181030_0931
BUILD_DATE="$(date +'%Y%m%d_%H%M')" ## info.plist路径
PROJECT_INFOPLIST_PATH="${SORCEPATH}/${TARGET_PATH}/${TARGET_NAME}/Info.plist"
## 取版本号
BUNDLESHORTVERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${PROJECT_INFOPLIST_PATH}")
## 取build值
VERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${PROJECT_INFOPLIST_PATH}")
## ipa更名规则 项目名V版本_年月日_时分
IPANAME="${TARGET_NAME}V${BUNDLESHORTVERSION}_${BUILD_DATE}.ipa"
## 更名后ipa路径
EXPORTPATHNEWIPA=${EXPORTPATH}/${IPANAME} echo -e "============Export end :${BUILD_DATE}============"
echo -e "============IPA Old Name: ${EXPORTPATHIPA}============"
echo -e "============IPA New Name: ${EXPORTPATHNEWIPA}============" ## IPA更名
cp $EXPORTPATHIPA $EXPORTPATHNEWIPA echo -e "============Create New Name Success============" ## 删除老IPA
##rm $EXPORTPATHIPA ##echo -e "============Delete Old Name Success============"

iOS 命令行打包--xcworkspace的更多相关文章

  1. mac下使用命令行打包出现bash gradle command not found的解决方案

    命令行打包的时候出现 bash gradle command not found这个问题,主要是因为gradle环境丢失.需要重新配置gradle的环境变量. 1. gradle路径的查找 然后gra ...

  2. android 7.0 多渠道打包 - 美团开源工具Walle 命令行打包

    在Android 7.0(Nougat)推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式(美团Android自动化之旅-生成渠道包)已经行不通了,对此美 ...

  3. IOS 命令行编译

    转自:简书 IOS 命令行编译   发表于 IOS2013-08-17 07:07 字数: 583 阅读量: 61 This document will note about the ios comm ...

  4. IOS使用命令行打包

    1.安装证书 develop:调试证书,包含调试信息 安装时需要证书已加入设备UDID或是越狱设备才能安装. distribution:正式证书,发布到appstore所用,屏蔽了调试信息,要想测试安 ...

  5. xcodebuild命令行打包发布ipa

    配置好证书,然后在命令行转到项目目录 1.清除 EthantekiiMac:CTest ethan$ xcodebuild clean 2.编译 EthantekiiMac:CTest ethan$ ...

  6. 使用命令行打包 nuget 包

    对于那些不打算涉及这么复杂而又想制作自己的 nuget 包的园友们,我是推荐使用 Nuget Package Explorer 来制作的.关于这个图形化的 nuget 包管理软件的使用,博客园内有相关 ...

  7. [原] Android自动打包之命令行打包

    Android自动打包流程详细图: 总结为以下几个步骤: 1. 生成R文件 2. Java代码编译成class文件 3. class文件生成dex文件 4. 打包资源 5. 生成apk 6. 创建密匙 ...

  8. Unity命令行打包

    http://www.66acg.com/?post=137 补充 unity编辑器端获取打包命令行自定义参数,这个可以获取到所有打包时的参数 string[] runArgs = System.En ...

  9. Maven环境配置及命令行打包

    一配置环境变量 下载 apache-maven-3.2.5压缩包解压到本地  F:\apache-maven-3.2.5 配置MAVEN_HOME环境变量F:\apache-maven-3.2.5如图 ...

随机推荐

  1. 移动前端不得不了解的Meta标签

    http://ghmagical.com/article/page/id/PSeJR0rPd34k

  2. JS事件流、事件监听、事件对象、事件委托

    JS事件流: 01.DOM级别和DOM事件 02.JS事件流:页面中接收事件的顺序 事件冒泡阶段-->处于目标阶段-->事件捕获阶段 (事件捕获总发生在事件冒泡前面) 03.捕获:从外向里 ...

  3. Ruby下安装cocoapods

    常规安装:(文末:特殊安装) 注: 1.Mac OS X EI Capitan 10.11中需要更改安装路劲: sudo gem install -n /usr/local/bin cocoapods ...

  4. Docker下载镜像并创建容器运行

    在linux系统中安装完成docker后,我们开始进行docker的镜像.容器的使用. 在使用docker时,首先要明确的两个概念:image(镜像) 与  container (容器) image: ...

  5. L3-006. 迎风一刀斩

    迎着一面矩形的大旗一刀斩下,如果你的刀够快的话,这笔直一刀可以切出两块多边形的残片.反过来说,如果有人拿着两块残片来吹牛,说这是自己迎风一刀斩落的,你能检查一下这是不是真的吗? 注意摆在你面前的两个多 ...

  6. linux shell 命令笔记

    标准输入.标准输出.标准错误 File descriptors are integers associated with an opened file or data stream. File des ...

  7. Spring Boot整合tk.mybatis及pageHelper分页插件及mybatis逆向工程

    Spring Boot整合druid数据源 1)引入依赖 <dependency> <groupId>com.alibaba</groupId> <artif ...

  8. 【UOJ#207】共价大爷游长沙

    题目链接 题目描述 火车司机出秦川,跳蚤国王下江南,共价大爷游长沙.每个周末,勤劳的共价大爷都会开车游历长沙市. 长沙市的交通线路可以抽象成为一个 \(n\) 个点 \(n−1\) 条边的无向图,点编 ...

  9. 运算符、流程控制(if、while)笔记

    目录 算术运算符 比较运算符(返回一个bool值) 逻辑运算符(把多个条件同时叠加) 赋值运算符 身份运算符 位运算符 成员运算符 python运算优先级 流程控制:向一个方向变化 if判断 单分支结 ...

  10. 【leetcode】Decode Ways

    题目如下: 解题思路:这个题目的本质是一个爬楼梯问题,在爬楼梯问题中,每次可以选择走一步或者两步.而本题也是一样的,解码的时候选择解码一个字符或者两个字符,但是加大了一点点难度,要考虑这些情况.1,Z ...