Cocos2d-x3.0 iOS 一键编译多个target并打包ipa

前端之家收集整理的这篇文章主要介绍了Cocos2d-x3.0 iOS 一键编译多个target并打包ipa前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1.编写app打包为ipa的 shell脚本,将下面代码保存为app2ipa.sh。

[plain] view plain copy@H_502_11@ @H_502_11@ @H_502_11@ @H_502_11@
  1. #!/bin/sh@H_502_11@@H_502_11@
  2. @H_502_11@
  3. m_appPath=""@H_502_11@
  4. m_ipaPath=""@H_502_11@
  5. m_showMessage="NO"@H_502_11@
  6. @H_502_11@
  7. make_app_to_ipa()@H_502_11@
  8. {@H_502_11@
  9. app_path=$1@H_502_11@
  10. ipa_path=$2@H_502_11@
  11. if["$m_showMessage"=="YES"]@H_502_11@
  12. then@H_502_11@
  13. /usr/bin/xcrun-sdkiphoneosPackageApplication-v"$app_path"-o"$ipa_path"@H_502_11@
  14. else@H_502_11@
  15. /usr/bin/xcrun>/dev/null2>&1-sdkiphoneosPackageApplication-v"$app_path"-o"$ipa_path"@H_502_11@
  16. fi@H_502_11@
  17. echo">>>>打包ipa完成:$ipa_path"@H_502_11@
  18. }@H_502_11@
  19. @H_502_11@
  20. showHelp()@H_502_11@
  21. {@H_502_11@
  22. echo"Convertapptoipa"@H_502_11@
  23. echo"optionalarguments:"@H_502_11@
  24. echo"-h,helpshowthishelpmessageandexit"@H_502_11@
  25. echo"-a,appappfilepath"@H_502_11@
  26. echo"-i,ipaipafilepath"@H_502_11@
  27. echo"-m,msgdisplaybuildmessage,{NO,YES}"@H_502_11@
  28. exit@H_502_11@
  29. }@H_502_11@
  30. @H_502_11@
  31. @H_502_11@
  32. #//main--------------------------------@H_502_11@
  33. until[$#-eq0]@H_502_11@
  34. do@H_502_11@
  35. case$1in@H_502_11@
  36. -a|app)@H_502_11@
  37. m_appPath=$2@H_502_11@
  38. shift@H_502_11@
  39. ;;@H_502_11@
  40. -i|ipa)@H_502_11@
  41. m_ipaPath=$2@H_502_11@
  42. shift@H_502_11@
  43. ;;@H_502_11@
  44. -m|msg)@H_502_11@
  45. m_showMessage=$2@H_502_11@
  46. shift@H_502_11@
  47. ;;@H_502_11@
  48. -h|help)@H_502_11@
  49. showHelp@H_502_11@
  50. ;;@H_502_11@
  51. *)@H_502_11@
  52. echo"errorunknowargs:$1"@H_502_11@
  53. ;;@H_502_11@
  54. esac@H_502_11@
  55. @H_502_11@
  56. shift@H_502_11@
  57. done@H_502_11@
  58. @H_502_11@
  59. #开始构建@H_502_11@
  60. echo">>>>>>>>>>BuildBegin"@H_502_11@
  61. make_app_to_ipa$m_appPath$m_ipaPath@H_502_11@
  62. echo">>>>>>>>>>BuildFinished."@H_502_11@
2. 修改cocos2d-x-3.0\tools\cocos2d-console\plugins\project_compile 下的project_compile.py的build_ios方法,build_ios最终代码如下,实际上就是遍历targets循环编译,注意事项:iOS的target 中必须包含 iOS 关键字。Mac的target必须包含 Mac 关键字.@H_502_11@

@H_502_11@@H_502_11@

