Beispiel #1
0
    def updateNameWin(self,isHd,isAuto):
        strOld = "_APP_NAME_"
        rootConfig = mainResource.GetProjectConfigApp()
        project = rootConfig + "/win/project"
        if isHd:
            project = rootConfig + "/win/project_hd"

        file_name_cn = project + "/strings/zh-cn/resources.resw"
        file_name_en= project + "/strings/en-us/resources.resw"

        data = self.loadJson(isHd)
        isOld = self.IsOldVersion(data)
        
        if not isOld : 
            appname = data["appname"]

        if isOld:
            APP_NAME_CN= data["APP_NAME_CN_ANDROID"]
            APP_NAME_EN = data["APP_NAME_EN_ANDROID"]
            PACKAGE = data["PACKAGE_ANDROID"]
        else:
            APP_NAME_CN = appname["android"]["cn"]
            APP_NAME_EN = appname["android"]["en"]
            PACKAGE = data["apppackage"]["android"]["default"]
    
        # cn
        self.replaceFile(file_name_cn, strOld, APP_NAME_CN)
        # en
        self.replaceFile(file_name_en, strOld, APP_NAME_EN)

        
    
        filepath= project + "/strings/mainResource.resw"
        if os.path.exists(filepath):
            self.replaceFile(filepath, "_APP_PACKAGE_", PACKAGE)
    def Run(self, isHd):
        print("UpdateAppstore Run")
        gameName = mainResource.getGameName()
        gameType = mainResource.getGameType()

        print(gameName)
        print(gameType)

        if len(sys.argv) > 2:
            if sys.argv[2] == "delete_screenshot":
                # delete_screenshots()
                sys.exit(0)

        #先从default 拷贝 文件模版
        dir_default = mainResource.GetProjectConfigDefault()
        dir_to = mainResource.GetProjectConfigApp()
        dir1 = dir_default + "/appstore"
        dir2 = dir_to + "/appstore"
        flag = os.path.exists(dir2)
        print("UpdateAppstore dir1=" + dir1 + "dir2=" + dir2)
        if flag:
            shutil.rmtree(dir2)

        shutil.copytree(dir1, dir2)

        # self.copy_screenshots()

        self.updateAppstore(isHd)
        # self.updateAppstore(True)

        print("UpdateAppstore sucess")
    def loadJson(self, isHd):
        cur_path = mainResource.GetProjectConfigApp() + "/appinfo"
        jsonfile = cur_path + '/appinfo.json'
        if isHd:
            jsonfile = cur_path + '/appinfo_hd.json'

        with open(jsonfile) as json_file:
            data = json.load(json_file)
            return data
    def DeleteInAppPurchasesScreenshot(self, isHd):
        rootConfig = mainResource.GetProjectConfigApp()
        dst = rootConfig + "/appstore/ios/app.itmsp"
        if isHd:
            dst = rootConfig + "/appstore/ios/app_pad.itmsp"
        filepath = dst + "/in_app_purchases_screenshot.png"

        if os.path.exists(filepath):
            os.remove(filepath)
 def getScreenshotFullFilePath(self, isHd, device, language, idx):
     strDir_itmsp = "app.itmsp"
     if isHd:
         strDir_itmsp = "app_pad.itmsp"
     strDirRootTo = mainResource.GetProjectConfigApp(
     ) + "/appstore/ios/" + strDir_itmsp
     strFileTo = strDirRootTo + "/" + self.getScreenshotFileName(
         device, language, idx)
     return strFileTo
    def UploadIAPInfo(self, isHd, stros):
        package = mainAppInfo.GetAppPackage(stros, isHd)
        rootJson = self.LoadJsonIAP(isHd, stros)
        rootConfig = mainResource.GetProjectConfigDefault()
        striap = FileUtil.GetFileString(rootConfig + "/appstore/KEY_IAP.xml")

        listIAP = []
        for item in rootJson["items"]:
            if item["isSkip"]:
                continue

            name = item["key"]
            striap = striap.replace("_NAME_", name)
            product_id = package + "." + item["id"]
            striap = striap.replace("_ID_", product_id)

            # consumable non-consumable
            isConsume = item["isConsume"]
            product_type = "non-consumable"
            if isConsume:
                product_type = "consumable"

            striap = striap.replace("_TYPE_", product_type)

            title_cn = item["title"]["cn"]
            striap = striap.replace("_TITLE_CN_", title_cn)
            title_en = item["title"]["en"]
            striap = striap.replace("_TITLE_EN_", title_en)

            title_cn = item["detail"]["cn"]
            striap = striap.replace("_DETAIL_CN_", title_cn)
            title_en = item["detail"]["en"]
            striap = striap.replace("_DETAIL_EN_", title_en)

            price = item["price_tier"]
            striap = striap.replace("_PRICE_", price)

            listIAP.append(striap)

        str_metadata_xml = FileUtil.GetFileString(rootConfig +
                                                  "/appstore/IAP_metadata.xml")
        str_metadata_xml = str_metadata_xml.replace(
            "_VENDOR_ID_", mainAppInfo.GetAppSKU(isHd))
        strkeyiap = ""
        for strtmp in listIAP:
            strkeyiap += strtmp

        str_metadata_xml = str_metadata_xml.replace("_KEY_IAP_", strkeyiap)

        rootConfig = mainResource.GetProjectConfigApp()
        file_metadata_ios = rootConfig + "/appstore/ios/app.itmsp/metadata.xml"
        if isHd:
            file_metadata_ios = rootConfig + "/appstore/ios/app_pad.itmsp/metadata.xml"

        FileUtil.SaveString2File(str_metadata_xml, file_metadata_ios)
        mainAppstoreUploadiOS.Run(isHd)
