实例分析IOS实现自动打包

方式一: 使用xcodebuild命令

步骤

0. 准备工作:基础参数

# 项目名称,打包后生成 .ipa 文件的名称

projectName="JimuDudu"

# 项目目录(一般情况下,shell 脚本就在项目路径下)

workspacePath="/Users/apple/Documents/Projects/dudu/jimu-dudu-ios/jimu-dudu/"

# Archive 后,文件导出目录

archivePath="/Users/apple/Desktop/tmp/build/"

# 获取 shell 脚本所在目录

currentPath=$(cd `dirname $0`; pwd)

1. Build

xcodebuild -scheme ${projectName} -workspace "${workspacePath}${projectName}.xcworkspace" -configuration Release clean build

2. Archive

xcodebuild -scheme ${projectName} -workspace "${workspacePath}${projectName}.xcworkspace" -configuration Release archive -archivePath "${archivePath}${projectName}"

3. Export .ipa file

xcodebuild -exportArchive -archivePath "${archivePath}${projectName}.xcarchive" -exportPath ${archivePath} -exportOptionsPlist "${currentPath}/ADHocExportOptions.plist"

总结

TIPS

shell 脚本和 plist 文件在一个目录下(也可以不在一个目录,本示例是在一个目录下,一般情况,shell 脚本和 plist 文件都会在项目目录下。)

正常情况,shell 脚本和 plist 文件都会在项目目录下,所以 workspacePath 和 archivePath 等路径,都可以写成相对路径

编译前还有一些准备工作,比如拉取最新代码

这样打包过程很耗时,在本机上测试,大概需要26分钟!

这种方式,可能会跟随 Xcode 版本的升级而略有改变,否则就会报错。

方式二: 手动编译,自动打包

一般打测试包的方式

说明

手动编译,生成 .app 文件

把 .app 文件放在名字为 Payload 文件夹下

压缩文件夹,生成 .zip 文件

修改文件名:.zip -> ipa,打包完成

步骤

准备工作:修改 Xcode 中的配置

Build(command + B)

执行脚本,自动打包并生成 .ipa 文件

脚本简介

流程图

主要代码

# 创建 Payload 文件夹

payloadPath=${basicPath}/Payload

mkdir -p ${payloadPath}

# 移动 .app 文件到 Payload 目录下

cp -r ${appFileFullPath} ${payloadPath}

# 打包并生成 .ipa 文件

zip -q -r ${ipaFileName} ${payloadPath}

总结

TIPS

执行脚本时,可以传入 .app 文件所在路径,或者不传;不传的话,默认从当前路径获取,获取不到报错

执行脚本时,如果传入的参数不包含 .app 文件名,则需要手动输入,若输入错误,报错,终止程序。

一般而言,shell 脚本配置一次之后,就再也不需要修改。属于一劳永逸的事。

方式三: Product -> Archieve -> Export

一般打提交 App Store 包的时候,会这么操作。

您可能感兴趣的文章:

  • 详解IOS的Automatically Sign在设备上打包
  • iOS 缩小打包项目ipa大小的实现方法
  • iOS11&iPhoneX适配&Xcode9打包注意事项
  • iOS中使用Fastlane实现自动化打包和发布
  • iOS中打包上传常见的错误与解决办法
  • IOS 打包出现Missing Push Notification Entitlement 问题解决方案
  • IOS 静态库打包流程简化详细介绍
  • IOS 打包静态库详细介绍
(0)

