自动打包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--完成! 第二种(有问题,暂时不需要看) ...
随机推荐
- U3D5.3.5f Monodevelop 仅支持到.NET 3.5
2016年12月2号:发现这个标题是错误的,可以在monodevelop中选择.NET的版本,如下:打开solution,右击 Assembly-CSharp,options, build, gene ...
- main函数中argc和argv含义
在main函数中经常可以看到int main(int argc, char ** argv)的函数头,这里的形参int argc, char ** argv究竟是啥含义呢? &1 int ar ...
- 在opencv3中的机器学习算法
在opencv3.0中,提供了一个ml.cpp的文件,这里面全是机器学习的算法,共提供了这么几种: 1.正态贝叶斯:normal Bayessian classifier 我已在另外一篇博文中介 ...
- Android 动画之TranslateAnimation应用详解
TranslateAnimation比较常用,比如QQ,网易新闻菜单条的动画,就可以用TranslateAnimation实现, 通过TranslateAnimation(float fromXDel ...
- windows live writer 尝试登陆时发生意外错误,导致无法发表博客解决方案
刚用windows live writer发表博客, 但是出现如下提示: 尝试登陆时发生意外错误: 网络连接错误--尝试连接到一下日志时出错: http://www.cnblogs.com//xxxx ...
- linux内核分析 期中总结
LINUX内核分析 链接汇总 LINUX内核分析第一周学习总结——计算机是如何工作的 LINUX内核分析第二周学习总结——操作系统是如何工作的 LINUX内核分析第三周学习总结——构造一个简单的Lin ...
- 【总结】学习Socket编写的聊天室小程序
1.前言 在学习Socket之前,先来学习点网络相关的知识吧,自己学习过程中的一些总结,Socket是一门很高深的学问,本文只是Socket一些最基础的东西,大神请自觉绕路. 传输协议 TCP:Tra ...
- 关于python中PIL的安装
python 的PIL安装是一件很蛋痛的事, 如果你要在python 中使用图型程序那怕只是将个图片从二进制流中存盘(例如使用Scrapy 爬网存图),那么都会使用到 PIL 这库,而这个库是出名的难 ...
- 那天有个小孩跟我说LINQ(八)学会Func
文章已经迁移到:http://www.ayjs.net/2013/08/68/ 文章已经迁移到:http://www.ayjs.net/2013/08/68/ 文章已经迁移到:http://www.a ...
- Bootstrap3.0学习第十三轮(导航条)
详情请查看http://aehyok.com/Blog/Detail/20.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:ht ...