Cocos2d-x3.0 iOS 一键编译多个target并打包ipa。
2017-04-23 09:29
357 查看
1.编写app打包为ipa的 shell脚本。将以下代码保存为app2ipa.sh。
中必须包括 iOS keyword。Mac的target必须包括 Mac keyword.
好了,我们能够使用例如以下命令编译了
python cocos.py
compile -s /projects/MyGame/proj.ios_mac -m debug -p ios
#!/bin/sh m_appPath="" m_ipaPath="" m_showMessage="NO" make_app_to_ipa() { app_path=$1 ipa_path=$2 if [ "$m_showMessage" == "YES" ] then /usr/bin/xcrun -sdk iphoneos PackageApplication -v "$app_path" -o "$ipa_path" else /usr/bin/xcrun > /dev/null 2>&1 -sdk iphoneos PackageApplication -v "$app_path" -o "$ipa_path" fi echo " >>>> 打包ipa完毕:$ipa_path" } showHelp() { echo "Convert app to ipa" echo "optional arguments:" echo " -h, help show this help message and exit" echo " -a, app app file path " echo " -i, ipa ipa file path " echo " -m,msg display build message, {NO,YES}" exit } #// main-------------------------------- until [ $# -eq 0 ] do case $1 in -a | app) m_appPath=$2 shift ;; -i | ipa) m_ipaPath=$2 shift ;; -m | msg) m_showMessage=$2 shift ;; -h | help) showHelp ;; *) echo "error unknow args : $1" ;; esac shift done #開始构建 echo ">>>>>>>>>> Build Begin " make_app_to_ipa $m_appPath $m_ipaPath echo ">>>>>>>>>> Build Finished . "2.改动cocos2d-x-3.0\tools\cocos2d-console\plugins\project_compile 下的project_compile.py的build_ios方法。build_ios终于代码例如以下。实际上就是遍历targets循环编译。注意事项:iOS的target
中必须包括 iOS keyword。Mac的target必须包括 Mac keyword.
def build_ios(self): if not self._platforms.is_ios_active(): return if not cocos.os_is_mac(): raise cocos.CCPluginError("Please build on MacOSX") self.check_ios_mac_build_depends() project_dir = self._project.get_project_dir() ios_project_dir = self._platforms.project_path() build_mode = self._mode if self._project._is_script_project(): if build_mode == 'debug': output_dir = os.path.join(project_dir, CCPluginCompile.OUTPUT_DIR_SCRIPT_DEBUG, 'ios') else: output_dir = os.path.join(project_dir, CCPluginCompile.OUTPUT_DIR_SCRIPT_RELEASE, 'ios') else: output_dir = os.path.join(project_dir, CCPluginCompile.OUTPUT_DIR_NATIVE, build_mode, 'ios') projectPath = os.path.join(ios_project_dir, self.xcodeproj_name) pbxprojectPath = os.path.join(projectPath, "project.pbxproj") f = file(pbxprojectPath) contents = f.read() section = re.search(r"Begin PBXProject section.*End PBXProject section", contents, re.S) if section is None: message = "Can't find iOS target" raise cocos.CCPluginError(message) targets = re.search(r"targets = (.*);", section.group(), re.S) if targets is None: message = "Can't find iOS target" raise cocos.CCPluginError(message) targetName = None cfg_obj = self._platforms.get_current_config() if cfg_obj.target_name is not None: targetName = cfg_obj.target_name else: names = re.split("\*", targets.group()) for name in names: if "iOS" in name: targetName = str.strip(name) cocos.Logging.info(" >>>>>>>> targetName = %s" % targetName) if targetName is None: message = "Can't find iOS target" raise cocos.CCPluginError(message) if os.path.isdir(output_dir): target_app_dir = os.path.join(output_dir, "%s.app" % targetName[:targetName.find(' ')]) if os.path.isdir(target_app_dir): shutil.rmtree(target_app_dir) cocos.Logging.info("building") command = ' '.join([ "xcodebuild", "-project", "\"%s\"" % projectPath, "-configuration", "%s" % 'Debug' if self._mode is 'debug' else 'Release', "-target", "\"%s\"" % targetName, "-sdk", "iphonesimulator", "-arch i386", "CONFIGURATION_BUILD_DIR=%s" % (output_dir) ]) self._run_cmd(command) # app 转 ipa app_path = os.path.join(output_dir, "%s.app" % targetName[:targetName.find(' ')]) ipa_path = os.path.join(output_dir, "%s.ipa" % targetName[:targetName.find(' ')]) command = ' '.join([ "app2ipa.sh", "-a", "\"%s\"" % app_path, "-i", "\"%s\"" % ipa_path, "-m" ]) cocos.Logging.info(" >>>>> run command %s" % command) self._run_cmd(command) filelist = os.listdir(output_dir) for filename in filelist: name, extention = os.path.splitext(filename) if extention == '.a': filename = os.path.join(output_dir, filename) os.remove(filename) if extention == '.app' and name == targetName: filename = os.path.join(output_dir, filename) newname = os.path.join(output_dir, name[:name.find(' ')]+extention) os.rename(filename, newname) self._iosapp_path = newname if self._no_res: self._remove_res(self._iosapp_path) cocos.Logging.info("build succeeded.")
好了,我们能够使用例如以下命令编译了
python cocos.py
compile -s /projects/MyGame/proj.ios_mac -m debug -p ios
相关文章推荐
- Cocos2d-x3.0 iOS 一键编译多个target并打包ipa。
- Cocos2d-x3.0 iOS 一键编译多个target并打包ipa
- iOS-自动化编译打包ipa脚本
- cocos2d-x3.0 编译android出现的问题笔记 cocos2dx3.0 Android.mk No rule to make target
- iOS-cocos2d-X 游戏开发之七】整合Cocos2dX的Android项目到Xcode项目中,Xcode编写&编译代码,Android导入打包运行即可!
- 使用脚本一键打包iOS应用ipa和上传到ftp服务器
- 编译Cocos2d-x3.0的Test-Cpp demo为apk和ipa程序教程(含下载地址)
- Xcode ,Cocos2d-x,强制横屏,Bundle Identifier ,iOS 打包成.ipa,修改项目名称,同名图片替换总是显示旧图片
- HTML5游戏Android再次编译以及iOS编译和实现打包iPa笔录
- cocos2d-js 3.0 ios平台编译打包
- IOS 如何打包XCODE编译后的APP成IPA格式
- cocos2d-js 3.0 ios平台编译打包
- 【iOS-cocos2d-X 游戏开发之七】整合Cocos2dX的Android项目到Xcode项目中,Xcode编写&编译代码,Android导入打包运行即可!
- 用python编写ios工程自动编译、打包ipa等脚本
- iOS 之xcode报错指南/打包ipa /archive /CommandB编译错误/ 上传APPstore错误
- cocos2d-x 3.0rc2 一键打包各个平台运行 (超级方便)
- 自动编译、安装iOS安装包ipa
- ios 项目打包成ipa
- iOS打包上传ipa文件时,报错<ERROR ITMS-90096: "Your binary is not optimized for iPhone 5 - New iPhone apps......>的解决方案
- 越狱iOS设备利用itms-services协议,实现Safari一键安装IPA