Cocos杂记

项目构建

android

  • 在构建目录build\jsb-default\frameworks\runtime-src下找到android项目
  • 使用android studio导入构建项目解决依赖问题后进行联机调试和打包

    windows

ios

  • 在macOS平台使用Cocos Creator进行ios构建
  • 在构建目录build\jsb-default\frameworks\runtime-src下找到ios项目
  • 使用Xcode找到工程文件打开编译连接设备进行调试或打包
  • 其中有可能Xcode编译不过具体情况需具体分析 这里举例
    'system' is unavailable: not available on iOS
  • 该错误需要更改Cocos cpp构建文件remove “system” usage
  • 还有可能Cocos构建脚本在检查Xcode版本时出现错误
    cocos2d project_compile.py ValueError: invalid literal for float(): 11.2.1
  • 本地Xcode版本为11.2.1直接在project_compile.py把version<5的判断注释即可
  • 在项目中使用第三方依赖时需要进行依赖管理,这里使用cocoapods管理,其中涉及使用gem更新Ruby,建立repo和 创建Podfile,之后就不能使用.xcodeproj文件进入工程了必须使用生成的.xcworkspace打开工程
  • 修改Podfile文件,就需要重新运行一下pod update命令。如何使用CocoaPods
  • 在升级百家云的时候发现update异常缓慢更换git访问代理 git config --global http.https://github.com.proxy socks5://192.168.1.57:1080

项目问题

ios

  • 使用NSJSONSerialization序列化json时当json属性值为null时返回对象为NSNull判断时需注意

  • nil和NSNull还是有区别的nil表示 nil表示引用计数为0的待释放对象,NSNull代表空对象

  • js调用oc代码时使用WkWebKit发送message到指定的handler发送的message需为json格式且不能为空

vue

  • 在使用webpack-parallel-uglify-plugin ^1.1.2打包时出现错误Maximum call stack size exceeded把版本降为1.1.0解决

项目调试

ios

  • 调试webviewsafari浏览器提供了天然的便利,在使用xcode运行程序时可以打开safari浏览器的开发模式察看加载的webview页面

    vue

  • 使用webpack可以对vue前端代码进行热更新,其原理大概为webpack作为服务端与浏览器建立一个长连接,当修改代码保存时webpack会发送更改后的代码片段和更改的位置让浏览器进行替换从而达到即时生效的效果.
  • 使用Fiddler可以更加清楚的看到webpack在进行热更新时发送的包.
  • 在热更新时通过抓包观察这三个文件
    .hot-update.json
    .hot-update.json
    .hot-update.js
  • 了解上述webpack热更新的原理后,因为我们线上使用vue项目都会打包压缩,然后暴露出一个index.html的访问路径来访问我们的vue项目,我们要做的就是如何将app中访问index.html文件的服务器路径更改成我们本地的webpack服务路径.
  • 使用Fidder进行请求的重定向.
  • 拦截我们app中的路径请求转发至webpack服务

    EXACT:http://192.168.1.73/index.html              http://localhost:3000/
    EXACT:http://192.168.1.73/__webpack_hmr           http://localhost:3000/__webpack_hmr
    regex:http://192.168.1.73/([^.]+).js$             http://localhost:3000/$1.js
    regex:http://192.168.1.73/(.+).hot-update.json$   http://localhost:3000/$1.hot-update.json
    regex:http://192.168.1.73/(.+).hot-update.js$     http://localhost:3000/$1.hot-update.js
  • 至此我们就可以在app上进行动态调试并通过webkit调用Cocos查看效果了.
  • 由于登陆部分是在Cocos做的服务器返回的sessionId是通过JS代码传递给Vue的当使用上述转发策略时丢失了这些逻辑,以至于当Vue访问服务端接口时报401,该问题也可以通过Fiddler来解决通过手动更改FiddlerScipt记录登陆成功的sessionId,在后续请求头中带着该sessionId

                                 .
                                 .
                                 .
    static var sessionId: String = null;
    
    static function OnBeforeRequest(oSession: Session) {
                                 .
                                 .
                                 .
       if(oSession.uriContains("/path/") && !oSession.uriContains("/path/login")){
         oSession.oRequest["Cookie"] = sessionId;
       }
    }
                                 .
                                 .
                                 .
    static function OnBeforeResponse(oSession: Session) {
                                 .
                                 .
                                 .
       if(oSession.uriContains("/path/login")){
          sessionId = oSession.oResponse["Set-Cookie"];
       }
    }
    
    

发表评论

电子邮件地址不会被公开。 必填项已用*标注