自动打包iOS项目
基于Lexrus的博文iOS-makefile,本文对自动打包涉及到的操作步骤以及理论基础进行了适当的补充。
请在阅读本文前先阅读《iOS makefile》。文章地址:http://lextang.com/ios-makefile。
iOS makefile的当前版本暂只支持workspace,所以没有使用workspace的项目打包就会报错。如果你的project并没有使用workspace进行组织,那么你可以在Xcode中将当前project另存为workspace以创建workspace文档。你可以通过选择Xcode的File->Save As Workspace,然后将workspace文档保存到项目根目录下;你也可以单独创建一个workspace文档,然后在Project Navigator中右击,选择add file to "yourWorkspace",选择你需要添加的扩展名为.xcodeproj的project文件后,project就被加入到你的新workspace中了。
workspace是xcode 4.0引入的新特性,表面上它就是一个Xcode文档,文档指向当前workspace包含的project和其他的文件,但不包括数据。workspace和project之间是多对多的拥有关系。一个workspace可以包含多个项目,一个项目可以被多个workspace包含。如果在workspace中的一个A project拥有一个静态库,该静态库被当前同在workspace中B project链接引用。那么Xcode将在构建B project之前自动构建该静态库。即使B project的构建配置没有对链接库做显式的依赖。在Java中一个完整的构件过程包括:生成代码(相当于iOS中使用了ARC,会自动插入retain/release代码)、编译源文件、编译测试源文件、执行测试(单元测试,集成测试)、打包(生成jar,war,ejb-jar,ear)、运行健康检查(静态分析器,如Checkstyle,Findbugs,FMD,测试覆盖率,等等)、生成报告。(iOS的构建阶段包括:编译源文件、链接二进制文件和库(二进制文件是指那些已经被编译好的框架代码)、拷贝束资源。)使用workspace的另一个好处是如果多个项目使用同一个库,使用workspace不需要为每个项目都拷贝一份静态库文件(基于安全考虑,苹果不允许使用动态库,使用动态库apple store会拒绝你应用的上架申请。动态库犹似一个潘多拉盒,它可以在运行时被加载与卸载,你可以下载新的代码并执行。对于开发in-house的应用,技术上是可行的,事实上是苹果不允许apple store上架应用使用动态链接库,而操作系统一定是支持动态链接库的,越狱app就是利用的操作系统上的支持技术)。
那么静态库、动态库、框架三者之间有什么区别呢,静态库是一个代码单元,它在编译时被链接,且不可以发生改变。iOS静态库只能是代码,不可以是媒体资源,你可以使用media bundle添加媒体资源。动态库可以是代码单元或资源单元,它在运行时被链接,可以发生改变。只有苹果公司可以为iOS创建动态库。框架是一个已经编译好的代码集合,所以无法看到源代码,而静态库是可以看到所有的源代码。框架可分为静态框架和动态框架。你可以使用很多方法创建自己的静态框架,静态库构件工具:https://github.com/jverkoey/iOS-Framework。
iOS makefile脚本发送邮件功能使用的是第三方邮件服务Mailgun,使用Mailgun提供的API接口可以以编程的方式控制发送邮件的发送、接收、转发、邮件追踪。为了配置Mailgun的邮件列表和邮件域名。我们需要创建一个邮件域名和邮件列表,邮件域名可以选择自己的域名或者使用Mailgun的二级域名。邮件列表就是一个收件人邮件地址集合。我们将需要接收打包结果的邮箱录入邮件列表中。自动打包脚本不是将Mailgun的api key直接以明文的方式写在脚本中,而是读取keychain访问邮件的api key。所以在发送邮件之前,我们需要将得到的Maingun的Api key存入keychain中。打开keychain access,在分类下选择密码,点击底部的+号,注意keychain Item Name要和脚本配置文件要求的要一致,否则脚本访问不到密码,密码使用Mailgun的api key。配置界面如下图所示:
keyChain中配置API Key
.cfg配置实例参考
如下图所示,打包成功之后,可以选择iMessage或email的方式做OTA分发给测试人员,测试人员可以点击链接下载或扫描二维码进行安装,非常的方便。
发送iMessage消息进行安装
用我查查扫描邮件中二维码进行安装 前往选择安装
自动打包iOS项目的更多相关文章
- docker 运行jenkins及vue项目与springboot项目(三.jenkins的使用及自动打包vue项目)
docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...
- xcodebuild和xcrun实现自动打包iOS应用程序
随着苹果手持设备用户的不断增加,ios应用也增长迅速,同时随着iphone被越狱越来越多的app 的渠道也不断增多,为各个渠道打包成了一件费时费力的工作,本文提供一种比较智能的打包方式来减少其带来的各 ...
- 解放双手 | Jenkins + gitlab + maven 自动打包部署项目
前言 记录 Jenkins + gitlab + maven 自动打包部署后端项目详细过程! 需求背景 不会偷懒的程序员不是好码农,传统的项目部署,有时候采用本地手动打包,再通过ssh传到服务器部署运 ...
- Unity3D 自动打包整个项目(以AssetBundle实现)
原地址:http://blog.csdn.net/huang7jiao/article/details/18370653 需求: 在移动开发中,手动控制资源的加载.释放和热更新,是很有必要的. 而Un ...
- jenkins自动打包部署项目
首先去jenkins的官网下载安装包 https://jenkins.io/ 个人下载是长期稳定的那个版本,下载后,得到一个.msi的安装包: 点击进行安装,然后一直点击下一步. jenkins会 ...
- docker 运行jenkins及vue项目与springboot项目(二.docker运行jenkins为自动打包运行做准备)
docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...
- iOS 本地自动打包工具
1.为什么要自动打包工具? 每修改一个问题,测试都让你打包一个上传fir , 你要clean -> 编译打包 -> 上传fir -> 通知测试.而且打包速度好慢,太浪费时间了.如果有 ...
- ios自动打包-fastlane 安装、使用、更新和卸载
ios自动打包使用fastlane 1.首先安装xcode 首先检查是否已经安装 Xcode 命令行工具,fastlane 使用 xcodebuild 命令进行打包,运行 xcode-select - ...
- 40、IOS自动打包-Python脚本
第一种:基于编译的打包 编译工程--找到.app文件--新建Payload文件夹--拷贝.app到Payload文件夹--压缩成zip--更改后缀名为ipa--完成! 第二种(有问题,暂时不需要看) ...
随机推荐
- 细说git merge & git rebase
git merge和git rebase两个都是用来合并两个分支用的,在使用过程中,这两个概念容易混淆. 在此,对这两个git技巧的用法进行详细描述,希望能帮助一些热爱git的朋友. -------- ...
- 大话Git
Git是什么 Git是一个分布式版本控制系统.它可以很方便的记录你的每一次变动,而不需要每次都备份,还能让你和他人很方便的协同开发.这样你每次做了什么改动,瞄一眼就一清二楚了. -- 安装Git 从官 ...
- Window.open()方法参数详解
Window.open()方法参数详解 1, 最基本的弹出窗口代码 window.open('page.html'); 2, 经过设置后的弹出窗口 window.open('page.html ...
- MTK android 工程中如何修改照片详细信息中机型名
每一个项目的机型名都不相同,因此拍出来的照片需要更改详细信息中的机型名. 那么,具体在哪里修改照片详细信息机型名呢 路径信息:/ALPS.JB3.TDD.MP.V2_TD_xxx/mediatek/c ...
- C语言 百炼成钢10
//题目28:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第 //3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后 //问第一个人 ...
- Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux
我用过的编辑器不少,真不少- 但却没有哪款让我特别心仪的,直到我遇到了 Sublime Text 2 !如果说“神器”是我能给予一款软件最高的评价,那么我很乐意为它封上这么一个称号.它小巧绿色且速度非 ...
- 简谈Java的join()方法
join()是Thread类的一个方法.根据jdk文档的定义: public final void join()throws InterruptedException: Waits for this ...
- 20135220谈愈敏Blog8_进程的切换和系统的一般执行过程
进程的切换和系统的一般执行过程 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-100002 ...
- AutoMapper用法(转载)
申明 本文转载自http://www.qeefee.com/article/automapper 作者:齐飞 配置AutoMapper映射规则 AutoMapper是基于约定的,因此在实用映射之前,我 ...
- Object C学习笔记18-SEL,@ selector,Class,@class
本章是对上一章<<Object C学习笔记17-动态判断和选择器>>的一点补充,所以比较简单点. 一. SEL 类型 在上一篇介绍了几个方法,都只是介绍了其使用方式但是没有具体 ...