Beispiel #7
0
    def copyResFiles(self,str):
        dir_default = mainResource.GetProjectConfigDefault()
        # "../../../default"
        dir_to = mainResource.GetProjectConfigApp()

        dir1 = dir_default+"/"+str
        dir2 = dir_to + "/"+str
        print(dir2)
        flag = os.path.exists(dir2)
        if flag:
            shutil.rmtree(dir2)
        shutil.copytree(dir1,dir2)
Beispiel #8
0
    def GetAppDetail(self,isHd,lan): 
        src = mainResource.GetProjectConfigApp()+"/appinfo/app_description.xml"
        if isHd:
            src = mainResource.GetProjectConfigApp()+"/appinfo/app_description_hd.xml"

        domTree = parse(src)
        # 文档根元素root = domTree.documentElement
        root = domTree.documentElement
        # print(root.nodeName)
        
        strret =" " 
        key = lan
        # if lan==Source.LANGUAGE_CN:
        #     key = "cn"

        list = root.getElementsByTagName(key)
        for item in list:
            strret = item.childNodes[0].data 

        # print(strret)
        return strret
    def CopyInAppPurchasesScreenshot(self, isHd):
        # src =mainResource.GetProjectConfig() + "/default/appstore/in_app_purchases_screenshot.png"
        src = mainResource.GetDirProductCommon(
        ) + "/in_app_purchases_screenshot.png"
        rootConfig = mainResource.GetProjectConfigApp()
        dst = rootConfig + "/appstore/ios/app.itmsp"
        if isHd:
            dst = rootConfig + "/appstore/ios/app_pad.itmsp"
        dst = dst + "/in_app_purchases_screenshot.png"

        if not os.path.isfile(dst):
            shutil.copyfile(src, dst)
