一个苹果移动知识iOS进阶

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

2018-09-29  本文已影响435人  objcat

众所周知打包测试是一个复杂的过程 测试出问题后 再修改 再发包 这一步骤重复几十遍 我就问你怕不怕? 所以这里提供一个手动打包的方法 可加快打包速度 这个包仅限于测试使用. 不能提交到AppStore之前写过一个itunes打包的文章 不过随着itunes更新 已经很少人会回退到12.6版本进行打包了 所以特别写了此文章来科普一下app包的原理(浅层原理 = =)

温馨提示:
文章分为手动打包与自动打包两种 如果想循序渐进就继续看下去如果想直接拿过去用 就搜索 二.自动打包

一.手动打包

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

这里注意一下请使用development证书打包(开发证书)


2.选择编译设备并编译

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

编译的快捷键是 cmd + b

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

想要打包就要先了解包里面的结构 我这边先拆开一个抖音的包

可以看到里面是这些乱七八糟的东西 其他的不用看 我们只看这个Payload文件夹 里面装着一个.app文件 是不是很面熟 = =
那我们猜想是不是只要有Payload文件夹.app这两个文件是不是就可以完成打包了呢

6.开始打包

经过上面的猜想 我们开始实现打包 操作步骤为

1.新建一个叫 Payload 的文件夹 需要一个字不差
2.把.app包放进去
3.用系统自带的zip压缩成.zip文件
4.把.zip后缀改成.ipa
7.通过上述的打包操作 就可以打出想要的测试包 不过每次都这么操作是不是很繁琐呢?我们稍微使用命令行脚本来简化一下 脚本如下
rm -rf Payload
mkdir Payload
cp -r xxx.app Payload/xxx.app
zip -r xxx.ipa Payload

注意
xxx.app 需要改成你 路径下的app名字 否则找不到文件
xxx.ipa 这个你可以随便起名

写好之后我们把脚本放到xxx.app旁边


然后配置好脚本 我是这么写的

rm -rf Payload
mkdir Payload
cp -r SimpleVideoFileFilter.app Payload/SimpleVideoFileFilter.app
zip -r SimpleVideoFileFilter.ipa Payload

然后在命令行上执行脚本

首先cd到Products目录

cd /Users/sam/Library/Developer/Xcode/DerivedData/SimpleVideoFileFilter-eidehdymxkvhnmgawhkynwduxbqh/Build/Products/Debug-iphoneos 

进入目录后执行脚本

sh package.sh

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

到了这里 大功告成了!

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

二.自动打包

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

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

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


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

if [ "${CONFIGURATION}" = "Debug" ] && [ -d "${BUILD_ROOT}/${CONFIGURATION}-iphoneos" ]
then
cd ${BUILD_ROOT}/${CONFIGURATION}-iphoneos
rm -rf Output
mkdir Payload
mkdir Output
cp -rf ${PROJECT_NAME}.app Payload/${PROJECT_NAME}.app
zip -r Output/${PROJECT_NAME}.ipa Payload
rm -rf Payload
open ./Output
fi

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

贴完之后是这样


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

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

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

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.如打包出现一些其他问题 请自行阅读排查

finally enjoy it

by objcat 2018.09.29

update by objcat 2018.10.10

上一篇下一篇

猜你喜欢

热点阅读