升級 Xcode 9.0 後在 iOS 11 中移除 system 呼叫的解決
在專案中使用到了一個庫, 裡面呼叫了 system. system 呼叫主要是為了獲取一個返回值 stat.
const char *cmd = luaL_optstring(L, 1, NULL);
int stat = system(cmd);
if (cmd != NULL)
return luaL_execresult(L, stat);
else {
lua_pushboolean(L, stat); /* true if there is a shell */
return 1;
}
然後在 Xcode9 裡面, 當前 system 已經被移除了... 因為 baseSDK 升級到了 iOS 11.0:
__swift_unavailable_on("Use posix_spawn APIs or NSTask instead.", "Process spawning is unavailable")
__API_AVAILABLE(macos(10.0)) __IOS_PROHIBITED
__WATCHOS_PROHIBITED __TVOS_PROHIBITED
int system(const char *) __DARWIN_ALIAS_C(system);
按照上面的說法, 需要用 posix_spawn API 或者是 NSTask 來代替 system.
故參考前人的解決方式, 準備替換掉 system 的呼叫.
首先引入標頭檔案和一個外部變數:
#include <spawn.h>
extern char **environ;
然後再替換掉之前的 system 呼叫:
替換前:
static int os_execute (lua_State *L) {
const char *cmd = luaL_optstring(L, 1, NULL);
int stat = system(cmd);
if (cmd != NULL)
return luaL_execresult(L, stat);
else {
lua_pushboolean(L, stat); /* true if there is a shell */
return 1;
}
}
替換後:
static int os_execute (lua_State *L) {
const char *cmd = luaL_optstring(L, 1, NULL);
pid_t pid;
char* argv[] =
{
cmd,
NULL
};
int result = posix_spawn(&pid, argv[0], NULL, NULL, argv, environ);
waitpid(pid, NULL, 0);
if (cmd != NULL)
return luaL_execresult(L, result);
else {
lua_pushboolean(L, result); /* true if there is a shell */
return 1;
}
}
這個只是臨時解決方案, 最好還是給作者提一個 issue...
相關文章
- 升級iOS9和Xcode7後應用崩潰解決方案iOSXCode應用崩潰
- 解決xcode升級外掛失效XCode
- 關於xcode沒升級,但使用了iOS11的新函式編譯不過解決XCodeiOS函式編譯
- 升級到XCode8,Swift3.0後,解決各種錯誤XCodeSwift
- Xcode 升級,外掛不好用解決方法XCode
- iOS11.4.1正式版升級教程詳解 iOS11.4.1怎麼升級iOS
- 從xcode中移除ARCXCode
- 升級到iOS5後ASIHttpRequest庫問題及解決方法iOSHTTP
- 升級iOS12後微信不能提示新訊息的解決辦法iOS
- iOS 解決 Xcode 8中更新 SnapKit 3.0 的錯誤iOSXCodeAPK
- iOS11正式版升級圖文教程 iOS11怎麼升級?iOS
- iOS12升級與降級至iOS11.4./11.3.1教程 iOS12怎麼升級iOS
- 在iOS中呼叫HTMLiOSHTML
- chrome升級後audio不能播放解決Chrome
- iOS11.4.1beta3升級攻略 iOS11.4.1beta3怎麼升級iOS
- iOS11.4.1beta4升級攻略 iOS11.4.1beta4怎麼升級iOS
- iOS11.4.1 beta開發者升級攻略 iOS11.4.1 beta開發者怎麼升級?iOS
- iOS11.2.6更新升級攻略 iOS11.2.6正式版怎麼升級?iOS
- iOS11.3.1正式版怎麼升級 iOS11.3.1更新升級攻略iOS
- iOS11.4.1beta5升級攻略 iOS11.4.1beta5怎麼升級iOS
- iOS10公測版Beta1升級後螢幕太暗的解決方法iOS
- 蘋果iOS 8.1.2更新升級 修復鈴聲被移除問題蘋果iOS
- ORACLE EXADATA升級—從11.2.3.1.0到11.2.3.3.0–(9)升級後的檢查Oracle
- ASP.net升級後在IIS7中Form認證無法登入問題的解決ASP.NETORM
- iOS11.3 Beta2更新升級攻略 iOS11.3 Beta2如何升級?iOS
- 系統升級到win 11棄用及移除的win10功能Win10
- xcode升級xcode9 1之後報錯swift stdlib tool errorXCodeSwiftError
- iOS11.4.1 beta2更新升級攻略 iOS11.4.1 beta2怎麼升級iOS
- iOS11.2 beta1更新升級攻略 iOS11.2 beta1怎麼升級?iOS
- iOS11.4 beta5更新升級攻略 iOS11.4 beta5怎麼升級?iOS
- iOS11.4 beta4更新升級攻略 iOS11.4 beta4怎麼升級?iOS
- iOS11.4.1升級iOS12正式版攻略 iOS11怎麼升級至iOS12正式版?iOS
- 升級win10系統後不能投影的解決方法Win10
- ArchLinux/Manjaro升級到6.9核心後的問題解決LinuxJAR
- Xcode10打包的App在iOS 9上閃退問題的解決方案XCodeAPPiOS
- 呼叫System.gc沒有立即執行的解決方法GC
- 升級到IE6之後在後面補上的不是com而是co.cn--解決方法 (轉)
- 10g升級至11g exp的問題解決