Beispiel #10
0
    def MakeGuideDoc(self, isHd):
        title = mainAppInfo.GetAppName(Source.ANDROID, isHd,
                                       Source.LANGUAGE_CN) + "V1.0.0"
        detail = mainAppInfo.GetAppDetail(isHd, Source.LANGUAGE_CN)
        # detail +="/n"
        detail += mainAppInfo.GetAppDetail(isHd, Source.LANGUAGE_EN)

        outputdir = mainResource.GetProjectOutPutApp()
        FileUtil.CreateDir(outputdir)

        docoutput = outputdir + "/" + mainResource.getGameType(
        ) + "_guide.docx"
        dirscreenshot = mainResource.GetProjectOutPutApp(
        ) + "/screenshot/shu/cn/1080p"
        filedetail = mainResource.GetProjectConfigApp(
        ) + "/appinfo/app_description.xml"
        if isHd:
            dirscreenshot = mainResource.GetProjectOutPutApp(
            ) + "/screenshot/heng/cn/1080p"
            filedetail = mainResource.GetProjectConfigApp(
            ) + "/appinfo/app_description_hd.xml"
            docoutput = outputdir + "/" + mainResource.getGameType(
            ) + "_guide_hd.docx"

        filedst = dirscreenshot + "/detail.xml"
        FileUtil.SaveString2File(detail, filedst)
        # FileUtil.CopyFile(filedetail,filedst)
        cmd = "pyerz -e xml -i " + dirscreenshot + " -o " + docoutput + " -t " + title + " --font-size 16 --space-before 2 --space-after 10 --line-spacing 16 "
        # print("cmd=",cmd)
        for i in range(5):
            pic = dirscreenshot + "/" + str(i + 1) + ".jpg"
            if os.path.exists(pic):
                cmd += " -pic " + pic

        os.system(cmd)

        os.remove(filedst)

        self.WordToPdf(docoutput)
    def loadXmlDescription(self, isHd):
        cur_path = mainResource.GetProjectConfigApp() + "/appinfo"
        xmlfile = cur_path + '/app_description.xml'
        if isHd:
            xmlfile = cur_path + '/app_description_hd.xml'

        tree = ET.parse(xmlfile)
        root = tree.getroot()

        # cn = root.find('en')
        # print cn.tag
        # print cn.text

        return root
    def DeleteAllScreenshots(self, isHd):
        verison = mainAppInfo.GetAppVersion(Source.IOS, isHd)

        rootConfig = mainResource.GetProjectConfigDefault()
        str_metadata_xml = FileUtil.GetFileString(
            rootConfig + "/appstore/metadata_clear_screenshots.xml")
        str_metadata_xml = str_metadata_xml.replace(
            "_VENDOR_ID_", mainAppInfo.GetAppSKU(isHd))
        str_metadata_xml = str_metadata_xml.replace("_VERSION_", verison)

        rootConfig = mainResource.GetProjectConfigApp()
        file_metadata_ios = rootConfig + "/appstore/ios/app.itmsp/metadata.xml"
        if isHd:
            file_metadata_ios = rootConfig + "/appstore/ios/app_pad.itmsp/metadata.xml"

        FileUtil.SaveString2File(str_metadata_xml, file_metadata_ios)
        mainAppstoreUploadiOS.Run(isHd)
Beispiel #13
0
    def Run(self, isHD):
        strFile = "app.itmsp"
        if isHD:
            strFile = "app_pad.itmsp"

        if Platform.isWindowsSystem():
            strCmd = " "
        else:
            if mainIPABuild.IsXcode10():
                strCmd = "/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m upload -u " + Source.APPSTORE_USER + " -p " + Source.APPSTORE_PASSWORD + "  -v eXtreme -f " + mainResource.GetProjectConfigApp(
                ) + "/appstore/ios/" + strFile
            else:
                #xcode 11: 手动更新Transporter组件(java)方法: https://www.lagou.com/lgeduarticle/94642.html
                strCmd = "/Applications/Transporter.app/Contents/itms/bin/iTMSTransporter -m upload -u " + Source.APPSTORE_USER + " -p " + Source.APPSTORE_PASSWORD + "  -v eXtreme -f " + mainResource.GetProjectConfigApp(
                ) + "/appstore/ios/" + strFile
        os.system(strCmd)

        print("appstore_upload_ios sucess")
