1. 程式人生 > >iOS 中 lua 熱更新 'system' is unavailable: not available on iOS

iOS 中 lua 熱更新 'system' is unavailable: not available on iOS

iOS熱更新-8種實現方式
一、JSPatch
熱更新時,從伺服器拉去js指令碼。理論上可以修改和新建所有的模組,但是不建議這樣做。
建議 用來做緊急的小需求和 修復嚴重的線上bug。

二、lua指令碼
比如: wax。熱更新時,從伺服器拉去lua指令碼。遊戲開發經常用到。

三、Weex
跨平臺,一套程式碼,iOS、Android都可以執行。
weex基於vue.js,ReactNative使用React。
react模板JSX有一定的學習成本,vue和常用的web開發類似,模板是普通的html,資料繫結用mustache風格,樣式直接使用css。
weex是阿里開源的技術。

四、React Native
不像Weex能一套程式碼多端執行,適配iOS和android需要自己分別做修改。
React Native和Weex都 可以進行熱更新,但都不能修改原生OC程式碼。
JSPatch、lua 配合React Native可以讓一個原生APP時刻處於可擴充套件可修改的狀態。

五、Hybrid
像PhoneGap之類的框架, 基本概念和web差不多, 通過更新js/html來實現動態化,沒有原生的效果流暢。

六、動態庫
可以做demo用,真實使用的時候會被蘋果禁止。
因為 打包發到AppStore的ipa安裝包 裡的每個動態庫 都有唯一的編碼,iOS系統會進行驗證,所以動態通過網路獲取 新的動態庫 也用不了。

七、rollout.io
Rollout緊急修復線上bug。後端有相關的管理頁面。因為是國外的網站,然後呢,要FQ才能使用。

八、DynamicCocoa
滴滴iOS的一個框架,準備在2017年初開源,與JSPatch比更加智慧化,用OC在XCode中寫完程式碼,用工具可以自動生成可以更新的js檔案。

現對lua的方式進行研究
https://blog.csdn.net/u013230511/article/details/55107703

iOS 使用lua以lua-5.3.4.tar.gz為例
到官方網站下載lua
http://www.lua.org/ftp/
下載
lua-5.3.4.tar.gz2017-01-12
這個版本 哪一個版本都可以。
解壓 複製裡面的src資料夾下的所有程式碼
按照連結嘗試,在iOS11之後會出現 報錯’system’ is unavailable: not available on iOS

解決方法是:
將loslib.c中

int stat = system(cmd);

改為

int stat = nftw(cmd, unlink_cb, 64, FTW_DEPTH | FTW_PHYS);

引入標頭檔案

#include <ftw.h>

新增方法

int unlink_cb(const char *fpath, const struct stat *sb, int typeflag, struct FTW     *ftwbuf)
{
    int rv = remove(fpath);

    if (rv)
        perror(fpath);

    return rv;
}

編譯通過了