基于Lexrus的博文iOS-makefile,本文对自动打包涉及到的操作步骤以及理论基础进行了适当的补充。

    请在阅读本文前先阅读《iOS makefile》。文章地址:http://lextang.com/ios-makefile

首先我们从个文件:makefile脚本文件和makefile.cfg脚本配置文件。makefile.cfg主要用来填写待打包项目的有关信息,包括项目名、workspace、configuration、Scheme。Xcode默认的configuration包括Debug和Release。你可以在project文件的Info->configuration标签下对设置一个InHouse或AdHoc的config。makefile脚本在当前目录会搜索.cfg文件并导入,所以在运行打包命令前,需要确保这两个文件是在同一个目录内。

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项目的更多相关文章

  1. docker 运行jenkins及vue项目与springboot项目(三.jenkins的使用及自动打包vue项目)

    docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...

  2. xcodebuild和xcrun实现自动打包iOS应用程序

    随着苹果手持设备用户的不断增加,ios应用也增长迅速,同时随着iphone被越狱越来越多的app 的渠道也不断增多,为各个渠道打包成了一件费时费力的工作,本文提供一种比较智能的打包方式来减少其带来的各 ...

  3. 解放双手 | Jenkins + gitlab + maven 自动打包部署项目

    前言 记录 Jenkins + gitlab + maven 自动打包部署后端项目详细过程! 需求背景 不会偷懒的程序员不是好码农,传统的项目部署,有时候采用本地手动打包,再通过ssh传到服务器部署运 ...

  4. Unity3D 自动打包整个项目(以AssetBundle实现)

    原地址:http://blog.csdn.net/huang7jiao/article/details/18370653 需求: 在移动开发中,手动控制资源的加载.释放和热更新,是很有必要的. 而Un ...

  5. jenkins自动打包部署项目

    首先去jenkins的官网下载安装包 https://jenkins.io/   个人下载是长期稳定的那个版本,下载后,得到一个.msi的安装包: 点击进行安装,然后一直点击下一步. jenkins会 ...

  6. docker 运行jenkins及vue项目与springboot项目(二.docker运行jenkins为自动打包运行做准备)

    docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...

  7. iOS 本地自动打包工具

    1.为什么要自动打包工具? 每修改一个问题,测试都让你打包一个上传fir , 你要clean -> 编译打包 -> 上传fir -> 通知测试.而且打包速度好慢,太浪费时间了.如果有 ...

  8. ios自动打包-fastlane 安装、使用、更新和卸载

    ios自动打包使用fastlane 1.首先安装xcode 首先检查是否已经安装 Xcode 命令行工具,fastlane 使用 xcodebuild 命令进行打包,运行 xcode-select - ...

  9. 40、IOS自动打包-Python脚本

    第一种:基于编译的打包 编译工程--找到.app文件--新建Payload文件夹--拷贝.app到Payload文件夹--压缩成zip--更改后缀名为ipa--完成! 第二种(有问题,暂时不需要看) ...

随机推荐

  1. 墙国内新建Rails应用的要点(windows 7环境, Rails 4.2.0)

    1. 使用rails new 命令创建完的应用在自动执行bundle install不会成功,根据出错提示,判断原因有可能是被墙与https的证书的安全性问题. 作为开发环境,选用绕开的办法,在目录  ...

  2. mysql-advanced-5.6.23-linux-glibc2.5-x86_64安装

    0,二进制安装: mysql-advanced-5.6.23-linux-glibc2.5-x86_64.zip   1,软件包 mysql-advanced-5.6.23-linux-glibc2. ...

  3. 不可不知的C#基础 4. 延迟加载 -- 提高性能

    延迟加载(lazy loading) 设计模式是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据(读取属性值)的时候,才真正执行数据加载操作. 有效使用它可以大大提高系统性能. ...

  4. Tuple的用法

    1经常有些类型只用一次,不想添加新类,可以使用Tuple. 例子: List<Tuple<string, string>> list = new List<Tuple&l ...

  5. Log4Net写入到数据库配置过程中的一些小问题备忘

    问题1: 在公司进行log4net写入服务器配置的时候,一切正常,但是在家里的机器上,就频繁出现这个问题: SQL Server 2008 报错:已成功与服务器建立连接,但是在登录前的握手期间发生错误 ...

  6. Asp.net MVC十问十答[译]

    1. Explain MVC (Model-View-Controller) in general? MVC (Model-View-Controller) is an architectural s ...

  7. 修改TrustedInstaller权限文件(无法删除文件)

    1.    右击需要修改的文件-属性 2.    切换到"安全"选项卡,点击"高级"按钮. 3.    切换到"所有者"选项卡 一般情况下默 ...

  8. Maven(一)简介和基本安装使用

    简介 如今用于项目管理和自动化构建的东东用的比较多的,比如: eclipse中用到的ant 现今流行的android studio中用到的gradle 这里将介绍另一种工具——maven (也可以用来 ...

  9. unity3d 纹理动画

    不知道大家有没有玩过赛车游戏 赛车游戏的跑道有路标,如下图 玩过赛车游戏的都知道,大多数赛车游戏的路标是会动的,如上图,它会从右往左运动 不会发动态图,大家脑补一下吧 没有玩过赛车游戏的也不要紧,大家 ...

  10. Unity 3D本地发布WebPlayer版时Failed to download data file解决方案

    遇到这个问题就是指Web服务器并没有支持这种*.unity3d文件类型.需要做的是在Web服务器中添加MIME类型: IIS 7 及以上版本: 在功能视图的IIS选项卡中: 双击打开MIME,选择添加 ...