相关推荐

  • iOS11&iPhoneX适配&Xcode9打包注意事项

    1,适配UITableView if#available(iOS11.0, *) { self.contentInsetAdjustmentBehavior= .never self.estimatedRowHeight=0 self.estimatedSectionHeaderHeight=0 self.estimatedSectionFooterHeight=0 }else{ } 2,适配UIScrollView if#available(iOS11.0, *) { scrollView?.

  • IOS 打包静态库详细介绍

    IOS 打包静态库详细介绍 一.前言 前段时间看的一本书上说:"隔着一段距离看,很多有趣的知识看起来都很唬人."比如说这篇我要总结的"静态库知识",在我初出茅庐的时候着实觉得那些后缀名为".frameworke".".a".".dylib"的文件很神秘,很高冷.那时我虽然知道只要导入一个库就能引用库里面很多封装好的东西,但对这个"库"究竟是什么"鬼",一直都是云里雾里

  • IOS 打包出现Missing Push Notification Entitlement 问题解决方案

    Missing Push Notification Entitlement 问题 最近打包上传是遇到一个问题: 描述: Missing Push Notification Entitlement - Your app includes an API for Apple's Push Notification service, but the aps-environment entitlement is missing from the app's signature. To resolve th

  • IOS 静态库打包流程简化详细介绍

    IOS 静态库打包流程简化 在iOS开发中,我们经常会遇到开发SDK的需求.开发好的静态库后需要手动的合并.a文件,然后再拷贝相关的头文件,接着把静态库和头文件放在同一个文件里面打包发送给SDK的使用者.本文将介绍如何使用脚本,简化这一连串的过程.为了照顾广大初学者,教程将会详细介绍打包的基本流程. 关于静态库和动态库区别,可以看我的另外一篇文章: iOS静态库和Framework区别 项目配置 新建一个名为TestSDK的静态库工程 然后点击Target下边的加号按钮,添加新的Target 选

  • iOS中使用Fastlane实现自动化打包和发布

    简介 Fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包.发布等工作,可以节省大量的时间. Github:https://github.com/fastlane/fastlane 官网:https://fastlane.tools/ 文档:https://docs.fastlane.tools/ 安装 1.首先要安装正确的 Ruby 版本.在终端窗口中用下列命令来确认: ruby -v 2.然后检查 Xcode 命令行工具是否安装.在终端窗口中输入命令:

  • iOS 缩小打包项目ipa大小的实现方法

    之前项目上线完全由技术老大搞,这次独立开发自己来,觉得自己的打包项目体积略大,网上搜索了一些比较不错的方法,这里总结下. 1.配置编译选项 (Levels选项内)Genetate Debug Symbols 设置为NO,这个配置选项应该会让你减去小半的体积. 2.舍弃架构armv7,因为armv7用于支持4s和3gs,4s是2011年11月正式上线,虽然还有小部分人在使用,但是追求包体大小的完全可以舍弃了. 3.编译的版本必须是发布版本, 4.查找内部使用到的第三方库,一方面可以进行删减代码,用

  • iOS中打包上传常见的错误与解决办法

    一.ERROR ITMS-90535 首先这个原因导入了其他第三方导致的问题,首先找到友盟库里面的腾讯API,找到其中的info.plist文件: 找到箭头所指向的一行,随后删掉 这一行 就可以了: 二.ERROR ITMS-90635 这个是由于项目中有使用到Cocoapods导入第三方的库使用bitcode造成的,此种错误我在网上找到了三种解决办法: 方法一 项目->targets->enable bitcode->no pods->project->enable bit

  • 详解IOS的Automatically Sign在设备上打包

    XCode8之后提供了一个Automatically Sign功能,这个功能给广大开发者提供了许多方便.可以非常方便的把app打包到真机上去测试,不用像原来那样需要手动注册,手动生成证书,生成Provision,还而还要交开发99才能操作这些.有了这个功能就不需要了,完全可以app开发好,测试好后,再花99申请开发者权限,再发布.接下来看如何操作: 1.打开Xcode,找到General->Signing,如下图 2.勾选Automatically manage signing 如果你还没有苹果

  • 实例分析IOS实现自动打包

    方式一: 使用xcodebuild命令 步骤 0. 准备工作:基础参数 # 项目名称,打包后生成 .ipa 文件的名称 projectName="JimuDudu" # 项目目录(一般情况下,shell 脚本就在项目路径下) workspacePath="/Users/apple/Documents/Projects/dudu/jimu-dudu-ios/jimu-dudu/" # Archive 后,文件导出目录 archivePath="/Users/

  • Yii2框架类自动加载机制实例分析

    本文实例讲述了Yii2框架类自动加载机制.分享给大家供大家参考,具体如下: 在yii中,程序中需要使用到的类无需事先加载其类文件,在使用的时候才自动定位类文件位置并加载之,这么高效的运行方式得益于yii的类自动加载机制. Yii的类自动加载实际上使用的是PHP的类自动加载,所以先来看看PHP的类自动加载.在PHP中,当程序中使用的类未加载时,在报错之前会先调用魔术方法__autoload(),所以我们可以重写__autoload()方法,定义当一个类找不到的时候怎么去根据类名称找到对应的文件并加

  • React Native开发中自动打包脚本的实例代码

    在日常的RN开发中,我们避免不了需要将我们编写的代码编译成安装包,然后生成二维码,供需要测试的人员扫描下载.但是对于非原生的开发人员来说,可能不知如何使用Xcode或者Android studio来导出ipa.apk安装包,为了解决非原生开发的同学们打安装包的痛苦,这里作者就提供一个shell脚本文件来实现一键式自动打包并生成安装二维码 (这里上传安装包生成二维码需要借助于三方平台fir.im) 打包脚本文件下载地址 https://github.com/guangqiang-liu/AutoP

  • Android与iOS包体优化及一键自动打包脚本

    目录 系统信息 介绍 安卓APK优化包体大小 一.原理与介绍 二.Flutter代码配置 三.Android代码配置 四.多渠道调试与打包指令 安卓一键打包脚本 一.简单介绍 二.项目路径结构 三.脚本内容 四.脚本使用步骤 苹果优化包体大小 一.常规优化(分发到 App Store 或者 打Ad hoc 测试包) 二.非常规优化 1.Flutter导出IPA(共4步) 2.第一次优化包体大小(共5步) 3.第二次优化包体大小(共6步) 4.一些说明 苹果一键打包脚本 一.简单介绍 二.项目路径

  • php自动载入类用法实例分析

    本文实例讲述了php自动载入类用法.分享给大家供大家参考,具体如下: <?php //function __autoload($class_name) { // require_once $class_name . '.php'; //} spl_autoload_register(array("core",'autoload'));//当实例化类的时候,自动调用core类中的autoload()方法来载入类 //也可以使用__autoload()来实现,但是php新版本建议使用

  • PHP 自动加载类原理与用法实例分析

    本文实例讲述了PHP 自动加载类原理与用法.分享给大家供大家参考,具体如下: 类的自动加载 (Autoloading Classes) 在编写面向对象(OOP) 程序时,很多开发者为每个类新建一个 PHP 文件. 这会带来一个烦恼:每个脚本的开头,都需要包含(include)一个长长的列表(每个类都有个文件). 在 PHP 5 中,已经不再需要这样了. spl_autoload_register() 函数可以注册任意数量的自动加载器,当使用尚未被定义的类(class)和接口(interface)

  • AngularJS的依赖注入实例分析(使用module和injector)

    本文实例分析了AngularJS的依赖注入.分享给大家供大家参考,具体如下: 依赖注入(DI)的好处不再赘言,使用过spring框架的都知道.AngularJS作为前台js框架,也提供了对DI的支持,这是JavaScript/jQuery不具备的特性.angularjs中与DI相关有angular.module().angular.injector(). $injector.$provide.对于一个DI容器来说,必须具备3个要素:服务的注册.依赖关系的声明.对象的获取.比如spring中,服务

  • Ajax异步提交数据返回值的换行问题实例分析

    本文实例分析了Ajax异步提交数据返回值的换行问题.分享给大家供大家参考,具体如下: 前面分析介绍了<Javascript基于AJAX回调函数传递参数>及<IE浏览器与FF浏览器关于Ajax传递参数值为中文时的区别>,学习了ajax回调函数传参与针对不同浏览器处理中文乱码问题的方法.这里就来分析一下ajax异步提交返回值中换行问题的处理技巧. 背景介绍: 需要实现的功能是:在下拉框中选择分类,提交到PHP根据选择的分类返回该分类下的成员名称,返回值各成员姓名以换行的形式显示到tex

  • RequireJS多页面应用实例分析

    本文是requireJS的一些知识点的总结,配上多页面应用中的实例分析. 本案例的目录结构如下: requireJS API的三个主要函数:define(创建模块),require(加载模块),config(配置) 1. HTML文件中加载JS文件 page1.html内容如下: <!DOCTYPE html> <html> <head> <title>Page 1</title> <script data-main="scrip

随机推荐