在做更新的时候(我的是从xcode8升级到xcode9), 电脑xocde一整套完全升级。完了之后发现编译之前的程序出现
unavailable function 'system': not available on iOS
原因是iOS11一将system删除,解决办法:打开CCFileUtils.cpp,中找到使用在的方法 removeDirectory(),将其注释,并替换上下面的代码:
- // #include <dirent.h>
- #if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)
- #include <ftw.h>
- #endif
- // removeDirectory
- namespace
- {
- #if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)
- 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;
- }
- #endif
- }
- // removeDirectory :
- bool FileUtils::removeDirectory(const std::string& path) {
- #if !defined(CC_TARGET_OS_TVOS)
- #if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)
- if (nftw(path.c_str(), unlink_cb, 64, FTW_DEPTH | FTW_PHYS) == -1)
- return false;
- else
- return true;
- #else
- std::string command = "rm -r ";
- // Path may include space.
- command += "\"" + path + "\"";
- if (system(command.c_str()) >= 0)
- return true;
- else
- return false;
- #endif // (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)
- #else
- return false;
- #endif // !defined(CC_TARGET_OS_TVOS)
- }
注意下,cocos-2dx版本不同,有的在AssetManager.cpp中也有使用到 system。此时,直接将
system(command.c_str());
更换成
popen(command.c_str(), "r");