设为首页 收藏本站
查看: 1169|回复: 0

shell脚本实现ipa一键安装(itms-services协议)

[复制链接]

尚未签到

发表于 2015-10-25 14:45:36 | 显示全部楼层 |阅读模式

简介




通过itms-services协议,可以通过safari浏览器直接在IOS设备上安装应用程序。具体效果可以看图。




利用这种方式,只要在内网布置一个服务器,测试人员只需要通过测试设备的safari浏览器访问特定的url既可以实现安装,然后测试了。(PS:越狱设备也可以)


itms-services协议需要一个plist配置文件。如果要实现上面图示的功能,需要的文件有:一个ipa文件,一个plist文件,一个html文件和一个图片文件。其中,最主要的,就是plist文件。通过shell脚本,我们可以让其自动为我们生成plist文件和html文件,并且在xcode工程中的ipa文件和程序图标文件复制一份,放到一起。下面,我们来实现这个名为“ipa-publish”的shell脚本。


注意:该脚本需要与“ipa-build”脚本配合使用。“ipa-build”脚本下载:点击这里,相关文章《xcode自动打ipa包脚本》



实现




“ipa-publish”脚本内容:


#!/bin/bash
#--------------------------------------------
# 功能:创建符合itms-services协议的发布文件
# 作者:ccf
# E-mail:ccf.developer@gmail.com
# 创建日期:2012/09/24
#--------------------------------------------
# 修改日期:2012/09/27
# 修改人:ccf
# 修改内容:去掉打包的部分脚本,只保留生成协议文件部分,以后此脚本依赖ipa-build脚本
#--------------------------------------------

#须配置内容  start
#发布应用的url地址
pulish_url="http://webfrogs.github.com/urls/"
#可配置内容  end
#参数判断
if [ $# != 2 ] && [ $# != 1 ];then
echo "Number of params error! Need one or two params!"
echo "1.root path of project(necessary) 2.name used to display when installing"
exit
elif [ ! -d $1 ];then
echo "The param must be a dictionary."
exit   
fi

#工程绝对路径
cd $1
project_path=$(pwd)
#判断所输入路径是否是xcode工程的根路径
ls | grep .xcodeproj > /dev/null
rtnValue=$?
if [ $rtnValue != 0 ];then
echo "Error!! The param must be the root path of a xcode project."
exit
fi
#判断是否执行过ipa-build脚本
ls ./build/ipa-build/*.ipa &>/dev/null
rtnValue=$?
if [ $rtnValue != 0 ];then
echo "Error!! No ipa files exists.Please run the \"ipa-build\" shell script first"
exit
fi

#IPA名称
if [ $# = 2 ];then
ipa_name=$2
fi
#build文件夹路径
build_path=${project_path}/build
#工程配置文件路径
project_name=$(ls | grep xcodeproj | awk -F.xcodeproj '{print $1}')
project_infoplist_path=${project_path}/${project_name}/${project_name}-Info.plist
#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" ${project_infoplist_path})
#取bundle Identifier前缀
bundlePrefix=$(/usr/libexec/PlistBuddy -c "print CFBundleIdentifier" `find . -name "*-Info.plist"` | awk -F$ '{print $1}')
#生成发布文件
#拷贝ipa
cd $build_path
target_name=$(basename ./Release-iphoneos/*.app | awk -F. '{print $1}')
if [ $# = 1 ];then
ipa_name="${target_name}"
fi
if [ -d ./$target_name ];then
rm -rf $target_name
fi
mkdir $target_name
cp ./ipa-build/*.ipa ./$target_name/${target_name}.ipa
cp ../Icon@2x.png ./$target_name/${target_name}_logo.png
cd $target_name
#生成install.html文件
cat << EOF > index.html
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; />
<title>安装此软件</title>
</head>
<body>
<br>
<br>
<br>
<br>
<p align=center>
<font size=&quot;8&quot;>
<a href=&quot;itms-services://?action=download-manifest&url=${pulish_url}${target_name}.plist&quot;>点击这里安装</a>
</font>
</p>
</div>
</body>
</html>
EOF
#生成plist文件
cat << EOF > ${target_name}.plist
<?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>
<!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;>
<plist version=&quot;1.0&quot;>
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>${pulish_url}/${target_name}/${target_name}.ipa</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>${pulish_url}/${target_name}/${target_name}_logo.png</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>${pulish_url}/${target_name}/${target_name}_logo.png</string>
</dict>
</array><key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>${bundlePrefix}${target_name}</string>
<key>bundle-version</key>
<string>${bundleVersion}</string>
<key>kind</key>
<string>software</string>
<key>subtitle</key>
<string>${ipa_name}</string>
<key>title</key>
<string>${ipa_name}</string>
</dict>
</dict>
</array>
</dict>
</plist>
EOF


脚本说明:pulish_url=&quot;http://webfrogs.github.com/urls/&quot; 这句话是需要配置的,对应的就是要将文件放到的http服务的url。这里是一定要配置正确的。


将shell脚本保存,命名为“ipa-publish”,然后为其添加可执行权限,命令如下:


chmod &#43;x ipa-publish


这里提供shell脚本下载,下载完后,只需要为其增加可执行权限即可。下载点这里



使用




该脚本依赖“ipa-build”脚本所产生的内容,所以在执行该脚本之前,首先需要执行“ipa-build”脚本。执行该脚本有两个参数:第一个为xcode工程根路径。第二个是在安装时的显示程序的名称,即第三幅图中下载安装时所显示的名字,第二个参数可选,默认的是xcode工程的target的名字。


比如:“ipa-publish”位于~/shell 路径,xcode工程根路径:~/iphone/HuaRongDao,安装时显示的名称为“华容道”,则命令如下:


~/shell/ipa-publish ~/iphone/HuaRongDao 华容道


命令执行完后,在当前工程的build文件夹下,会有一个以target名字命名的文件夹,里面就是整个发布所需要的文件。


把这个文件夹直接上传到http服务上。之后就可以通过发布的url加上 /文件夹名 来访问了。


这里提供一个测试地址: http://webfrogs.github.com/urls/HuaRongDao/ 直接通过IOS设备的safari浏览器访问该url,然后点击其中的链接,就可以出现开始时图示的信息了。



总结




这篇文章写的比较乱,其实这么做的真正意义是,可以通过脚本,来实现一些CI的功能。 之后还可以用脚本来写自动上传的功能,完成xcode工程自动打包,生成文件,以及上传自动化。减轻我们开发时打包的工作量,同时也方便了测试人员安装测试。脚本还有很多可以优化的地方,比如,打包脚本的增加根据渠道来打不同包的功能。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-130677-1-1.html 上篇帖子: 使用 shell 脚本对 Linux 系统和进程资源进行监控 下篇帖子: MAC下终极 Shell——ZSH
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表