[iOS]快速打包(仅限提测使用)

前言

在Xcode12.5上进行打包后, 有时会发现下载的包无法安装的问题, 提示为无法安装"xxxx", 无法安装此App, 因为无法验证其完整性, 认为是苹果验证服务器问题, 因为正常打包Adhoc上传蒲公英后也无法安装, 但是上传testFlight后分发测试可以.

打包提测是一个复杂的过程, 首先你要打包发给测试, 打包的过程三个步骤build, archive, export, 测试出问题后, 你再修改, 然后再重新发包, 这一流程重复10遍, 你打包的步骤就是30遍, 所以这里提供一个手动打包的方法, 可加快打包速度, 这个包仅限于测试使用. 不能提交到AppStore, 之前写过一个itunes打包的文章 不过随着itunes更新 已经很少人会回退到12.6版本进行打包了 所以特别写了此文章来科普一下app包的浅层原理.

一.手动打包

1.配置在开发者中心下载的证书以及描述文件

注意一下请使用development证书打包(开发证书)
这里传授一个小技巧 只要填写好bundleId后 就可以直接选择你想要的描述文件 证书会自动进行匹配无需手动操作


2.选择编译设备并编译

请注意一定要选择这个Generic iOS Device
只有这个编译出来的app是给真机使用的

编译的快捷键是 cmd + b

3.编译之后在Products文件夹中就会出现一个.app文件
4.我们右键 show in finder 就可以打开文件所在的目录
5.了解ipa包的目录结构

ipa的包结构其实很简单, 随便解压出一个打包好的ipa都可以看到, 就是一个Payload的文件夹装着一个.app, 而这个ipa还有另外一个名字zip, 既然知道了原理, 我们就开始打包.

6.开始打包

步骤为:
1.新建一个叫 Payload 的文件夹 需要一个字不差
2.把.app包放进去
3.用系统自带的zip压缩成.zip文件
4.把.zip后缀改成.ipa

上面的步骤你可以在finder里用界面来操作
不过使用命令行也同样很简单 我们来看一下

实现方法如下

mkdir Payload
cp -r xxx.app Payload
zip -r xxx.ipa Payload

注意
xxx.app 路径下的app名字 否则找不到文件
xxx.ipa 打包出来的包名 起一个即可

我们这就把命令逐行输入进去


出现上面的画面就执行成功了

我们看一下ipa已经打包好了

同样的 你也可以简化一下操作步骤 把命令写成shell脚本 然后执行脚本

首先我们创建脚本

touch package.sh

然后用xcode打开

open -a Xcode package.sh

然后配置好脚本

# 创建Payload文件夹
mkdir Payload
# 复制TestPackage.app到Payload
cp -rf TestPackage.app Payload
# 压缩Payload生成ipa
zip -r TestPackage.ipa Payload

然后执行我们刚开创建的脚本

sh package.sh

我们会遇到一个错误 上面说Payload文件夹已经存在了
那我们就来优化一下命令 在创建文件夹之前 先删除文件夹

# 删除Payload文件夹
rm -rf Payload
# 创建Payload文件夹
mkdir Payload
# 复制TestPackage.app到Payload
cp -rf TestPackage.app Payload
# 压缩Payload生成ipa
zip -r TestPackage.ipa Payload

如果你想直接打包到桌面的话 可以修改zip后面的路径 指定到桌面如

zip -r /Users/sam/desktop/TestPackage.ipa Payload

执行之后会在当前目录下看到ipa文件 这个文件可以直接上传 fir或蒲公英 进行测试了

到了这里 大功告成了!

如果打出来的包不能用请优先检查证书描述文件并重新打包

二.自动打包

手动打出来的包已经很快了 但是有些人可能还是会觉得不爽 我什么也不想做 只想编译之后就生成可以发给测试的包 下面我们来实现一下自动打包

首先我们在xcode项目配置中找到Build Phases
之后点上面的加号 加一个自动执行脚本的模块

之后我们会发现 多出这样一个模块


我们在下面输入框中贴入如下shell

# 如果是Debug环境并且目录存在开始打包
if [ "${CONFIGURATION}" = "Debug" ] && [ -d "${BUILD_ROOT}/${CONFIGURATION}-iphoneos" ]
then

# 打开app目录
cd ${BUILD_ROOT}/${CONFIGURATION}-iphoneos

# 如果Payload存在, 删除Payload避免新建文件夹失败
if [ -d "Payload" ]
then
rm -rf Payload
echo "Payload已存在并移除完毕!"
fi

# 创建Payload文件夹
mkdir Payload
# 拷贝app到Payload
cp -rf ${PROJECT_NAME}.app Payload
# 打包成ipa
zip -r ${PROJECT_NAME}.ipa Payload
# 打开当前目录
open .

fi

这里解释一下
${BUILD_ROOT} 是编译路径
${CONFIGURATION} 是当前的编译环境
${PROJECT_NAME} 是项目名称

贴完之后是这样


之后我们切换到Debug模式并选择设备为Generic iOS Device

这里再次强调 这种打包方式只推荐打测试包提供测试 生产包还是用xcode原本的方式打 打包之前请自行配置证书和描述文件

然后 cmd + b 编译 编译之后会自动打开编译目录 大功告成!

之后我在使用的过程中发现了一个小问题 就是清理过后的第一次打包会出现包无法签名的问题 目前我的解决方案是 编译两次 即再次使用cmd+b快捷键重新编译 编译出的文件会自带签名.

验证签名的方法:

1.去.app中亲自寻找
2.上传fir进行验证

9.FAQ

1.有些同学会问:猫哥 你的包是不是没签名呀
答:在你cmd+b编译的时候xcode就已经给做了签名了 签名的描述文件和证书都是你在第一步配置的 = =

2.如果打出来的包不能用请优先检查证书描述文件并重新打包

3.如果检查无误还是不能用 那么这里要还是要赘述一下 开发包只能由内部人员使用 也就是你需要在apple developer控制中心中加入内
部人员设备 并重新生成描述文件并下载到本地 重新进行打包

4.如果上述过程都试了 还是不能用 请检查项目支持的最低版本

5.如何验证签名正确呢? 其实很简单 把你打出的包上传到fir只要能传上去 证明你的包一定是developer或adhoc包, 即打包的证书和描述文件并没有错误

6.如何得知签名中有你设备的id呢? 这个也很简单 在.app包上点右键 显示包内容 在里面找到embedded.mobileprovision文件 选中之后点空格 在最下方就能看到绑定的设备列表了 - -

7.有些人反映 有遇到使用Xcode10打包之后 在iOS11系统上不能显示本地图片的问题 之后我进行了测试 并没有重现 如果遇到此问题 请在下方留言给我你的Xcode版本 使用环境 和 iOS系统版本

8.如果尝试了所有方法,都操作没有失误的话,那就是苹果验证方式变了,推荐观看以下升级版文章
[iOS] 打包原理及脚本自动打包的实现
https://www.jianshu.com/p/6ea244222ee4

9.如打包出现一些其他问题 请自行阅读排查

finally enjoy it

by objcat 2018.09.29

更新日志:
2018.10.10

完善部分FAQ

2018.12.07

优化冗余的打包代码 完善注释

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容