Beispiel #14
0
 def GetJsonFileConVert(self,isHd):
     cur_path = mainResource.GetProjectConfigApp()+"/appinfo"
     jsonfile = cur_path+'/appinfo.json'
     if isHd:
         jsonfile = cur_path+'/appinfo_hd.json'
     return jsonfile
Beispiel #15
0
    def UpdateChannel(self, channel, ishd):
        print("updateChannel")
        # project_config = common.GetProjectConfigApp() + "/android" + "/gradle"
        targetDir = mainResource.GetRootDirAndroidStudio()
        sourceDir = mainResource.GetProjectConfigApp()
        project_android = "android/project"
        project_android_common = project_android
        rootAndroidStudio = mainResource.GetRootDirAndroidStudio()
        targetDir = rootAndroidStudio + "/src/main"

        if ishd == True:
            project_android = "android/project_hd"

        if channel == Source.GP:
            # self.MakeGooglePlayObbFile(ishd)
            if mainConfig.IsCloudRes():
                self.DeleteAndroidAssetGameRes()

            mainConfigSDKAndroid.SetShareSdk(False)
            mainConfigSDKAndroid.SetAdSdk(Source.ADMOB, True)
            mainConfigSDKAndroid.SetAdSdk(Source.ADVIEW, False)
            mainConfigSDKAndroid.SetAdSdk(Source.GDT, False)
            mainConfigSDKAndroid.SetAdSdk(Source.BAIDU, False)
            mainConfigSDKAndroid.SetAdSdk(Source.XIAOMI, False)
            enable = True
            if mainConfig.IsForKid():
                enable = False
            print("mainConfig.IsForKid()=", mainConfig.IsForKid())
            # enable = False
            mainConfigSDKAndroid.SetAdSdk(Source.UNITY, enable)
            mainConfigSDKAndroid.SetAdSdk(Source.MOBVISTA, False)
            #
            project_config = sourceDir + "/" + project_android + "/config"
            xml = sourceDir + "/" + project_android + "/xml_gp"

        else:
            xml = sourceDir + "/" + project_android + "/xml"
            mainConfigSDKAndroid.SetAdSdk(Source.ADMOB, True)
            mainConfigSDKAndroid.SetAdSdk(Source.MOBVISTA, False)
            mainConfigSDKAndroid.SetAdSdk(Source.UNITY, True)
            mainConfigSDKAndroid.SetAdSdk(Source.BAIDU, True)

            # True
            mainConfigSDKAndroid.SetShareSdk(False)

            #
            project_config = sourceDir + "/" + project_android + "/config"

        FileUtil.CoverFiles(project_config, targetDir)
        FileUtil.CoverFiles(xml, targetDir)

        build_gradle = mainResource.GetProjectConfigApp(
        ) + "/android" + "/gradle/build"
        # or (channel == Source.GP)
        # if (channel == Source.TAPTAP) :
        #     build_gradle = build_gradle+"_"+channel
        if (channel == Source.GP):
            build_gradle = build_gradle + "_" + channel

        build_gradle = build_gradle + ".gradle"

        #配置build.grade
        #common.coverFiles(build_gradle,   targetDir)

        build_gradle_dst = rootAndroidStudio + "/build.gradle"
        flag = os.path.exists(build_gradle_dst)
        if flag:
            os.remove(build_gradle_dst)

        FileUtil.CopyOneFile(build_gradle, build_gradle_dst)

        #  "channel_android": "xiaomi"
        file = self.getConfigJsonFile()
        print("channel_android=" + file)
        strStart = "channel_android\": \""
        strEnd = "\""
        strOut = self.replaceStringOfFile(file, strStart, strEnd, channel)
        FileUtil.SaveString2File(strOut, file)
Beispiel #16
0
 def GetJsonFile(self,isHd):
     cur_path = mainResource.GetProjectConfigApp()+"/appinfo"
     jsonfile = cur_path+'/appinfo.json'
     if isHd:
         jsonfile = cur_path+'/appinfo_hd.json'
     return os.path.normpath(jsonfile)
