基于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. Spring2.5与JDK8的集成问题

    Spring2.5不支持JDK8及其以上的版本,因为有一段校验JDK版本的代码,当JDK版本大于1.7之后,会识别成JDK1.4之前的.会报版本太低的错误. /* * Copyright 2002-2 ...

  2. 18Spring_AOP编程(AspectJ)_AspectJ的各种通知总结

    小结: 前置通知(权限控制). 后置通知 ---- 不怎么用 环绕通知(权限控制. 性能监控. 缓存技术 ) 异常通知 (发生异常后, 记录错误日志 ) 最终通知 (释放资源 ) 环绕通知 是取代任何 ...

  3. SQL 数据结构操作语句

    修改字段 exec sp_rename '表名.[字段名]','新字段名','column' alter table tab_info rename column createname to this ...

  4. sqlite3的使用(iOS嵌入式关系数据库)

    1>添加sqlite3动态库:libsqlite3.dylib,CoreGraphics.framework,UIKit.framework,Foundation.framework 2> ...

  5. mac 80端口映射 配置

    mac 80端口映射 配置 macbook 下,要绑定 80 端口的话. 一种方式是用 root 权限启动,即 sudo 启动服务进程.但 sudo 指令存在一定的安全问题,能不使用的情况下我们都尽量 ...

  6. windows 7 + vs2010 sp1编译 x64位版qt4

    由于qt官方没有发布预编译的64位版qt4,要使用64位版qt4,只能自己编译,编译过程如下: 1,下载源码并解压到D:\qt-src\qt-everywhere-opensource-src-4.8 ...

  7. 转摘http://blog.csdn.net/hulihui/article/details/3351922#s6

    译文:构建DataGridView的定制NumericUpDown单元格(Cell)和表格列(Column) 分类: DataGridView控件 2008-11-22 20:58 3555人阅读 评 ...

  8. 每天一个linux命令(22):chgrp命令

    在 lunix系统里,文件或目录的权限的掌控以拥有者及所诉群组来管理.可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别 码都可以.Chgrp命令就是change grou ...

  9. 安装xampp二三事

    1.chrome 找不到页面时会自动跳转到hao123 安装完chrome后,想测试下localhost,结果找不到页面,当然正常的显示是“该页面无法显示”才对,可恨啊,总是直接转到hao123页面上 ...

  10. git 使用教程整理

    饥人谷最优技术博客,Git使用三部曲系列--朱维(直播10班)<创建版本库>http://t.cn/RfRbSY8<查看状态>http://t.cn/Rfn2TkP<版本 ...