写在最前
本人已经有长达两年多没有写过ios程序了的,本篇内容如有错误,请大家多见谅并指出问题~
背景
公司内部有很多产品线,开发完成后的app会打包上传到一个公司内部网站上,这里估计简称该站点为webmobile,如果同事想安装app,只需要电脑或者手机访问webmobile点击安装即可,这里需要说明一下的是这种打包方式用的是企业证书,安装是通过最后生成的plist来装的,如果不太了解这一点可以自行百度。但让人无法接受的是webmobile访问超慢。。。使用起来真是WTF。。。所以就想自己写了一个nativie app直接来安装程序。
具体实现
1.抓包分析webmobile的HTML ...这一步该文章省略...
2.把步骤1抓取的html转换成正常的UITableView来显示..这一步也忽略吧...
3.安装实现 --- 折腾的重点
尝试解决方案:
1.大家知道ios有一个万能神器叫做openURL,so我尝试了一把打开‘itms-services://?action=download-manifest&url=https://...’ ,真机可以的~
2.由于步骤1中抓包分析过程中用到了webview,所以想法是不是可以用webview来模拟跳转呢?~~真机可以的~
3.前面两种其实都是通过openURL方式~不要折腾简单粗暴~闲来无事于是来到了思路三,我在背景中提到一点,大家是可以通过系统浏览器也就是Safari来点击安装程序,所以经常会遇到微信或者其他浏览器中提示用户,“用系统Safari打开此链接“,灵感来了的,ios 9中提供了SFSafariViewController,官方描述中也是说这种方式就是把链接直接交给app系统来处理逻辑,那换言之是不是也包括安装程序呢?so,立马测试了一把,帅,成功了的~不需要任何权限~撒花~~~
let safariViewController = SFSafariViewController(url: NSURL(string:"http://m.xyzs.com/app/100000234.html") as! URL)
ctrl?.present(safariViewController, animated: true, completion: {})
ok,那回到正题,如何才能实现我标题提到的内部安装呢?抓包下来的全是itms-services的scheme啊,而SFSafariViewController打开的确实需要一个合法的HTTP地址才可以。。。WTF~ 怎么办。。。灵感又来了的,既然没有HTTP地址,那咱能自己模拟一个么?答案当然是yes,本地起一个服务,done~
1.启一个服务
2.创建一个HTML
3.点击tableview cell中的安装
4.done
总结
绕开appstore其实不太符合处女座的苹果规范,但写这个工具不需要发布到市场,只是给公司内部员工使用~顺便提一下文章中用的截图都是我自己开发的一款非常使用的mac工具七牛图片上传神奇 一键截图上传返回地址~极力推荐大家使用~~~
如果您愿意听我聊技术,可以关注我的个人公众号SKMacTalk:
SKMacTalk
网友评论