Beispiel #17
0
    def updateName(self,isHd,isAuto):

        name = mainAppInfo.GetAppStoreAcount(isHd,Source.HUAWEI)
        mainHuaweiAppGalleryApi.ClientId = mainAppStoreAcount.GetClientId(Source.HUAWEI,name)
        mainHuaweiAppGalleryApi.ClientSecret = mainAppStoreAcount.GetClientSecret(Source.HUAWEI,name) 
        
        appinfoOld = AppInfoOld(isHd)
        if appinfoOld.IsOldVersion():
            # 转换
            self.ConvertOld2New(isHd,appinfoOld)


        rootConfig = mainResource.GetProjectConfigApp()
        strHD = "HD"

        project_ios = rootConfig + "/ios/project"
        project_android = rootConfig + "/android/project"

        if isHd:
            project_ios = rootConfig + "/ios/project_hd"
            project_android = rootConfig + "/android/project_hd"

        # android
        file_name_cn_android = project_android + "/res/values/strings.xml"
        file_name_en_android = project_android + "/res/values-en/strings.xml"
        file_AndroidManifest = project_android + "/xml/AndroidManifest.xml"
        file_AndroidManifest_GP = project_android + "/xml_gp/AndroidManifest.xml"
        

        file_google_service_android = project_android + "/config/google-services.json"

        # ios
        file_name_cn_ios = project_ios + "/appname/zh-Hans.lproj/InfoPlist.strings"
        file_name_en_ios = project_ios + "/appname/en.lproj/InfoPlist.strings"
        file_info_plist_ios = project_ios + "/Info.plist"

        # loadJson
        data = self.loadJson(isHd) 

        
        appname = data["appname"]
 
        APP_NAME_CN_ANDROID = appname[Source.ANDROID]["cn"]
        APP_NAME_EN_ANDROID = appname[Source.ANDROID]["en"]
        APP_NAME_CN_IOS = appname[Source.IOS]["cn"]
        APP_NAME_EN_IOS = appname[Source.IOS]["en"]       
        PACKAGE_ANDROID = data["apppackage"][Source.ANDROID]["default"]
        PACKAGE_IOS = data["apppackage"][Source.IOS]["default"]
        self.versionCode = data["appversion"][Source.ANDROID]["code"]
        APPVERSION_IOS =  data["appversion"][Source.IOS]["value"]
        
        #appid 
        appid_ios = self.GetJsonAppId(data,Source.APPSTORE)
        appid_taptap = self.GetJsonAppId(data,Source.TAPTAP)
        appid_huawei = self.GetJsonAppId(data,Source.HUAWEI)
        self.SetConfigDataAppId(Source.IOS,Source.APPSTORE,appid_ios,isHd)
        self.SetConfigDataAppId(Source.ANDROID,Source.TAPTAP,appid_taptap,isHd)
        self.SetConfigDataAppId(Source.ANDROID,Source.HUAWEI,appid_huawei,isHd)

        csvfile = mainResource.GetConfigDataDir()+"/language/language.csv" 
        self.UpdateLanguageName(csvfile,APP_NAME_CN_ANDROID,APP_NAME_EN_ANDROID,isHd)

        csvfile = mainResource.GetRootUnityAssetsResource()+"/ConfigData/language/language.csv" 
        self.UpdateLanguageName(csvfile,APP_NAME_CN_ANDROID,APP_NAME_EN_ANDROID,isHd)

        
        # if data.has_key("PACKAGE_HD_ANDROID"):
        #     PACKAGE_HD_ANDROID = data["PACKAGE_HD_ANDROID"]


        
    
        if isAuto==True: 
            self.autoPlusVersion(isHd,data)
            # 重新加载
            data = self.loadJson(isHd)
            APPVERSION_IOS =  data["appversion"][Source.IOS]["value"]
          
            self.versionCode = data["appversion"][Source.ANDROID]["code"]

        APPVERSION_ANDROID = self.versionCodeToVersion(self.versionCode)
        APPVERSION_CODE_ANDROID = self.versionCode
        

        # appversion.json
        if isAuto==False: 
            src = mainResource.GetProjectConfigDefault()+"/appinfo/appversion.json"
            dst = mainResource.GetProjectConfigApp()+"/appinfo/appversion.json"
            flag = os.path.exists(dst)
            # 
            if not isHd:
                shutil.copyfile(src,dst)

            strfile = FileUtil.GetFileString(dst)
            key = "_VERSION_ANDROID_"
            if isHd:
                key = "_VERSION_HD_ANDROID_"

            # 保存版本
            # android
            print("appid_huawei=",appid_huawei+" ishd=",isHd)
            # if len(appid_huawei)>1: 
            version_web = mainHuaweiAppGalleryApi.GetVersion(appid_huawei)
            strfile = strfile.replace(key,version_web) 
            FileUtil.SaveString2File(strfile,dst)
            self.SetAppVersion(isHd,Source.ANDROID,version_web)
            strcode = version_web.replace(".","")
            self.SetAppVersionCode(isHd,Source.ANDROID,strcode)
                
                
       

            # ios
            appid_apple = self.GetJsonAppId(data,Source.APPSTORE)
            version_web = mainAppVersionApple.ParseVersion(appid_apple)
            print("AppVersionApple=",version_web+" appid_apple=",appid_apple)
            self.SetAppVersion(isHd,Source.IOS,version_web)
            strcode = version_web.replace(".","")
            self.SetAppVersionCode(isHd,Source.IOS,strcode)

            filepath = mainResource.GetProjectConfigAppType()+"/appversion.json" 
            flag = os.path.exists(filepath)
            strFileJson = "{}"
            if flag:
                strFileJson = FileUtil.GetFileString(filepath)
            dataRoot = json.loads(strFileJson)
            dataRoot[mainResource.getGameName()]= json.loads(strfile)
            JsonUtil.SaveJson(filepath,dataRoot)


            

        # 重新加载
        data = self.loadJson(isHd)
        APPVERSION_IOS =  data["appversion"][Source.IOS]["value"] 
        self.versionCode = data["appversion"][Source.ANDROID]["code"]
        APPVERSION_ANDROID = self.versionCodeToVersion(self.versionCode)
        APPVERSION_CODE_ANDROID = self.versionCode

        print (APP_NAME_CN_ANDROID)
        print (APP_NAME_EN_ANDROID)
        print (APP_NAME_CN_IOS)
        print (APP_NAME_EN_IOS)
        print (PACKAGE_ANDROID)

        print("android version:"+APPVERSION_ANDROID)
        print("ios version:"+APPVERSION_IOS)

    # android
        # name
        strStart = "app_name\">"
        strEnd = "<"
        # cn
        strOut = self.replaceStringOfFile(
            file_name_cn_android, strStart, strEnd, APP_NAME_CN_ANDROID)
        self.saveString2File(strOut, file_name_cn_android)
        # en
        strOut = self.replaceStringOfFile(
            file_name_en_android, strStart, strEnd, APP_NAME_EN_ANDROID)
        self.saveString2File(strOut, file_name_en_android)

        self.updateAndroidManifest(file_AndroidManifest,PACKAGE_ANDROID,APPVERSION_ANDROID,APPVERSION_CODE_ANDROID,isHd)
        self.updateAndroidManifest(file_AndroidManifest_GP,PACKAGE_ANDROID,APPVERSION_ANDROID,APPVERSION_CODE_ANDROID,isHd)

        # admob
        self.replaceGoogleServiceFile(file_google_service_android, PACKAGE_ANDROID)

    # ios

        #appname
        self.replaceFile(file_info_plist_ios,"_APP_NAME_",APP_NAME_CN_IOS)
        file_name_cn_ios = project_ios + "/appname/zh-Hans.lproj/InfoPlist.strings"
        file_name_en_ios = project_ios + "/appname/en.lproj/InfoPlist.strings" 
        # cn
        self.replaceFile(file_name_cn_ios,"_APP_NAME_",APP_NAME_CN_IOS) 
        # en
        self.replaceFile(file_name_en_ios,"_APP_NAME_",APP_NAME_EN_IOS)  


        # package 
        self.replaceFile(file_info_plist_ios,"_APP_PACKAGE_",PACKAGE_IOS)

        
        # version 
        self.replaceFile(file_info_plist_ios,"_APP_VERSION_",APPVERSION_IOS) 

        #admob appid  
        appid = mainAdConfig.GetCommonAppId(Source.ADMOB,Source.IOS,isHd)
        self.replaceFile(file_info_plist_ios,"_APP_ID_ADMOB_",appid) 

        # CFBundleURLSchemes
        src = Source.WEIBO
        appid = mainConfig.GetShareAppId(src,Source.IOS,isHd)
        self.replaceXcodeUrlScheme(file_info_plist_ios,src,appid,0)

        src = Source.WEIXIN
        appid = mainConfig.GetShareAppId(src,Source.IOS,isHd)
        self.replaceXcodeUrlScheme(file_info_plist_ios,src,appid,0)

        src = Source.QQ
        appid = mainConfig.GetShareAppId(src,Source.IOS,isHd)
        self.replaceXcodeUrlScheme(file_info_plist_ios,src,appid,0)
        self.replaceXcodeUrlScheme(file_info_plist_ios,src,appid,1)

        # xiaomi aso keyword
        self.updateXiaoASOkeyword(data,isHd)



    # win
        self.updateNameWin(isHd,isAuto)
    def updateAppstore(self, isHd):

        self.CopyInAppPurchasesScreenshot(isHd)

        rootConfig = mainResource.GetProjectConfigApp()
        strHD = "HD"

        metadata_ios = rootConfig + "/appstore/ios/app.itmsp/metadata.xml"

        if isHd:
            metadata_ios = rootConfig + "/appstore/ios/app_pad.itmsp/metadata.xml"

        xmlRoot = self.loadXmlDescription(isHd)

        # filePath = rootConfig + "appstore/ios/app.itmsp/in_app_purchases_screenshot.png"
        # print mainResource.get_MD5_checksum_file(filePath)

        # loadJson
        data = self.loadJson(isHd)

        isOld = self.IsOldVersion(data)
        if isOld:
            # APP_NAME_CN_ANDROID = data["APP_NAME_CN_ANDROID"]
            APPSTORE_VERSION_UPDATE = data["APPSTORE_VERSION_UPDATE"]
            APPSTORE_TITLE = data["APPSTORE_TITLE"]
            APPSTORE_SUBTITLE = data["APPSTORE_SUBTITLE"]
            APPSTORE_PROMOTION = data["APPSTORE_PROMOTION"]
            PACKAGE = data["PACKAGE_IOS"]
            # APPSTORE_DESCRIPTION = data["APPSTORE_DESCRIPTION"]
            APPSTORE_KEYWORD = data["APPSTORE_KEYWORD"]
            APPVERSION_IOS = data["APPVERSION_IOS"]
        else:
            APPVERSION_IOS = data["appversion"][Source.IOS]["value"]
            APPSTORE_KEYWORD = data["appstore"]["aso"]
            PACKAGE = data["apppackage"][Source.IOS]["default"]
            APPSTORE_VERSION_UPDATE = data["appstore"]["version_update"]
            APPSTORE_PROMOTION = data["appstore"]["promotion"]
            APPSTORE_SUBTITLE = data["appstore"]["subtitle"]
            APPSTORE_TITLE = data["appstore"]["title"]

        software_url = data["software_url"]
        privacy_url = data["privacy_url"]
        support_url = data["support_url"]
        sku_app = data["sku_app"]
        # need_upload_screenshot = data.get("need_upload_screenshot",False)
        need_upload_screenshot = False
        global enableScrenshot
        enableScrenshot = False

        # ios
        #     sku_app
        strStart = "<vendor_id>"
        strEnd = "</vendor_id>"

        strOut = self.replaceStringOfFile(metadata_ios, strStart, strEnd,
                                          sku_app)
        self.saveString2File(strOut, metadata_ios)

        # APPVERSION_IOS
        # <version string="1.0.0">
        strStart = "<version string=\""
        strEnd = "\">"
        strOut = self.replaceStringOfFile(metadata_ios, strStart, strEnd,
                                          APPVERSION_IOS)
        self.saveString2File(strOut, metadata_ios)

        # 版本更新说明
        key = "version_whats_new"
        if APPVERSION_IOS == "1.0.0":
            self.disableXmlKey(metadata_ios, key)
        else:
            jsonData = APPSTORE_VERSION_UPDATE
            idx = 0
            for country in listCountry:
                lan = listCountryLanguage[idx]
                self.replaceXmlKey(metadata_ios, country, key, jsonData[lan])
                idx += 1

        # APPSTORE_TITLE
        key = "title"
        jsonData = APPSTORE_TITLE
        idx = 0
        for country in listCountry:
            lan = listCountryLanguage[idx]
            self.replaceXmlKey(metadata_ios, country, key, jsonData[lan])
            idx += 1

        # APPSTORE_TITLE
        key = "subtitle"
        jsonData = APPSTORE_SUBTITLE
        idx = 0
        for country in listCountry:
            lan = listCountryLanguage[idx]
            self.replaceXmlKey(metadata_ios, country, key, jsonData[lan])
            idx += 1

    # APPSTORE_PROMOTION
        key = "promotional_text"
        jsonData = APPSTORE_PROMOTION
        idx = 0
        for country in listCountry:
            lan = listCountryLanguage[idx]
            self.replaceXmlKey(metadata_ios, country, key, jsonData[lan])
            idx += 1

        # APPSTORE_DESCRIPTION
        key = "description"
        # jsonData = APPSTORE_DESCRIPTION
        idx = 0
        for country in listCountry:
            lan = listCountryLanguage[idx]
            desc = self.getXmlDescriptionText(xmlRoot, lan)
            self.replaceXmlKey(metadata_ios, country, key, desc)
            idx += 1

        # APPSTORE_KEYWORD
        key = "keyword"
        jsonData = APPSTORE_KEYWORD
        idx = 0
        for country in listCountry:
            lan = listCountryLanguage[idx]
            self.replaceXmlKey(metadata_ios, country, key, jsonData[lan])
            idx += 1

        # software_url
        key = "software_url"
        jsonData = software_url
        idx = 0
        for country in listCountry:
            self.replaceXmlKey(metadata_ios, country, key, jsonData)
            idx += 1

        # support_url
        key = "support_url"
        jsonData = support_url
        idx = 0
        for country in listCountry:
            lan = listCountryLanguage[idx]
            self.replaceXmlKey(metadata_ios, country, key, jsonData)
            idx += 1

        # privacy_url
        key = "privacy_url"
        jsonData = privacy_url
        idx = 0
        for country in listCountry:
            lan = listCountryLanguage[idx]
            self.replaceXmlKey(metadata_ios, country, key, jsonData)
            idx += 1

    # screenshot
    # key = "software_screenshots"
    # if enableScrenshot:
    #     screenshot_cn = self.getXmlStringScreenshots(isHd,"cn")
    #     screenshot_en = self.getXmlStringScreenshots(isHd,"en")
    #     self.replaceXmlKey(metadata_ios,"en-US",key,screenshot_en)
    #     self.replaceXmlKey(metadata_ios,"zh-Hans",key,screenshot_cn)
    #     # replaceXmlKey(metadata_ios,"en-CA",key,screenshot_en)
    #     # replaceXmlKey(metadata_ios,"en-AU",key,screenshot_en)
    #     # replaceXmlKey(metadata_ios,"en-GB",key,screenshot_en)
    # else:
    #     self.disableXmlKey(metadata_ios,"software_screenshots")

    # noad
        self.replaceIAP_noad(metadata_ios, PACKAGE + ".noad")