首页 iOS动态更新技术探索 (下)
文章
取消

iOS动态更新技术探索 (下)

正文

没那么多废话, 直接正文

服务端照旧使用 PHP 简单搞一搞 全部代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
    header("Content-type:application/json;charset=utf8");
    $host = $_SERVER['HTTP_HOST'];
    
    $json['librarys'] = [0 => ["name"      => "Home",
                               "className" => "HomeViewController",
                               "type"      => "framework",
                               "url"       => "http://".$host."/update/librarys/Home.framework.zip",
                               "version"   => "1.0"
                              ]
                            ];
    
//    $json['librarys'] = [0 => ["name"      => "Baidu",
//                               "className" => "BaiduViewController",
//                               "type"      => "framework",
//                               "url"       => "http://".$host."/update/librarys/Baidu.framework.zip",
//                               "version"   => "1.0"
//                              ]
//                        ];
    
  	echo json_encode($json);
?>

此部分返回的内容为 Home 模块相关信息, 内容为网络加载一张图片.

1
2
3
4
5
6
7
$json['librarys'] = [0 => ["name"      => "Home",
                           "className" => "HomeViewController",
                           "type"      => "framework",
                           "url"       => "http://".$host."/update/librarys/Home.framework.zip",
                           "version"   => "1.0"
                          ]
                      ];

此部分返回的内容为 Baidu 模块相关信息, 内容为使用WKWebView加载https://www.baidu.com.

1
2
3
4
5
6
7
$json['librarys'] = [0 => ["name"      => "Baidu",
                           "className" => "BaiduViewController",
                           "type"      => "framework",
                           "url"       => "http://".$host."/update/librarys/Baidu.framework.zip",
                           "version"   => "1.0"
                          ]
                     ];

服务器目录相关文件如图: librarys(应该是libraries?不要在意细节) librarys文件夹下存放的是为客户端提供的相关动态库的压缩包.(动态库如何打包此处不做介绍) request.php就是服务端请求数据的接口文件

1238153-d19e89d7ce4d81a6

效果

当服务器返回Home时候效果如图:

1238153-52b72f55edd6be35

当服务器返回 Baidu时候效果如图:

1238153-3a5549a8d70d8547

整个过程仅仅改变了服务器返回的 framwork 相关JSON信息.

结论

由此可见,如果模块,结构规划好的话, iOS 端也是完全能够实现 碎片化的插件 更新.只需设计好一开始的壳,后续就完全能靠动态库来开发各种功能. 但是,现实是 Apple 不让这么玩,只能娱乐一下了.如果是企业版的话可以这么尝试一下.

补充: 就当玩玩吧, 现在真机已经不让这么玩了…

本文由作者按照 CC BY 4.0 进行授权