1、前言
iTunes 12.7 之前,可以下载ipa应用包、打开ipa包,也生成ipa文件!但是在这12.7之后,关于ipa的所有功能已经移除,如果还想下载ipa包,可以参考我之前的文章:解决 iTunes 12.7 无法下载 AppStore应用的IPA包问题,今天我们主要来说说制作ipa文件的功能。
2、ipa文件结构
其实ipa文件可以理解为一个zip的压缩文件,所以解压ipa文件后,得到ipa的目录 ipafilename/Payload/xxx.app
,以微信示例:
所以,如果我们编译的项目,想生成ipa文件,以前是拖拽到iTunes就会自动生成ipa文件,现在不行了,根据这个原理,我们在Xcode中编译生成的.app
目录,按照前面说的目录结构,进行压缩就行啦!
3、bash脚本
-
生成.app目录内容:
-
执行shell脚本生成ipa文件:
-
生成成功后,自动打开ipa文件所在目录:
4、全部代码
具体的代码,可参考我的Github代码:
#!/bin/bash
# 定义用到的变量
projectAppPath=""
outputPath=""
ipaFileName=""
# 定义读取输入字符的函数
getProjectAppPath() {
# 输出换行,方便查看
echo "\n================================================"
# 监听输入并且赋值给变量
read -p " Enter .app path: " projectAppPath
# 如果为空值,从新监听
if test -z "$projectAppPath"; then
getprojectAppPath
fi
}
getOutputPath() {
# 输出换行,方便查看
echo "\n================================================"
# 监听输入并且赋值给变量
read -p " Enter output path: " outputPath
if test -z "$outputPath"; then
# 如果没有输出路径,默认输出到桌面
outputPath="Desktop"
fi
}
getipaFileName() {
# 输出换行,方便查看
echo "\n================================================"
# 监听输入并且赋值给变量
read -p " Enter ipa FileName: " ipaFileName
if test -z "$ipaFileName"; then
getipaFileName
fi
}
# 执行函数,给变量赋值
getProjectAppPath
getOutputPath
getipaFileName
# 切换到当前用户的home目录,方便创建桌面目录
cd ~
# 在输出路径下创建 Payload 文件夹
mkdir -p "${outputPath}/Payload"
# 将.app 文件复制到 输出路径的 Payload 文件夹下
cp -r "${projectAppPath}" "${outputPath}/Payload/"
# 切换到输出路径
cd "${outputPath}"
# 将 Payload 文件夹压缩成 ipa 包
zip -r "${ipaFileName}.ipa" Payload
# 删除当前路径下 Payload 文件夹【-r 就是向下递归,不管有多少级目录,一并删除 -f 就是直接强行删除,不作任何提示的意思】
rm -rf "Payload"
# 成功提示
echo "\n\n=====================【转换ipa完成】=========================\n"
echo ${outputPath}
## 打开输出的路径
#open -a Finder "${outputPath}"
# 从当前位置打开finder
open .
# 结束退出
exit 0
5、优化
方法一
每次想生成ipa文件,就要打开终端,执行 sh make_ipa_file.sh
,相当麻烦,所以,如果生成别名,直接在终端输入别名就可以执行啦,是不是很棒!
为.bash_profile添加了一个别名:
mkipa='sh /Users/HTC/Documents/iBash/make_ipa_file.sh'
以后直接在终端输入:mkipa
就可以啦,这不是很棒!!!
方法二
如果是 Unix 可执行文件,直接点击,会自动打开终端执行。
把 make_ipa_file.sh
改为 make_ipa_file_sh
名字,然后在终端为文件添加可执行权限:chmod +x /Users/HTC/Desktop/make_ipa_file_sh
这样就生成了 Unix 文件,双击就会打开到终端:
方法三
在 ~/.bashrc 里面添加本函数,或添加脚本路径,也可以方便执行。
方法四
如果是macOS环境,还可以通过苹果的apple脚本服务,来做到一键化,以后有机会在谈谈。
6、总结
通过这个简单又复杂的示例,其实使用脚本的最终目录,也是想提高效率!!所以,打包ipa包的效率,也是向着这样的方向努力!如果你对shell还不熟悉,可以看看下面这2个教程,当前我学习的时候,还没有人给指导,所以,你们是幸福的一代程序员!加油!
参考
- iHTCboy/iShell: Shell脚本编程技巧,总结一些常用的提高效率的方法。
- 新版 iTunes 的变化 - Apple 支持
- Linux bash总结(一) 基础部分(适合初学者学习和非初学者参考) - 博客园
- ios打包ipa的四种实用方法(.app转.ipa)
- osx - Executing Shell Scripts from the OS X Dock? - Stack Overflow
- 解决 iTunes 12.7 无法下载 AppStore应用的IPA包问题
- 如有疑问,欢迎在评论区一起讨论!
- 如有不正确的地方,欢迎指导!
注:本文首发于 iHTCboy's blog,如若转载,请注来源