1.编写app打包为ipa的 shell脚本,将下面代码保存为app2ipa.sh。
- #!/bin/sh@H_502_11@@H_502_11@
- @H_502_11@
- m_appPath=""@H_502_11@
- m_ipaPath=""@H_502_11@
- m_showMessage="NO"@H_502_11@
- @H_502_11@
- make_app_to_ipa()@H_502_11@
- {@H_502_11@
- app_path=$1@H_502_11@
- ipa_path=$2@H_502_11@
- if["$m_showMessage"=="YES"]@H_502_11@
- then@H_502_11@
- /usr/bin/xcrun-sdkiphoneosPackageApplication-v"$app_path"-o"$ipa_path"@H_502_11@
- else@H_502_11@
- /usr/bin/xcrun>/dev/null2>&1-sdkiphoneosPackageApplication-v"$app_path"-o"$ipa_path"@H_502_11@
- fi@H_502_11@
- echo">>>>打包ipa完成:$ipa_path"@H_502_11@
- }@H_502_11@
- @H_502_11@
- showHelp()@H_502_11@
- {@H_502_11@
- echo"Convertapptoipa"@H_502_11@
- echo"optionalarguments:"@H_502_11@
- echo"-h,helpshowthishelpmessageandexit"@H_502_11@
- echo"-a,appappfilepath"@H_502_11@
- echo"-i,ipaipafilepath"@H_502_11@
- echo"-m,msgdisplaybuildmessage,{NO,YES}"@H_502_11@
- exit@H_502_11@
- }@H_502_11@
- @H_502_11@
- @H_502_11@
- #//main--------------------------------@H_502_11@
- until[$#-eq0]@H_502_11@
- do@H_502_11@
- case$1in@H_502_11@
- -a|app)@H_502_11@
- m_appPath=$2@H_502_11@
- shift@H_502_11@
- ;;@H_502_11@
- -i|ipa)@H_502_11@
- m_ipaPath=$2@H_502_11@
- shift@H_502_11@
- ;;@H_502_11@
- -m|msg)@H_502_11@
- m_showMessage=$2@H_502_11@
- shift@H_502_11@
- ;;@H_502_11@
- -h|help)@H_502_11@
- showHelp@H_502_11@
- ;;@H_502_11@
- *)@H_502_11@
- echo"errorunknowargs:$1"@H_502_11@
- ;;@H_502_11@
- esac@H_502_11@
- @H_502_11@
- shift@H_502_11@
- done@H_502_11@
- @H_502_11@
- #开始构建@H_502_11@
- echo">>>>>>>>>>BuildBegin"@H_502_11@
- make_app_to_ipa$m_appPath$m_ipaPath@H_502_11@
- echo">>>>>>>>>>BuildFinished."@H_502_11@
- def@H_502_11@build_ios(@H_502_11@self@H_502_11@):@H_502_11@@H_502_11@
- 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@
- return@H_502_11@@H_502_11@@H_502_11@
- @H_502_11@
- if@H_502_11@@H_502_11@not@H_502_11@cocos.os_is_mac():@H_502_11@@H_502_11@
- raise@H_502_11@cocos.CCPluginError(@H_502_11@"PleasebuildonMacOSX"@H_502_11@)@H_502_11@@H_502_11@
- @H_502_11@
- self@H_502_11@.check_ios_mac_build_depends()@H_502_11@@H_502_11@
- @H_502_11@
- project_dir=self@H_502_11@._project.get_project_dir()@H_502_11@@H_502_11@
- ios_project_dir=self@H_502_11@._platforms.project_path()@H_502_11@@H_502_11@
- build_mode=self@H_502_11@._mode@H_502_11@@H_502_11@
- if@H_502_11@@H_502_11@self@H_502_11@._project._is_script_project():@H_502_11@@H_502_11@
- if@H_502_11@build_mode==@H_502_11@'debug'@H_502_11@:@H_502_11@@H_502_11@
- output_dir=os.path.join(project_dir,CCPluginCompile.OUTPUT_DIR_SCRIPT_DEBUG,'ios'@H_502_11@)@H_502_11@@H_502_11@
- else@H_502_11@:@H_502_11@@H_502_11@
- 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@
- @H_502_11@
- projectPath=os.path.join(ios_project_dir,self@H_502_11@.xcodeproj_name)@H_502_11@@H_502_11@
- pbxprojectPath=os.path.join(projectPath,"project.pbxproj"@H_502_11@)@H_502_11@@H_502_11@
- @H_502_11@
- f=file(pbxprojectPath)@H_502_11@
- contents=f.read()@H_502_11@
- @H_502_11@
- section=re.search(r"BeginPBXProjectsection.*EndPBXProjectsection"@H_502_11@,contents,re.S)@H_502_11@@H_502_11@
- @H_502_11@
- 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@
- message="Can'tfindioStarget"@H_502_11@@H_502_11@@H_502_11@
- raise@H_502_11@cocos.CCPluginError(message)@H_502_11@@H_502_11@
- @H_502_11@
- targets=re.search(r"targets=(.*);"@H_502_11@,section.group(),re.S)@H_502_11@@H_502_11@
- 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@
- message="Can'tfindioStarget"@H_502_11@@H_502_11@@H_502_11@
- raise@H_502_11@cocos.CCPluginError(message)@H_502_11@@H_502_11@
- @H_502_11@
- targetName=None@H_502_11@@H_502_11@@H_502_11@
- cfg_obj=self@H_502_11@._platforms.get_current_config()@H_502_11@@H_502_11@
- 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@
- targetName=cfg_obj.target_name@H_502_11@
- else@H_502_11@:@H_502_11@@H_502_11@
- names=re.split("\*"@H_502_11@,targets.group())@H_502_11@@H_502_11@
- for@H_502_11@name@H_502_11@in@H_502_11@names:@H_502_11@@H_502_11@
- 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@
- targetName=str.strip(name)@H_502_11@
- cocos.Logging.info(">>>>>>>>targetName=%s"@H_502_11@%targetName)@H_502_11@@H_502_11@
- 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@
- message="Can'tfindioStarget"@H_502_11@@H_502_11@@H_502_11@
- raise@H_502_11@cocos.CCPluginError(message)@H_502_11@@H_502_11@
- @H_502_11@
- if@H_502_11@os.path.isdir(output_dir):@H_502_11@@H_502_11@
- 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@
- if@H_502_11@os.path.isdir(target_app_dir):@H_502_11@@H_502_11@
- shutil.rmtree(target_app_dir)@H_502_11@
- @H_502_11@
- cocos.Logging.info("building"@H_502_11@)@H_502_11@@H_502_11@
- @H_502_11@
- command=''@H_502_11@.join([@H_502_11@@H_502_11@
- "xcodebuild"@H_502_11@,@H_502_11@@H_502_11@
- "-project"@H_502_11@,@H_502_11@@H_502_11@
- "\"%s\""@H_502_11@%projectPath,@H_502_11@@H_502_11@
- "-configuration"@H_502_11@,@H_502_11@@H_502_11@
- "%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@
- "-target"@H_502_11@,@H_502_11@@H_502_11@
- "\"%s\""@H_502_11@%targetName,@H_502_11@@H_502_11@
- "-sdk"@H_502_11@,@H_502_11@@H_502_11@
- "iphonesimulator"@H_502_11@,@H_502_11@@H_502_11@
- "-archi386"@H_502_11@,@H_502_11@@H_502_11@
- "CONFIGURATION_BUILD_DIR=%s"@H_502_11@%(output_dir)@H_502_11@@H_502_11@
- ])@H_502_11@
- @H_502_11@
- self@H_502_11@._run_cmd(command)@H_502_11@@H_502_11@
- #app转ipa@H_502_11@@H_502_11@@H_502_11@
- 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@
- 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@
- command=''@H_502_11@.join([@H_502_11@@H_502_11@
- "app2ipa.sh"@H_502_11@,@H_502_11@@H_502_11@
- "-a"@H_502_11@,@H_502_11@@H_502_11@
- "\"%s\""@H_502_11@%app_path,@H_502_11@@H_502_11@
- "-i"@H_502_11@,@H_502_11@@H_502_11@
- "\"%s\""@H_502_11@%ipa_path,@H_502_11@@H_502_11@
- "-m"@H_502_11@@H_502_11@@H_502_11@
- ])@H_502_11@
- cocos.Logging.info(">>>>>runcommand%s"@H_502_11@%command)@H_502_11@@H_502_11@
- self@H_502_11@._run_cmd(command)@H_502_11@@H_502_11@
- @H_502_11@
- filelist=os.listdir(output_dir)@H_502_11@
- @H_502_11@
- for@H_502_11@filename@H_502_11@in@H_502_11@filelist:@H_502_11@@H_502_11@
- name,extention=os.path.splitext(filename)@H_502_11@
- if@H_502_11@extention==@H_502_11@'.a'@H_502_11@:@H_502_11@@H_502_11@
- filename=os.path.join(output_dir,filename)@H_502_11@
- os.remove(filename)@H_502_11@
- 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@
- filename=os.path.join(output_dir,filename)@H_502_11@
- newname=os.path.join(output_dir,name[:name.find(''@H_502_11@)]+extention)@H_502_11@@H_502_11@
- os.rename(filename,newname)@H_502_11@
- self@H_502_11@._iosapp_path=newname@H_502_11@@H_502_11@
- @H_502_11@
- if@H_502_11@@H_502_11@self@H_502_11@._no_res:@H_502_11@@H_502_11@
- self@H_502_11@._remove_res(@H_502_11@self@H_502_11@._iosapp_path)@H_502_11@@H_502_11@
- @H_502_11@
- 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@