[python] view plain copy@H_502_11@ @H_502_11@ @H_502_11@ @H_502_11@
  1. def@H_502_11@build_ios(@H_502_11@self@H_502_11@):@H_502_11@@H_502_11@
  2. if@H_502_11@@H_502_11@not@H_502_11@@H_502_11@self@H_502_11@._platforms.is_ios_active():@H_502_11@@H_502_11@
  3. return@H_502_11@@H_502_11@@H_502_11@
  4. @H_502_11@
  5. if@H_502_11@@H_502_11@not@H_502_11@cocos.os_is_mac():@H_502_11@@H_502_11@
  6. raise@H_502_11@cocos.CCPluginError(@H_502_11@"PleasebuildonMacOSX"@H_502_11@)@H_502_11@@H_502_11@
  7. @H_502_11@
  8. self@H_502_11@.check_ios_mac_build_depends()@H_502_11@@H_502_11@
  9. @H_502_11@
  10. project_dir=self@H_502_11@._project.get_project_dir()@H_502_11@@H_502_11@
  11. ios_project_dir=self@H_502_11@._platforms.project_path()@H_502_11@@H_502_11@
  12. build_mode=self@H_502_11@._mode@H_502_11@@H_502_11@
  13. if@H_502_11@@H_502_11@self@H_502_11@._project._is_script_project():@H_502_11@@H_502_11@
  14. if@H_502_11@build_mode==@H_502_11@'debug'@H_502_11@:@H_502_11@@H_502_11@
  15. output_dir=os.path.join(project_dir,CCPluginCompile.OUTPUT_DIR_SCRIPT_DEBUG,'ios'@H_502_11@)@H_502_11@@H_502_11@
  16. else@H_502_11@:@H_502_11@@H_502_11@
  17. output_dir=os.path.join(project_dir,CCPluginCompile.OUTPUT_DIR_SCRIPT_RELEASE,CCPluginCompile.OUTPUT_DIR_NATIVE,build_mode,'ios'@H_502_11@)@H_502_11@@H_502_11@
  18. @H_502_11@
  19. projectPath=os.path.join(ios_project_dir,self@H_502_11@.xcodeproj_name)@H_502_11@@H_502_11@
  20. pbxprojectPath=os.path.join(projectPath,"project.pbxproj"@H_502_11@)@H_502_11@@H_502_11@
  21. @H_502_11@
  22. f=file(pbxprojectPath)@H_502_11@
  23. contents=f.read()@H_502_11@
  24. @H_502_11@
  25. section=re.search(r"BeginPBXProjectsection.*EndPBXProjectsection"@H_502_11@,contents,re.S)@H_502_11@@H_502_11@
  26. @H_502_11@
  27. if@H_502_11@section@H_502_11@is@H_502_11@@H_502_11@None@H_502_11@:@H_502_11@@H_502_11@
  28. message="Can'tfindioStarget"@H_502_11@@H_502_11@@H_502_11@
  29. raise@H_502_11@cocos.CCPluginError(message)@H_502_11@@H_502_11@
  30. @H_502_11@
  31. targets=re.search(r"targets=(.*);"@H_502_11@,section.group(),re.S)@H_502_11@@H_502_11@
  32. if@H_502_11@targets@H_502_11@is@H_502_11@@H_502_11@None@H_502_11@:@H_502_11@@H_502_11@
  33. message="Can'tfindioStarget"@H_502_11@@H_502_11@@H_502_11@
  34. raise@H_502_11@cocos.CCPluginError(message)@H_502_11@@H_502_11@
  35. @H_502_11@
  36. targetName=None@H_502_11@@H_502_11@@H_502_11@
  37. cfg_obj=self@H_502_11@._platforms.get_current_config()@H_502_11@@H_502_11@
  38. if@H_502_11@cfg_obj.target_name@H_502_11@is@H_502_11@@H_502_11@not@H_502_11@@H_502_11@None@H_502_11@:@H_502_11@@H_502_11@
  39. targetName=cfg_obj.target_name@H_502_11@
  40. else@H_502_11@:@H_502_11@@H_502_11@
  41. names=re.split("\*"@H_502_11@,targets.group())@H_502_11@@H_502_11@
  42. for@H_502_11@name@H_502_11@in@H_502_11@names:@H_502_11@@H_502_11@
  43. if@H_502_11@@H_502_11@"iOS"@H_502_11@@H_502_11@in@H_502_11@name:@H_502_11@@H_502_11@
  44. targetName=str.strip(name)@H_502_11@
  45. cocos.Logging.info(">>>>>>>>targetName=%s"@H_502_11@%targetName)@H_502_11@@H_502_11@
  46. if@H_502_11@targetName@H_502_11@is@H_502_11@@H_502_11@None@H_502_11@:@H_502_11@@H_502_11@
  47. message="Can'tfindioStarget"@H_502_11@@H_502_11@@H_502_11@
  48. raise@H_502_11@cocos.CCPluginError(message)@H_502_11@@H_502_11@
  49. @H_502_11@
  50. if@H_502_11@os.path.isdir(output_dir):@H_502_11@@H_502_11@
  51. target_app_dir=os.path.join(output_dir,"%s.app"@H_502_11@%targetName[:targetName.find(@H_502_11@''@H_502_11@)])@H_502_11@@H_502_11@
  52. if@H_502_11@os.path.isdir(target_app_dir):@H_502_11@@H_502_11@
  53. shutil.rmtree(target_app_dir)@H_502_11@
  54. @H_502_11@
  55. cocos.Logging.info("building"@H_502_11@)@H_502_11@@H_502_11@
  56. @H_502_11@
  57. command=''@H_502_11@.join([@H_502_11@@H_502_11@
  58. "xcodebuild"@H_502_11@,@H_502_11@@H_502_11@
  59. "-project"@H_502_11@,@H_502_11@@H_502_11@
  60. "\"%s\""@H_502_11@%projectPath,@H_502_11@@H_502_11@
  61. "-configuration"@H_502_11@,@H_502_11@@H_502_11@
  62. "%s"@H_502_11@%@H_502_11@'Debug'@H_502_11@@H_502_11@if@H_502_11@@H_502_11@self@H_502_11@._mode@H_502_11@is@H_502_11@@H_502_11@'debug'@H_502_11@@H_502_11@else@H_502_11@@H_502_11@'Release'@H_502_11@,@H_502_11@@H_502_11@
  63. "-target"@H_502_11@,@H_502_11@@H_502_11@
  64. "\"%s\""@H_502_11@%targetName,@H_502_11@@H_502_11@
  65. "-sdk"@H_502_11@,@H_502_11@@H_502_11@
  66. "iphonesimulator"@H_502_11@,@H_502_11@@H_502_11@
  67. "-archi386"@H_502_11@,@H_502_11@@H_502_11@
  68. "CONFIGURATION_BUILD_DIR=%s"@H_502_11@%(output_dir)@H_502_11@@H_502_11@
  69. ])@H_502_11@
  70. @H_502_11@
  71. self@H_502_11@._run_cmd(command)@H_502_11@@H_502_11@
  72. #app转ipa@H_502_11@@H_502_11@@H_502_11@
  73. app_path=os.path.join(output_dir,"%s.app"@H_502_11@%targetName[:targetName.find(@H_502_11@''@H_502_11@)])@H_502_11@@H_502_11@
  74. ipa_path=os.path.join(output_dir,"%s.ipa"@H_502_11@%targetName[:targetName.find(@H_502_11@''@H_502_11@)])@H_502_11@@H_502_11@
  75. command=''@H_502_11@.join([@H_502_11@@H_502_11@
  76. "app2ipa.sh"@H_502_11@,@H_502_11@@H_502_11@
  77. "-a"@H_502_11@,@H_502_11@@H_502_11@
  78. "\"%s\""@H_502_11@%app_path,@H_502_11@@H_502_11@
  79. "-i"@H_502_11@,@H_502_11@@H_502_11@
  80. "\"%s\""@H_502_11@%ipa_path,@H_502_11@@H_502_11@
  81. "-m"@H_502_11@@H_502_11@@H_502_11@
  82. ])@H_502_11@
  83. cocos.Logging.info(">>>>>runcommand%s"@H_502_11@%command)@H_502_11@@H_502_11@
  84. self@H_502_11@._run_cmd(command)@H_502_11@@H_502_11@
  85. @H_502_11@
  86. filelist=os.listdir(output_dir)@H_502_11@
  87. @H_502_11@
  88. for@H_502_11@filename@H_502_11@in@H_502_11@filelist:@H_502_11@@H_502_11@
  89. name,extention=os.path.splitext(filename)@H_502_11@
  90. if@H_502_11@extention==@H_502_11@'.a'@H_502_11@:@H_502_11@@H_502_11@
  91. filename=os.path.join(output_dir,filename)@H_502_11@
  92. os.remove(filename)@H_502_11@
  93. if@H_502_11@extention==@H_502_11@'.app'@H_502_11@@H_502_11@and@H_502_11@name==targetName:@H_502_11@@H_502_11@
  94. filename=os.path.join(output_dir,filename)@H_502_11@
  95. newname=os.path.join(output_dir,name[:name.find(''@H_502_11@)]+extention)@H_502_11@@H_502_11@
  96. os.rename(filename,newname)@H_502_11@
  97. self@H_502_11@._iosapp_path=newname@H_502_11@@H_502_11@
  98. @H_502_11@
  99. if@H_502_11@@H_502_11@self@H_502_11@._no_res:@H_502_11@@H_502_11@
  100. self@H_502_11@._remove_res(@H_502_11@self@H_502_11@._iosapp_path)@H_502_11@@H_502_11@
  101. @H_502_11@
  102. cocos.Logging.info("buildsucceeded."@H_502_11@)@H_502_11@@H_502_11@

好了,我们可以使用如下命令编译了

Python cocos.py compile -s /projects/MyGame/proj.ios_mac -m debug -p iOS@H_502_11@@H_502_11@@H_502_11@

猜你在找的Cocos2d-x相关文章