miniprogram-ci 2.0.7 → 2.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -2
- package/README.md +6 -0
- package/dist/@types/ci/utils/tools.d.ts +1 -0
- package/dist/@types/common/code-analyse/index.d.ts +16 -1
- package/dist/@types/config/config.d.ts +8 -1
- package/dist/@types/index.d.ts +2 -1
- package/dist/@types/modules/corecompiler/baseCompiler.d.ts +6 -0
- package/dist/@types/modules/corecompiler/originalCompiler.d.ts +1 -0
- package/dist/@types/modules/corecompiler/processHandler.d.ts +24 -0
- package/dist/@types/modules/corecompiler/summer/graph/appconf.d.ts +4 -0
- package/dist/@types/modules/corecompiler/summer/graph/appgraph.d.ts +6 -0
- package/dist/@types/modules/corecompiler/summer/graph/basegraph.d.ts +14 -2
- package/dist/@types/modules/corecompiler/summer/graph/gamegraph.d.ts +6 -0
- package/dist/@types/modules/corecompiler/summer/graph/gameplugingraph.d.ts +5 -1
- package/dist/@types/modules/corecompiler/summer/graph/plugingraph.d.ts +5 -1
- package/dist/@types/modules/corecompiler/summer/plugins/base/javascript.d.ts +1 -1
- package/dist/@types/modules/corecompiler/summer/plugins/base/swc.d.ts +1 -1
- package/dist/@types/modules/corecompiler/summer/summer.d.ts +6 -1
- package/dist/@types/modules/corecompiler/summerCompiler.d.ts +30 -2
- package/dist/@types/modules/createSummer.d.ts +3 -2
- package/dist/@types/modules/index.d.ts +8 -2
- package/dist/@types/modules/nativecompiler/ios/buildCloud.d.ts +2 -2
- package/dist/@types/types/ci.d.ts +2 -1
- package/dist/@types/types/core.d.ts +21 -2
- package/dist/@types/types/devtools.d.ts +11 -5
- package/dist/@types/types/miniprogram-json/app.d.ts +16 -6
- package/dist/@types/utils/debug.d.ts +3 -0
- package/dist/@types/utils/locales/locales.d.ts +5 -0
- package/dist/@types/utils/locales/zh.d.ts +5 -0
- package/dist/@types/utils/messageHub.d.ts +1 -1
- package/dist/@types/utils/miniappJson.d.ts +1 -0
- package/dist/@types/utils/packOptionsHelper.d.ts +15 -2
- package/dist/@types/utils/progressRecorder.d.ts +1 -1
- package/dist/@types/utils/tools.d.ts +5 -0
- package/dist/ci/utils/filterUnusedFile.js +1 -1
- package/dist/ci/utils/tools.js +1 -1
- package/dist/common/code-analyse/index.js +1 -1
- package/dist/config/config.js +1 -1
- package/dist/index.js +1 -1
- package/dist/modules/corecompiler/baseCompiler.js +1 -1
- package/dist/modules/corecompiler/original/compile/common.js +1 -1
- package/dist/modules/corecompiler/original/workerThread/task/compilejs.js +1 -1
- package/dist/modules/corecompiler/originalCompiler.js +1 -1
- package/dist/modules/corecompiler/processHandler.js +1 -0
- package/dist/modules/corecompiler/summer/graph/appconf.js +1 -1
- package/dist/modules/corecompiler/summer/graph/appgraph.js +1 -1
- package/dist/modules/corecompiler/summer/graph/basegraph.js +1 -1
- package/dist/modules/corecompiler/summer/graph/gamegraph.js +1 -1
- package/dist/modules/corecompiler/summer/graph/gameplugingraph.js +1 -1
- package/dist/modules/corecompiler/summer/graph/plugingraph.js +1 -1
- package/dist/modules/corecompiler/summer/pluginDriver.js +1 -1
- package/dist/modules/corecompiler/summer/plugins/base/javascript.js +1 -1
- package/dist/modules/corecompiler/summer/plugins/base/swc.js +1 -1
- package/dist/modules/corecompiler/summer/plugins/sass.js +1 -1
- package/dist/modules/corecompiler/summer/summer.js +1 -1
- package/dist/modules/corecompiler/summerCompiler.js +1 -1
- package/dist/modules/corecompiler/summerEntryProcess.js +1 -1
- package/dist/modules/createSummer.js +1 -1
- package/dist/modules/index.js +1 -1
- package/dist/modules/nativecompiler/ios/buildCloud.js +1 -1
- package/dist/modules/nativecompiler/ios/index.js +1 -1
- package/dist/project/advance/precompileProject.js +1 -1
- package/dist/project/baseProject.js +1 -1
- package/dist/utils/codesign.js +1 -1
- package/dist/utils/debug.js +1 -0
- package/dist/utils/locales/en.js +1 -1
- package/dist/utils/locales/zh.js +1 -1
- package/dist/utils/miniapp-builder.js +1 -1
- package/dist/utils/miniappJson.js +1 -1
- package/dist/utils/packOptionsHelper.js +1 -1
- package/dist/utils/progressRecorder.js +1 -1
- package/dist/utils/subprocess/processManager.js +1 -1
- package/dist/utils/tools.js +1 -1
- package/package.json +101 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getSummerCompiler=exports.summerCompilerFactory=exports.SummerCompilerFactory=void 0;const tslib_1=require("tslib"),path_1=tslib_1.__importDefault(require("path")),lodash_1=tslib_1.__importDefault(require("lodash")),config_1=require("../config/config"),ciProject_1=require("../project/ciProject"),tools_1=require("../utils/tools"),locales_1=tslib_1.__importDefault(require("../utils/locales/locales")),packOptionsHelper_1=tslib_1.__importDefault(require("../utils/packOptionsHelper")),summerCompiler_1=require("./corecompiler/summerCompiler"),pluginconfig_1=require("./corecompiler/summer/pluginconfig"),WeappCompileCache="";class SummerCompilerFactory{constructor(){this.summerCompiler=null,this.project=null,this.createPromise=null,this.releaseCbs=[]}async getSummerCompiler(e){return this.shouldCreate(e)?(this.releaseLastCompiler(),this.project=e,this.summerCompiler=null,this.createPromise=this.createSummerCompiler(e),this.summerCompiler=await this.createPromise,this.summerCompiler.setLocale(locales_1.default.getLocale())):(this.summerCompiler||(this.summerCompiler=await this.createPromise),this.summerCompiler.updateOptions(this.getSummerOptions(e))),this.summerCompiler}shouldCreate(e){var r,t,i,o,s;if(!this.project)return!0;if(this.project.projectPath!==e.projectPath)return!0;if(!lodash_1.default.isEqual(this.project.packOptions,e.packOptions))return!0;const l=["es6","minified","postcss","uglifyFileName","compileWorklet","enhance","minifyWXML","minifyWXSS","disableUseStrict","swc","useCompilerPlugins","babelSetting","swcSetting","condition"],m=null!==(t=null===(r=this.project)||void 0===r?void 0:r.setting)&&void 0!==t?t:{},p=null!==(i=e.setting)&&void 0!==i?i:{};for(const e of l){const r=m[e],t=p[e];if(!lodash_1.default.isEqual(r,t))return console.info(`shouldCreate return true, project.setting.${e}, before: ${JSON.stringify(r)}, after: ${JSON.stringify(t)}`),!0}return(null===(o=this.project)||void 0===o?void 0:o.miniprogramRoot)!==e.miniprogramRoot||(null===(s=this.project)||void 0===s?void 0:s.pluginRoot)!==e.pluginRoot}async releaseLastCompiler(){const{releaseCbs:e}=this;if(this.releaseCbs=[],this.createPromise)try{(await this.createPromise).destroy(),e.forEach(e=>{try{e()}catch(e){console.error("[SummerCompilerFactory] releaseLastCompiler release cb execute error: "+e)}})}catch(e){console.error("[SummerCompilerFactory] releaseLastCompiler error: "+e)}}ensureCacheDir(){const e=path_1.default.join("",(0,tools_1.generateMD5)(this.project.projectPath+"|summer"));return(0,tools_1.mkdirSync)(e),e}async createSummerCompiler(e){const
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getSummerCompiler=exports.summerCompilerFactory=exports.SummerCompilerFactory=void 0;const tslib_1=require("tslib"),path_1=tslib_1.__importDefault(require("path")),lodash_1=tslib_1.__importDefault(require("lodash")),config_1=require("../config/config"),ciProject_1=require("../project/ciProject"),tools_1=require("../utils/tools"),locales_1=tslib_1.__importDefault(require("../utils/locales/locales")),packOptionsHelper_1=tslib_1.__importDefault(require("../utils/packOptionsHelper")),summerCompiler_1=require("./corecompiler/summerCompiler"),pluginconfig_1=require("./corecompiler/summer/pluginconfig"),WeappCompileCache="";class SummerCompilerFactory{constructor(){this.summerCompiler=null,this.project=null,this.createPromise=null,this.releaseCbs=[]}async getSummerCompiler(e,r){return this.shouldCreate(e)?(this.releaseLastCompiler(),this.project=e,this.summerCompiler=null,this.createPromise=this.createSummerCompiler(e,r),this.summerCompiler=await this.createPromise,this.summerCompiler.setLocale(locales_1.default.getLocale())):(this.summerCompiler||(this.summerCompiler=await this.createPromise),this.summerCompiler.updateOptions(this.getSummerOptions(e))),this.summerCompiler}shouldCreate(e){var r,t,i,o,s;if(!this.project)return!0;if(this.project.projectPath!==e.projectPath)return!0;if(!lodash_1.default.isEqual(this.project.packOptions,e.packOptions))return!0;const l=["es6","minified","postcss","uglifyFileName","compileWorklet","enhance","minifyWXML","minifyWXSS","disableUseStrict","swc","useCompilerPlugins","babelSetting","swcSetting","condition"],m=null!==(t=null===(r=this.project)||void 0===r?void 0:r.setting)&&void 0!==t?t:{},p=null!==(i=e.setting)&&void 0!==i?i:{};for(const e of l){const r=m[e],t=p[e];if(!lodash_1.default.isEqual(r,t))return console.info(`shouldCreate return true, project.setting.${e}, before: ${JSON.stringify(r)}, after: ${JSON.stringify(t)}`),!0}return(null===(o=this.project)||void 0===o?void 0:o.miniprogramRoot)!==e.miniprogramRoot||(null===(s=this.project)||void 0===s?void 0:s.pluginRoot)!==e.pluginRoot}async releaseLastCompiler(){const{releaseCbs:e}=this;if(this.releaseCbs=[],this.createPromise)try{(await this.createPromise).destroy(),e.forEach(e=>{try{e()}catch(e){console.error("[SummerCompilerFactory] releaseLastCompiler release cb execute error: "+e)}})}catch(e){console.error("[SummerCompilerFactory] releaseLastCompiler error: "+e)}}ensureCacheDir(){const e=path_1.default.join("",(0,tools_1.generateMD5)(this.project.projectPath+"|summer"));return(0,tools_1.mkdirSync)(e),e}async createSummerCompiler(e,r){const t=new ciProject_1.CIProject(e);await t.ready();const i=this.ensureCacheDir(),o=this.getSummerOptions(e),s=new summerCompiler_1.SummerCompiler(t,i,o,{showBuildLog:()=>{}},r);return await s.ready(),s}getFileFilter(e){packOptionsHelper_1.default.updateState(e);return r=>{const t=r.startsWith(e.miniprogramRoot)&&packOptionsHelper_1.default.isIgnoredByRules(r.slice(e.miniprogramRoot.length)),i=e.pluginRoot&&r.startsWith(e.pluginRoot)&&packOptionsHelper_1.default.isIgnoredByRules(r.slice(e.pluginRoot.length));return!t&&!i}}getSummerOptions(e){const r=(0,pluginconfig_1.getSummerPluginConfig)(e.setting),t={[config_1.compileTypeConfig.weapp]:"miniProgram",[config_1.compileTypeConfig.plugin]:"miniProgramPlugin",[config_1.compileTypeConfig.game]:"miniGame",[config_1.compileTypeConfig.gamePlugin]:"miniGamePlugin"}[e.compileType];return{appid:e.appid,attr:e.attr,projectArchitecture:e.projectArchitecture,miniprogramRoot:e.miniprogramRoot,pluginRoot:e.pluginRoot,compileType:t,summerPlugins:r,setting:Object.assign({},e.setting)}}}exports.SummerCompilerFactory=SummerCompilerFactory,exports.summerCompilerFactory=new SummerCompilerFactory,exports.getSummerCompiler=exports.summerCompilerFactory.getSummerCompiler.bind(exports.summerCompilerFactory);
|
package/dist/modules/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Builder=void 0;const index_1=require("./precompiler/index"),nativecompiler_1=require("./nativecompiler"),createSummer_1=require("./createSummer"),singletontask_1=require("../utils/singletontask");class
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Builder=void 0;const tslib_1=require("tslib"),nodePath=tslib_1.__importStar(require("path")),index_1=require("./precompiler/index"),nativecompiler_1=require("./nativecompiler"),createSummer_1=require("./createSummer"),singletontask_1=require("../utils/singletontask"),code_analyse_1=require("../common/code-analyse"),tools_1=require("../utils/tools");class CodeDataFileHelper{constructor(e){var t;this.project=e,this._listeners=[],this.onFileChange=()=>{this._listeners.forEach(e=>{e()})},null===(t=e.event)||void 0===t||t.on("fileChange",this.onFileChange)}destroy(){var e;null===(e=this.project.event)||void 0===e||e.off("fileChange",this.onFileChange)}get prefix(){return"miniProgram"===this.project.type?this.project.miniprogramRoot:"miniProgramPlugin"===this.project.type?this.project.pluginRoot:""}stat(e){const t=this.project.stat(this.prefix,e),i=!!(null==t?void 0:t.isFile),r=!!(null==t?void 0:t.isDirectory);if(!i&&!r)return;return{isFile:i,isDirectory:r,size:null==t?void 0:t.size,mtime:(null==t?void 0:t.mtimeMs)||0}}mtime(e){const t=this.stat(e);return t?t.mtime:0}exist(e){return this.project.exists(this.prefix,e)}existDir(e){if(this.exist(e)){const t=this.stat(e);return!!(null==t?void 0:t.isDirectory)}return!1}existFile(e){if(this.exist(e)){const t=this.stat(e);return!!(null==t?void 0:t.isFile)}return!1}getFileList(e="",t=""){const i=this.project.getFileList(this.prefix,t);return this.excludeRoot(i,this.prefix)}excludeRoot(e=[],t=""){return t?e.map(e=>nodePath.posix.relative(t,e)):e}async getString(e){return this.project.getFile(this.prefix,e).toString()}async getLocalFileString(e){return this.project.getFile(this.prefix,e).toString("utf-8")}async getJSON(e){const t=await this.getString(e);try{return JSON.parse(t)}catch(e){return null}}async readdir(e){const{files:t,dirs:i}=this.project.getFilesAndDirs();e.endsWith("/")||(e+="/");const r=t.filter(t=>t.startsWith(e));return i.filter(t=>t.startsWith(e)).concat(r).filter(t=>t.slice(e.length).indexOf("/")<0).map(t=>t.slice(e.length))}watchFileChange(e){this._listeners.push(e)}}class Builder{constructor(e,t){this._getSummerCompiler=async()=>{if(!this._summerCompiler){const{summerCompilerClass:e,projectInfo:t,cachePath:i="",devtoolMessagehub:r}=this._options,s=await this.getPreCompileProject(),o=await this.getAnalyzer();e?(this._summerCompiler=new e(s,i,t,r,o,this._options.filterFactory),await this._summerCompiler.ready()):this._summerCompiler=await(0,createSummer_1.getSummerCompiler)(s,o)}return this._summerCompiler},this.originProject=e,this._options=t}async getCompiler(){return this.getSummerCompiler()}async getAnalyzer(){if(this._analyzer)return this._analyzer;const e=await this.getPreCompileProject();return this._analyzer=new code_analyse_1.Analyzer({root:nodePath.join(e.projectPath,e.miniprogramRoot),type:"miniprogram",fileHelper:new CodeDataFileHelper(e),compilerPlugins:(0,tools_1.getCompilerPlugins)(e)}),this._analyzer}async getPreCompileProject(){if(!this._precompileProject){const{targetPlatform:e,targetPlatformDefines:t}=this._options,i=await this.getPreCompiler();this._precompileProject=await i.getPreCompileProject({targetPlatform:e,targetPlatformDefines:t,runEnv:"main process"}),await this._precompileProject.ready()}return this._precompileProject}async getPreCompiler(){if(!this._preCompiler){const{devtoolMessagehub:e}=this._options;this._preCompiler=new index_1.PreCompiler(this.originProject,e)}return this._preCompiler}async getSummerCompiler(){var e;return this._getSummerCompilerTask||(this._getSummerCompilerTask=new singletontask_1.SingletonTask(this._getSummerCompiler)),null===(e=this._getSummerCompilerTask)||void 0===e?void 0:e.getResult(!0)}async ready(){return this._checkReadyTask||(this._checkReadyTask=new singletontask_1.SingletonTask(this.init.bind(this,this._options))),await this._checkReadyTask.getResult()}async init(){}async getNativeCompiler(){return this._nativeCompiler||await this.initNativeCompiler(this._options),this._nativeCompiler}async initNativeCompiler(e){if("multiPlatform"!==this.originProject.projectArchitecture)return;const{miniappDirPath:t,devtoolsVersion:i,devtoolMessagehub:r}=e;this._nativeCompiler=new nativecompiler_1.NativeCompiler({project:this._precompileProject,devtoolMessagehub:r,devtoolsVersion:i,miniappDirPath:t}),await this._nativeCompiler.ready()}getPreCompileOptions(){var e,t;return{targetPlatform:null===(e=this._precompileProject)||void 0===e?void 0:e.targetPlatform,targetPlatformDefines:null===(t=this._precompileProject)||void 0===t?void 0:t.targetPlatformDefines}}async changePreCompileOptions(e){var t;await this.getPreCompileProject(),(null===(t=this._precompileProject)||void 0===t?void 0:t.targetPlatform)!==e.targetPlatform&&(this._precompileProject.updateConditionCompileOptions(e),await new Promise(e=>setTimeout(e,500)))}async setLocale(e){(await this.getSummerCompiler()).setLocale(e)}destroy(){var e,t,i,r,s;(null===(e=this._summerCompiler)||void 0===e?void 0:e.isSummer)&&this._summerCompiler.destroy(),null===(t=this._analyzer)||void 0===t||t.destroy(),this._analyzer=void 0,null===(i=this._nativeCompiler)||void 0===i||i.destroy(),null===(s=null===(r=this.originProject)||void 0===r?void 0:r.destroy)||void 0===s||s.call(r)}}exports.Builder=Builder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.privateDescriptions=exports.remoteBuildProjectMaterialAbsoluteCacheDir=void 0;const tslib_1=require("tslib"),child_process=tslib_1.__importStar(require("child_process")),path_1=tslib_1.__importDefault(require("path")),fs_extra_1=tslib_1.__importDefault(require("fs-extra")),glob_1=tslib_1.__importDefault(require("glob")),env_1=require("../../../utils/env"),miniapp_builder_1=require("../../../utils/miniapp-builder"),codesign_1=require("../../../utils/codesign"),miniappJson_1=require("../../../utils/miniappJson"),lodash_1=require("lodash"),tools_1=require("../../../utils/tools"),uuidv4=require("uuid/v4"),sizeOf=require("image-size"),plist=require("simple-plist"),errorIOSSdkVersions=["1.0.19"],APPEX_PROFILES_MAPS_FILE="__appexProfilesCacheDir__/profilesMap.json",APPEX_PROFILES_MAPS_FOR_SHELL_FILE="__appexProfilesCacheDir__/profilesMapForShell.txt",defaultIconDirPath=path_1.default.join(__dirname,"../../../static/images/"),getDepReg=e=>new RegExp(`s.subspec '${e}'.*\n(?:.*\n)*?(?:.*sp.vendored_frameworks = \\[\n)((?:.*'.*?'.*\n)*?)(?:.*\\]\n)`,"m"),allowTheme=["Light","LightSpecial","Dark","DarkSpecial","Default"];exports.remoteBuildProjectMaterialAbsoluteCacheDir="__absoluteFile";const iconInfoMap={appStore1024:{size:[1024,1024],scale:1,idiom:"ios-marketing",required:!0},mainIcon120:{size:[60,60],scale:2,idiom:"iphone",required:!0},mainIcon180:{size:[60,60],scale:3,idiom:"iphone"},spotlightIcon80:{size:[40,40],scale:2,idiom:"iphone"},spotlightIcon120:{size:[40,40],scale:3,idiom:"iphone"},settingsIcon58:{size:[29,29],scale:2,idiom:"iphone"},settingsIcon87:{size:[29,29],scale:3,idiom:"iphone"},notificationIcon40:{size:[20,20],scale:2,idiom:"iphone"},notificationIcon60:{size:[20,20],scale:3,idiom:"iphone"},ipadMainIcon152:{size:[76,76],scale:2,idiom:"ipad"},ipadMainIcon167:{size:[83.5,83.5],scale:2,idiom:"ipad"},ipadSpotlightIcon40:{size:[40,40],scale:1,idiom:"ipad"},ipadSpotlightIcon80:{size:[40,40],scale:2,idiom:"ipad"},ipadSettingsIcon29:{size:[29,29],scale:1,idiom:"ipad"},ipadSpotlightIcon58:{size:[29,29],scale:2,idiom:"ipad"},ipadNotificationIcon20:{size:[20,20],scale:1,idiom:"ipad"},ipadNotificationIcon40:{size:[20,20],scale:2,idiom:"ipad"}};exports.privateDescriptions=["NSPhotoLibraryUsageDescription","NSPhotoLibraryAddUsageDescription","NSCameraUsageDescription","NSMicrophoneUsageDescription","NSLocationWhenInUseUsageDescription","NSLocationAlwaysUsageDescription","NSLocationAlwaysAndWhenInUseUsageDescription","NSCalendarsUsageDescription","NSContactsUsageDescription","NSBluetoothPeripheralUsageDescription","NSBluetoothAlwaysUsageDescription","NSSpeechRecognitionUsageDescription","NSRemindersUsageDescription","NSMotionUsageDescription","NSHealthUpdateUsageDescription","NSHealthShareUsageDescription","NSAppleMusicUsageDescription","NFCReaderUsageDescription","NSHealthClinicalHealthRecordsShareUsageDescription","NSHomeKitUsageDescription","NSSiriUsageDescription","NSFaceIDUsageDescription","NSLocalNetworkUsageDescription","NSUserTrackingUsageDescription","NSLocationUsageDescription"];class buildCloudManager{generateTempDemoIpaPath(e){const i=path_1.default.join(e,"../.."),t=path_1.default.basename(i),n=path_1.default.dirname(i),a=path_1.default.join(n,t+"-operateDir");fs_extra_1.default.existsSync(a)&&fs_extra_1.default.removeSync(a),fs_extra_1.default.ensureDirSync(a);const s=path_1.default.join(a,"Payload/demo.app");return fs_extra_1.default.copySync(e,s),s}generateInfoPlistCFBundleURLTypesItem(e){const i={};return e.CFBundleURLName&&(i.CFBundleURLName=e.CFBundleURLName),e.CFBundleURLSchemes&&(i.CFBundleURLSchemes=[e.CFBundleURLSchemes]),e.CFBundleTypeRole&&(i.CFBundleTypeRole=e.CFBundleTypeRole),i}updatePrivacyBackgroundImage(e,i,t,n,a){t.message("doing","updatePrivacyBackgroundImage "+n);if(fs_extra_1.default.readdirSync(i).forEach(e=>{"privacy_"+n===path_1.default.basename(e,path_1.default.extname(e))&&fs_extra_1.default.removeSync(path_1.default.join(i,e))}),!a)return;path_1.default.isAbsolute(a)||(a=path_1.default.join(e,a)),a=this.getMaterialFilePath(e,a);const s=path_1.default.extname(a),o=path_1.default.join(i,`privacy_${n}${s}`);try{fs_extra_1.default.copyFileSync(a,o)}catch(e){throw t.message("fail",`copy privacy image failed: ${n}, ${a} to ${o}`),e}}async updateIOSInfoPlistInfo(e,i,t,n,a,s){var o,r,l,p,d,c,u,f;a.progress("update app base info...");const{mobileapp_info:_={}}=i,h=_.mobileapp_id,g=path_1.default.join(t,"Info.plist"),m={},y=(e,i)=>{var t,n;if(i.startsWith("%")&&i.endsWith("%")){const o=i.slice(1,-1);m[e]=o;const r=(null===(n=null===(t=null==s?void 0:s.base)||void 0===t?void 0:t.ios)||void 0===n?void 0:n[o])||"";return r||a.message("fail",`未在国际化配置 base.json 中找到字段 ${o},请检查`),r}return i},S=plist.readFileSync(g);if(S.CFBundleName=y("CFBundleName",n.name),S.CFBundleDisplayName=y("CFBundleDisplayName",n.name),S.CFBundleShortVersionString=n.version,"number"==typeof n.versionCode?S.CFBundleVersion=parseInt(n.versionCode.toString(),10).toString():S.CFBundleVersion=(parseInt(S.CFBundleVersion,10)+1).toString(),S.CFBundleIdentifier=this.getBundleIdentifier(_),Array.isArray(S.CFBundleURLTypes)||(S.CFBundleURLTypes=[]),(null===(r=null===(o=S.CFBundleURLTypes)||void 0===o?void 0:o[0])||void 0===r?void 0:r.CFBundleURLSchemes)&&(S.CFBundleURLTypes[0].CFBundleURLSchemes=[h]),S.CFBundleURLTypes[0]&&(S.CFBundleURLTypes=[S.CFBundleURLTypes[0]]),exports.privateDescriptions.forEach(e=>{var i,t;(null===(i=null==n?void 0:n.privateDescriptions)||void 0===i?void 0:i[e])?S[e]=y(e,null===(t=n.privateDescriptions)||void 0===t?void 0:t[e]):delete S[e]}),!0===(null===(l=null==n?void 0:n.infoPlist)||void 0===l?void 0:l.DisableAppUsesNonExemptEncryption)?S.ITSAppUsesNonExemptEncryption=!1:delete S.ITSAppUsesNonExemptEncryption,S.UIBackgroundModes=[],!0===(null===(p=null==n?void 0:n.infoPlist)||void 0===p?void 0:p.AudioInBackgroundMode)&&S.UIBackgroundModes.push("audio"),!0===(null===(d=null==n?void 0:n.infoPlist)||void 0===d?void 0:d.LocationInBackgroundMode)&&S.UIBackgroundModes.push("location"),!0===(null===(c=null==n?void 0:n.infoPlist)||void 0===c?void 0:c.requiresFullScreen)?S.UIRequiresFullScreen=!0:delete S.UIRequiresFullScreen,"object"==typeof(null===(u=null==n?void 0:n.infoPlist)||void 0===u?void 0:u.CFBundleURLTypes)){const e=this.generateInfoPlistCFBundleURLTypesItem(n.infoPlist.CFBundleURLTypes);S.CFBundleURLTypes.push(e);const{additionalCFBundleURLTypes:i}=n.infoPlist.CFBundleURLTypes;Array.isArray(i)&&i.forEach(e=>{if("object"==typeof e){const i=this.generateInfoPlistCFBundleURLTypesItem(e);S.CFBundleURLTypes.push(i)}})}if(!0===n.enableIpad&&((0,miniappJson_1.iOSAppJsonIsUsingIPadResizable)(e)?(S["UISupportedInterfaceOrientations~ipad"]=["UIInterfaceOrientationPortrait","UIInterfaceOrientationPortraitUpsideDown","UIInterfaceOrientationLandscapeLeft","UIInterfaceOrientationLandscapeRight"],a.progress("ipad is support Landscape")):(S["UISupportedInterfaceOrientations~ipad"]=["UIInterfaceOrientationPortrait","UIInterfaceOrientationPortraitUpsideDown"],a.progress("ipad is not support Landscape"))),null===(f=n.infoPlist)||void 0===f?void 0:f.LSApplicationQueriesSchemes){const e=n.infoPlist.LSApplicationQueriesSchemes.split(",");e.length&&S.LSApplicationQueriesSchemes.push(...e.filter(e=>e))}return plist.writeFileSync(g,S),await this.writeI18NInfoFile(t,s,m),S.CFBundleVersion}getBundleIdentifier(e){return e.ios_flag&&e.bundle_id||e.debug_ios_bundle_id}useGDT(e){return(0,miniappJson_1.iOSMiniAppJsonIsUsingGDT)(e)}async updateIOSAppConfigPlistInfo(e,i,t,n,a,s,o,r="Dark",l){var p,d,c,u;o.progress("update app module info...");const{module_info:f={},cpa_info:_={},cpa_package_info:h={enable_remove_watermark:!1}}=i;if(!_.sdk_key||!_.sdk_key_secret)throw new Error("sdkKey and sdkSecret not found");const g=path_1.default.join(t,"MiniApp.bundle"),m=path_1.default.join(g,"AppConfig.plist"),y=plist.readFileSync(m);h.enable_remove_watermark?y.enableRemoveWatermark=!0:y.splashscreenTheme=r,y.miniModuleId=f.module_id,y.sdkKey=_.sdk_key,y.sdkSecret=_.sdk_key_secret;const{privacy:S={}}=n;y.privacy||(y.privacy={}),y.privacy.enable=!!S.enable;const I=path_1.default.posix.join(g,"configs/privacy.json"),{contentViewImage:x,cancelButtonImage:b,confirmButtonImage:v,template:P}=S;if(S.enable){let i=P||"";if(fs_extra_1.default.ensureDirSync(path_1.default.posix.join(g,"configs")),i.startsWith("%")&&i.endsWith("%")){const t=P.slice(1,-1);i=(null===(d=null===(p=null==l?void 0:l.base)||void 0===p?void 0:p.ios)||void 0===d?void 0:d[t])||"",i||o.message("fail",`未在国际化配置 base.json 中找到字段 ${t},请检查`),Object.keys(l).forEach(i=>{var n,a;if("base"===i)return;let s=null===(a=null===(n=l[i])||void 0===n?void 0:n.ios)||void 0===a?void 0:a[t];if(s){s=this.getMaterialFilePath(e,s);const t=`configs/privacy-${i}.json`,n=path_1.default.posix.join(g,t);fs_extra_1.default.existsSync(s)?fs_extra_1.default.copyFileSync(s,n):o.message("fail",`未找到隐私协议在国际化配置 ${i}.json 中配置的文件 ${s},请检查`)}})}i?(i=this.getMaterialFilePath(e,i),fs_extra_1.default.existsSync(i)?(fs_extra_1.default.copyFileSync(i,I),y.privacy.template="configs/privacy.json"):(o.message("fail",`未找到隐私协议中配置的文件 ${i},请检查`),y.privacy.template="configs/defaultPrivacy.json")):y.privacy.template="configs/defaultPrivacy.json",!0===S.enableNativePlugin&&"string"==typeof S.nativePluginId&&S.nativePluginId.length>2&&(y.privacy.plugin={pluginId:S.nativePluginId,enable:!0})}else y.privacy.template="",fs_extra_1.default.removeSync(I);this.updatePrivacyBackgroundImage(e,t,o,"contentViewImage",x),this.updatePrivacyBackgroundImage(e,t,o,"confirmButtonImage",v),this.updatePrivacyBackgroundImage(e,t,o,"cancelButtonImage",b);const{appMenuEnable:F=!0}=n;y.appMenuEnable=F;const{enableVConsole:B="undefined"}=n;y.enableVConsole=B;const{tpush:j}=n;let D=!1;if("object"==typeof j){const e=path_1.default.posix.join(t,"PlugIns/TPNSService.appex"),i=path_1.default.posix.join(e,"AppConfig.plist");if(this.useTpush(n)){y.TPNSAccessID=j.accessID,y.TPNSAccessKey=j.accessKey,j.clusterDomainName?y.clusterDomainName=j.clusterDomainName:delete y.clusterDomainName;const t=s?"x86_64":"arm64",n=path_1.default.join(a,`appex/${t}/TPNSService.appex`);if(!fs_extra_1.default.existsSync(n))throw new Error("can not found extendsdk: "+n);try{fs_extra_1.default.copySync(n,e),plist.writeFileSync(i,y),D=!0}catch(e){throw new Error("copy TPNSService.appex to app failed: "+e)}}}if(!D)try{const e=path_1.default.posix.join(t,"PlugIns");fs_extra_1.default.existsSync(e)?(fs_extra_1.default.removeSync(e),o.progress("removed PlugIns folder...")):o.progress("no PlugIns folder...")}catch(e){throw new Error("remove TPNSService.appex from app failed: "+e)}if(null===(c=n.useExtendedSdk)||void 0===c?void 0:c.WeAppLBS){if(!n.qmapAPIKey)throw new Error("You need to provide the Tencent Location Service API Key when using LBS SDK.");y.qmapAPIKey=n.qmapAPIKey}const{gdt:C}=n,w=this.useGDT(n);if(y.GDTAd=w?{appid:C.appid,enable:!0,SplashAd:{placementId:C.splashAd_placementId,fetchDelay:C.splashAd_fetchDelay||3,defaultEnable:null===(u=C.splashAd_defaultEnable)||void 0===u||u}}:{appid:"",enable:!1,SplashAd:{placementId:"",fetchDelay:3}},n["mini-plugin"]&&Array.isArray(n["mini-plugin"].ios)){const e=n["mini-plugin"].ios.filter(e=>!!(e.open&&e.pluginId&&e.loadWhenStart)).map(e=>e.pluginId);y.plugins={loadWhenStart:e}}const{enableDebugLog:U=!1}=n;y.enableDebugLog=U;const{debugLogSizeLimit:A=10}=n;isNaN(Number(A))?o.message("fail",`ios debugLogSizeLimit ${A} is NaN`):y.debugLogSizeLimit=Number(A);const{enableOpenUrlNavigate:E=!1}=n;y.enableOpenUrlNavigate=E,plist.writeFileSync(m,y)}async updateIOSAppexInfoPlistInfo(e,i,t,n,a){if(this.useTpush(t)){a.progress("update appex for notification base info...");const{mobileapp_info:s={}}=e,o=path_1.default.join(i,"PlugIns/TPNSService.appex"),r=path_1.default.join(o,"Info.plist"),l=plist.readFileSync(r);l.CFBundleShortVersionString=t.version,a.progress("update appex for CFBundleVersion: "+n),l.CFBundleVersion=n;const p=s.ios_flag&&s.bundle_id||s.debug_ios_bundle_id;l.CFBundleIdentifier=t.tpush.serviceBundleId||p+".service",a.progress("update appex bundle identifier for infoPlist : "+l.CFBundleIdentifier),plist.writeFileSync(r,l)}else a.progress("not using tpush...")}updateBundleIcons(e,i,t,n,a){const s=[],o=[],r=[];for(const l in t){if(!t[l])continue;const p=this.getMaterialFilePath(e,t[l]);if(!p)return void a.message("fail","getMatrialFailed: "+t[l]);const d=iconInfoMap[l];try{const e=sizeOf(p),i=d.size[0]*d.scale,n=d.size[1]*d.scale;if(e.width!==i||e.height!==n){a.progress(`check ${l} size failed, require [${i}, ${n}] but [${e.width}, ${e.height}] ingore ${t[l]} `);continue}}catch(e){a.progress(`get ${l} info failed, ingore ${t[l]}(e: ${e.message})`);continue}const c=path_1.default.extname(p),u=1===d.scale?"":`@${d.scale}x`,f=`${d.size[0]}x${d.size[1]}`,_=l.startsWith("ipad"),h="appStore1024"===l,g=n,m=path_1.default.join(i,`${g}${f}${u}${_?"~ipad":""}${c}`),y={from:p,to:m,filename:path_1.default.basename(m),size:f,scale:d.scale+"x",idiom:d.idiom,key:l};s.push(y),h||(_?r.includes(`${g}${f}`)||r.push(`${g}${f}${u}`):o.includes(`${g}${f}`)||o.push(`${g}${f}${u}`))}return{iphoneBundleIconFiles:o,ipadBundleIconFiles:r,addFiles:s}}async updateIOSIcons(e,i,t,n,a,s){s.progress("update app icons...");const{icons:o={}}=n,r=a&&!env_1.isWin&&!!t;s.progress("genAssetCar: "+r);const l=glob_1.default.sync("AppIcon*.+(png|jpg|jpeg|webp)",{nodir:!0,cwd:i}).map(e=>path_1.default.join(i,e)),p="AppIcon-"+uuidv4().slice(0,8),d=this.updateBundleIcons(e,i,o,p,s);if(!d)throw new Error("updateBundleIcons failed");const{iphoneBundleIconFiles:c=[],ipadBundleIconFiles:u=[],addFiles:f=[]}=d,_={};for(const e in iconInfoMap){if(!iconInfoMap[e].required||o[e])continue;const i=iconInfoMap[e].size[0]*iconInfoMap[e].scale,t=iconInfoMap[e].size[1]*iconInfoMap[e].scale;if(_[e]=path_1.default.join(defaultIconDirPath,`donut-icon${i}x${t}.png`),s.progress(`using default app icons when ${e} is not config...`),!fs_extra_1.default.existsSync(_[e]))throw new Error(`required ${e} but not default or set`)}const h=this.updateBundleIcons(e,i,_,p,s);if(!h)throw new Error("updateBundleIcons WithDefaultIcon failed");const{iphoneBundleIconFiles:g,ipadBundleIconFiles:m,addFiles:y}=h;if(c.push(...g),u.push(...m),f.push(...y),!c.length&&!u.length)return;l.forEach(e=>{fs_extra_1.default.existsSync(e)&&fs_extra_1.default.removeSync(e)});const S=path_1.default.join(t,"__assetCarOperateDir/assetsCar/"),I=path_1.default.join(S,`Assets.xcassets/${p}.appiconset/`);r&&(fs_extra_1.default.ensureDirSync(I),fs_extra_1.default.emptyDirSync(I));const x=[];if(f.forEach(e=>{fs_extra_1.default.existsSync(e.to)&&fs_extra_1.default.removeSync(e.to),fs_extra_1.default.copyFileSync(e.from,e.to),r&&(fs_extra_1.default.copySync(e.from,path_1.default.join(I,e.filename)),x.push({filename:e.filename,size:e.size,scale:e.scale,idiom:e.idiom}))}),r&&fs_extra_1.default.writeJsonSync(path_1.default.join(I,"Contents.json"),{images:x,info:{author:"xcode",version:1}},{spaces:"\t"}),r){const e=path_1.default.join(__dirname,"../../../static/scripts/assetsCar/"),t=path_1.default.join(S,"createAssetsCar");fs_extra_1.default.copySync(e,S);try{await(0,codesign_1.checkXcodeEnv)(s),child_process.execSync(`"${t}" ${p}`,{env:(0,env_1.getProcessEnv)()})}catch(e){s.progress("createAssetsCar failed "+(e.message||""))}const n=path_1.default.join(S,"build/Assets.car"),a=path_1.default.join(i,"Assets.car");fs_extra_1.default.copyFileSync(n,a)}else{const e=path_1.default.join(i,"Assets.car");fs_extra_1.default.removeSync(e)}const b=path_1.default.join(i,"Info.plist"),v=plist.readFileSync(b);v.CFBundleIcons||(v.CFBundleIcons={CFBundlePrimaryIcon:{}}),v.CFBundleIcons.CFBundlePrimaryIcon.CFBundleIconName=p,v.CFBundleIcons.CFBundlePrimaryIcon.CFBundleIconFiles=c,v["CFBundleIcons~ipad"]||(v["CFBundleIcons~ipad"]={CFBundlePrimaryIcon:{}}),v["CFBundleIcons~ipad"].CFBundlePrimaryIcon.CFBundleIconName=p,v["CFBundleIcons~ipad"].CFBundlePrimaryIcon.CFBundleIconFiles=u,v.NSAppTransportSecurity={NSAllowsArbitraryLoads:!0},plist.writeFileSync(b,v)}async updateSplashScreen(e,i,t,n,a="Dark"){n.progress("update splashscreen image...");const{splashscreen:s={}}=t;let o;if(allowTheme.includes(a)&&(o=path_1.default.join(i,`/Base.lproj/LaunchScreen${a}.storyboardc`)),o&&fs_extra_1.default.existsSync(o)&&fs_extra_1.default.copySync(o,path_1.default.join(i,"/Base.lproj/LaunchScreen.storyboardc")),allowTheme.forEach(e=>{const t=path_1.default.join(i,`/Base.lproj/LaunchScreen${e}.storyboardc`);fs_extra_1.default.existsSync(t)&&fs_extra_1.default.removeSync(t)}),s.customImage){const t=path_1.default.join(i,"/Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib");let a=fs_extra_1.default.readFileSync(t).toString("hex");if(!s.customImage.endsWith(".png"))return void n.message("fail","IOS 启动页图片配置格式错误,必须为 PNG 格式");let o=s.customImage;o=this.getMaterialFilePath(e,s.customImage);const r=path_1.default.join(i,"Info.plist"),l=plist.readFileSync(r),p=l.UISplashScreenImageName+".png";glob_1.default.sync("LaunchScreen-*.+(png|jpg|jpeg|webp)",{nodir:!0,cwd:i}).forEach(e=>{const t=path_1.default.join(i,e);fs_extra_1.default.removeSync(t)});const d="LaunchScreen-"+uuidv4().slice(0,12),c=d+".png",u=path_1.default.join(i,c);fs_extra_1.default.copyFileSync(o,u),l.UISplashScreenImageName=d,plist.writeFileSync(r,l);const f=Buffer.from(p,"utf-8").toString("hex"),_=Buffer.from(c,"utf-8").toString("hex");-1!==a.indexOf(f)?(a=a.replace(f,_),console.log("replace storyboard customImage success")):console.log("replace storyboard customImage fail"),fs_extra_1.default.writeFileSync(t,Buffer.from(a,"hex"))}return!1}genUseExtendedSdk(e){const i=Object.assign({},e.useExtendedSdk||{});for(const t in e)if("object"==typeof e[t])for(const n in e[t])if(n.startsWith("useExtendedLib_WeApp")&&!0===e[t][n]){i[n.slice("useExtendedLib_".length)]=!0}return!i.WeAppLBS||i.WeAppOpenFuns||i.WeAppOpenFuns_HasPay||(i.WeAppOpenFuns=!0),i}async updateExtendedSdk(e,i,t,n,a,s){const o=path_1.default.join(i,"Frameworks");fs_extra_1.default.ensureDirSync(o),s.progress("update extendsdk...");const r=path_1.default.join(t,"WeAppSDK.podspec"),l=fs_extra_1.default.readFileSync(r,"utf-8"),p=this.genUseExtendedSdk(a);s.progress("useExtendedSdks: "+JSON.stringify(p));const{mobileapp_info:d={}}=e,c=this.getBundleIdentifier(d);if(p.WeAppOpenFuns&&p.WeAppOpenFuns_HasPay)throw new Error("OpenFuncs SDK 只可勾选使用一个,请按需勾选使用");const u={};for(const e in p){if(!p[e])continue;const i=getDepReg(e),a=l.match(i);if(!(null==a?void 0:a[1]))throw new Error(`拓展模块 ${e} 不存在或已被移除,请检查 project.miniapp.json -> 对应平台 -> useExtendedSdk 删除配置 ${e},版本配置差异请参考更新日志或 https://dev.weixin.qq.com/docs/framework/dev/sdk/difflog.html`);const s=[];if(a[1].split("\n").forEach(e=>{const i=e.match(/.*'(.*?)',/);if(null==i?void 0:i[1]){const e=i[1].split("/").pop(),a=path_1.default.join(t,"Libs",n,e);if(!fs_extra_1.default.existsSync(a))throw new Error(`拓展模块 ${e} 不存在或已被移除,请检查 project.miniapp.json -> 对应平台 -> useExtendedSdk 删除配置 ${e},版本配置差异请参考更新日志或 https://dev.weixin.qq.com/docs/framework/dev/sdk/difflog.html`);const r=path_1.default.join(o,e);fs_extra_1.default.copySync(a,r),s.push(path_1.default.basename(e));const l=path_1.default.join(r,"info.plist");if(!fs_extra_1.default.existsSync(l))throw new Error("can not found extendsdk info.plist: "+e);this.changeExtendSDKInfoplistBundleId(l,c,e)}}),s.length){u[s.shift()]=s}}const f=path_1.default.join(i,"DyFrameworks.plist");fs_extra_1.default.existsSync(f)&&fs_extra_1.default.removeSync(f),plist.writeFileSync(f,u)}async updatePrivacyInfo(e,i,t){var n;const a=null===(n=null==i?void 0:i.privacy)||void 0===n?void 0:n.privacyInfo;a&&(a.endsWith("PrivacyInfo.xcprivacy")?fs_extra_1.default.existsSync(a)?(fs_extra_1.default.copySync(a,path_1.default.join(e,"/PrivacyInfo.xcprivacy")),t.progress("隐私清单文件替换成功")):t.message("fail","隐私清单文件替换失败,文件不存在,将使用默认文件"):t.message("fail","隐私清单文件替换失败,文件名必须为 PrivacyInfo.xcprivacy,将使用默认文件"))}async updatePlugin(e,i,t,n,a,s,o,r){if(!i.length)return;const l=path_1.default.join(e,"Frameworks"),p=path_1.default.join(e,"PlugIns");fs_extra_1.default.ensureDirSync(l),r.progress("update plugin...");const d=this.prepareAppexProfileConfig(i,n,t,a,s,o,n.version,r);if(!d)throw new Error("依赖的多端插件需要配置对应的profile");const c={};if(n["mini-plugin"]&&Array.isArray(n["mini-plugin"].ios)){n["mini-plugin"].ios.forEach(e=>{e.open&&e.pluginId&&"string"==typeof e.resourcePath&&e.resourcePath.length>0&&(c[e.pluginId]=e.resourcePath)})}i.forEach(i=>{const{pluginId:n}=i,a=i.dir,s=n+".framework",o=path_1.default.join(l,s);if(-1!==a.indexOf("local-miniapp-plugin")){const e=fs_extra_1.default.statSync(a),{mtime:i}=e;r.progress(`${n}.framework 正在使用本地版本,修改时间为 ${i}`)}fs_extra_1.default.existsSync(o)&&fs_extra_1.default.removeSync(o);const u=path_1.default.join(a,s);if(fs_extra_1.default.existsSync(u)){fs_extra_1.default.copySync(u,o),this.copyResourcesToMainBundle(u,e),this.copyUserResourcePathIntoPlugins(n,t,c[n],path_1.default.join(o,"MiniPlugin.bundle"),r);fs_extra_1.default.readdirSync(a).forEach(i=>{if(i.endsWith(".appex")){const s=path_1.default.parse(i).name,o=d[s],l=path_1.default.join(p,i);if(!o||!0!==o.enable)return;r.progress(`${n} 插件使用 appex 中 : ${i}`),fs_extra_1.default.existsSync(l)&&fs_extra_1.default.removeSync(l),fs_extra_1.default.ensureDirSync(l);const u=path_1.default.join(a,i);fs_extra_1.default.copySync(u,l),(null==o?void 0:o.profilePath)&&fs_extra_1.default.copySync(o.profilePath,path_1.default.join(l,"embedded.mobileprovision")),this.copyResourcesToMainBundle(u,e),this.copyUserResourcePathIntoPlugins(n,t,c[n],path_1.default.join(l,"MiniPlugin.bundle"),r)}})}else fs_extra_1.default.copySync(a,o),this.copyResourcesToMainBundle(a,e),this.copyUserResourcePathIntoPlugins(n,t,c[n],path_1.default.join(o,"MiniPlugin.bundle"),r)})}copyUserResourcePathIntoPlugins(e,i,t,n,a){const s=n;if(t){const n=path_1.default.basename(t),o=this.getMaterialFilePath(i,t);if(o){a.progress(`${e}.framework 正在拷贝配置的资源:${t}`);const i=fs_extra_1.default.lstatSync(o);fs_extra_1.default.ensureDirSync(s),i.isDirectory()?fs_extra_1.default.copySync(o,s):i.isFile()&&fs_extra_1.default.copyFileSync(o,path_1.default.join(s,n))}}}copyResourcesToMainBundle(e,i){const t=path_1.default.join(e,"MiniPlugin.bundle"),n=path_1.default.join(t,"PluginConfig.plist");if(fs_extra_1.default.existsSync(n)){const e=plist.readFileSync(n).CopyResourcesToMainBundle;(null==e?void 0:e.length)&&e.forEach(e=>{const n=path_1.default.join(t,e);fs_extra_1.default.existsSync(n)&&fs_extra_1.default.copySync(n,path_1.default.join(i,e))})}}prepareAppexProfileConfig(e,i,t,n,a,s,o,r){if(!n)return void r.message("doing","miniappCacheDirPath is missing");let l=!1;const p={};if(i["mini-plugin"]&&Array.isArray(i["mini-plugin"].ios)){i["mini-plugin"].ios.forEach(e=>{if(e.open&&e.pluginId&&"object"==typeof e.appexProfiles)for(const i in e.appexProfiles){r.message("doing",`检查插件 ${e.pluginId} ${i} appex 配置中 ...`);const n=e.appexProfiles[i];if(!0===n.enable){const s=`${e.pluginId}_${i}`;p[s]={enable:!0};let o=n.profilePath;if(a&&(o=n.distributeProfilePath),n.bundleID&&o){const a=path_1.default.join(t,o);fs_extra_1.default.existsSync(a)?(p[s].bundleID=n.bundleID,p[s].profilePath=path_1.default.join(t,o)):(l=!0,r.message("fail",`${e.pluginId} 中 ${i} 的 profilePath 无法找到对应的文件:${a}(需要在小程序项目路径下,填入相对于项目根目录的路径)`))}else l=!0,r.message("fail",`${e.pluginId}中${i} 是 无效的appexProfiles配置。需要配置 bundleID,profilePath,distributeProfilePath。profile 文件需要放置在小程序项目内,然后配置相对于小程序项目根目录的相对路径。分发证书构建的情况下, 一定需要配置distributeProfilePath。查看文档了解详情。`)}}})}if(e.forEach(e=>{fs_extra_1.default.readdirSync(e.dir).forEach(i=>{if(i.endsWith(".appex")){const t=path_1.default.parse(i).name,n=p[t];if(n&&!0===n.enable)if(n.bundleID&&n.profilePath){if(n.bundleID&&n.profilePath){const t=path_1.default.join(e.dir,i,"info.plist"),a=n.bundleID;this.changeInfoplistBundleId(t,a),this.changeInfoplistBundleVersion(t,s,o),r.message("doing",`${e.pluginId} ${i} ${a} ${t} 处理 appex bundle ID 中`)}}else l=!0,r.message("fail",`${e.pluginId} 的 多端插件包含了${t.slice(e.pluginId.length+1)} 的 appex。开发者需要在project.miniapp.json 中 mini-plugin 配置下对应合理的 profile 文件。查看文档了解详情。`)}})}),l)return!1;if(!(0,lodash_1.isEmpty)(p)){const e=path_1.default.join(n,APPEX_PROFILES_MAPS_FILE);fs_extra_1.default.existsSync(e)&&fs_extra_1.default.removeSync(e),fs_extra_1.default.ensureFileSync(e);const i={};for(const e in p)i[e]={bundleID:p[e].bundleID,profilePath:p[e].profilePath};fs_extra_1.default.writeFileSync(e,JSON.stringify(i));const t=path_1.default.join(n,APPEX_PROFILES_MAPS_FOR_SHELL_FILE);fs_extra_1.default.existsSync(t)&&fs_extra_1.default.removeSync(t),fs_extra_1.default.ensureFileSync(t);const a=Object.keys(p).map(e=>{const i=p[e];return`pluginAppexName:${e};_;_;bundleID:${i.bundleID};_;_;profile:${i.profilePath}\n\n`}).join("");fs_extra_1.default.writeFileSync(t,a)}return p}changeExtendSDKInfoplistBundleId(e,i,t){const n=`${i}.${path_1.default.parse(t).name.replace(/_/g,"")}`;return this.changeInfoplistBundleId(e,n)}changeInfoplistBundleId(e,i){const t=plist.readFileSync(e);return t.CFBundleIdentifier=i,plist.writeFileSync(e,t),t.CFBundleIdentifier}changeInfoplistBundleVersion(e,i,t){const n=plist.readFileSync(e);return n.CFBundleVersion=i,n.CFBundleShortVersionString=t,plist.writeFileSync(e,n),n.CFBundleIdentifier}async getEntitlements(e,i,t,n){const{mobileapp_info:a={}}=e;let s=a.ios_universal_link||a.debug_ios_universal_link;return(s.startsWith("https://")||s.startsWith("http://"))&&(s=s.replace(/^http(s)?:\/\//g,"applinks:")),{"com.apple.developer.associated-domains":s}}useTpush(e){return(0,miniappJson_1.iOSMiniAppJsonIsUsingTpush)(e)}async buildCloud(e,i){const{projectPath:t,demoIpaPath:n,sdkPath:a,arch:s="arm64",bindingInfo:o,certificateInfo:r,output:l,miniappCacheDirPath:p,pluginDirList:d,inLandun:c,theme:u,i18nInfo:f}=e,_=this.generateTempDemoIpaPath(n),{selfCertificate:h={}}=r,g=(null==h?void 0:h.isPublish)||!1,m=(0,miniappJson_1.tryGetIOSMiniappJson)(t),y=this.useTpush(m);if((0,lodash_1.isEmpty)(m))throw new Error("获取project.miniapp.json失败");if(errorIOSSdkVersions.includes(m.sdkVersion))throw new Error("当前 mini-ios.sdkVersion 存在缺陷,请参考更新日志进行修改");let S=o;if(r.signType===miniapp_builder_1.miniappSinTypes.appleId.type){const{mobileapp_info:e={}}=S;S=Object.assign(Object.assign({},S),{mobileapp_info:Object.assign(Object.assign({},e),{bundle_id:miniapp_builder_1.DEFAULT_BUNDLE_ID,debug_ios_bundle_id:miniapp_builder_1.DEFAULT_BUNDLE_ID})})}const I=await this.updateIOSInfoPlistInfo(t,S,_,m,i,f);await this.updateIOSAppConfigPlistInfo(t,S,_,m,a,!1,i,u,f),await this.updateIOSAppexInfoPlistInfo(S,_,m,I,i),await this.updateIOSIcons(t,_,p,m,g,i),await this.updateSplashScreen(t,_,m,i,u),await this.updateExtendedSdk(S,_,a,s,m,i),await this.updatePlugin(_,d,t,m,p,g,I,i),await this.updatePrivacyInfo(_,m,i);const x=await this.getEntitlements(S,_,m,i),{mobileapp_info:b={}}=S;let v;v=r.signType===miniapp_builder_1.miniappSinTypes.appleId.type?miniapp_builder_1.DEFAULT_BUNDLE_ID:b.ios_flag&&b.bundle_id||b.debug_ios_bundle_id;const P={bundleId:v,output:l,entitlements:x};if(m.buildCloud&&(m.buildCloud.certificate&&"string"==typeof m.buildCloud.certificate&&(P.certificate=m.buildCloud.certificate),m.buildCloud.profile&&"string"==typeof m.buildCloud.profile&&(P.profile=path_1.default.join(t,m.buildCloud.profile)),y&&m.buildCloud.tpnsProfile&&"string"==typeof m.buildCloud.tpnsProfile&&(P.tpnsProfile=path_1.default.join(t,m.buildCloud.tpnsProfile))),h.isPublish){const e=await(0,codesign_1.codesignAndExport)(t,_,p||"",P,i,y,!0===c);if(!0!==e.success)throw new Error("Build ipa failed:"+(e.errMsg||"codesignAndExport failed"))}return{projectPath:t,demoIpaPath:_,opts:P,iosMiniappJson:m,isPublish:g}}async writeI18NInfoFile(e,i,t){Object.keys(i).forEach(n=>{if("base"===n)return;let a="";Object.keys(t).forEach(e=>{var s,o,r,l;(null===(o=null===(s=i[n])||void 0===s?void 0:s.ios)||void 0===o?void 0:o[t[e]])&&(a+=`${e} = "${null===(l=null===(r=i[n])||void 0===r?void 0:r.ios)||void 0===l?void 0:l[t[e]]}";\n`)}),a&&(fs_extra_1.default.ensureDirSync(path_1.default.join(e,n+".lproj")),fs_extra_1.default.writeFileSync(path_1.default.join(e,n+".lproj/InfoPlist.strings"),a))})}getMaterialFilePath(e,i){if(!i)return"";let t=i;if(path_1.default.isAbsolute(i)||(t=path_1.default.join(e,i)),fs_extra_1.default.existsSync(t))return t;const n=(0,tools_1.generateMD5)(i),a=path_1.default.basename(i),s=path_1.default.join(e,exports.remoteBuildProjectMaterialAbsoluteCacheDir,`${n}_${a}`);return fs_extra_1.default.existsSync(s)?s:""}}exports.default=new buildCloudManager;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.remoteBuildProjectMaterialAbsoluteCacheDir=void 0;const tslib_1=require("tslib"),child_process=tslib_1.__importStar(require("child_process")),path_1=tslib_1.__importDefault(require("path")),fs_extra_1=tslib_1.__importDefault(require("fs-extra")),glob_1=tslib_1.__importDefault(require("glob")),env_1=require("../../../utils/env"),miniapp_builder_1=require("../../../utils/miniapp-builder"),codesign_1=require("../../../utils/codesign"),miniappJson_1=require("../../../utils/miniappJson"),lodash_1=require("lodash"),tools_1=require("../../../utils/tools"),uuidv4=require("uuid/v4"),sizeOf=require("image-size"),plist=require("simple-plist"),errorIOSSdkVersions=["1.0.19"],APPEX_PROFILES_MAPS_FILE="__appexProfilesCacheDir__/profilesMap.json",APPEX_PROFILES_MAPS_FOR_SHELL_FILE="__appexProfilesCacheDir__/profilesMapForShell.txt",defaultIconDirPath=path_1.default.join(__dirname,"../../../static/images/"),getDepReg=e=>new RegExp(`s.subspec '${e}'.*\n(?:.*\n)*?(?:.*sp.vendored_frameworks = \\[\n)((?:.*'.*?'.*\n)*?)(?:.*\\]\n)`,"m"),allowTheme=["Light","LightSpecial","Dark","DarkSpecial","Default"];exports.remoteBuildProjectMaterialAbsoluteCacheDir="__absoluteFile";const iconInfoMap={appStore1024:{size:[1024,1024],scale:1,idiom:"ios-marketing",required:!0},appStore1024Other:{size:[1024,1024],scale:1,idiom:"ios-marketing-other"},mainIcon120:{size:[60,60],scale:2,idiom:"iphone",required:!0},mainIcon180:{size:[60,60],scale:3,idiom:"iphone"},spotlightIcon80:{size:[40,40],scale:2,idiom:"iphone"},spotlightIcon120:{size:[40,40],scale:3,idiom:"iphone"},settingsIcon58:{size:[29,29],scale:2,idiom:"iphone"},settingsIcon87:{size:[29,29],scale:3,idiom:"iphone"},notificationIcon40:{size:[20,20],scale:2,idiom:"iphone"},notificationIcon60:{size:[20,20],scale:3,idiom:"iphone"},ipadMainIcon152:{size:[76,76],scale:2,idiom:"ipad"},ipadMainIcon167:{size:[83.5,83.5],scale:2,idiom:"ipad"},ipadSpotlightIcon40:{size:[40,40],scale:1,idiom:"ipad"},ipadSpotlightIcon80:{size:[40,40],scale:2,idiom:"ipad"},ipadSettingsIcon29:{size:[29,29],scale:1,idiom:"ipad"},ipadSpotlightIcon58:{size:[29,29],scale:2,idiom:"ipad"},ipadNotificationIcon20:{size:[20,20],scale:1,idiom:"ipad"},ipadNotificationIcon40:{size:[20,20],scale:2,idiom:"ipad"}};class buildCloudManager{generateTempDemoIpaPath(e){const i=path_1.default.join(e,"../.."),t=path_1.default.basename(i),n=path_1.default.dirname(i),a=path_1.default.join(n,t+"-operateDir");fs_extra_1.default.existsSync(a)&&fs_extra_1.default.removeSync(a),fs_extra_1.default.ensureDirSync(a);const s=path_1.default.join(a,"Payload/demo.app");return fs_extra_1.default.copySync(e,s),s}generateInfoPlistCFBundleURLTypesItem(e){const i={};return e.CFBundleURLName&&(i.CFBundleURLName=e.CFBundleURLName),e.CFBundleURLSchemes&&(i.CFBundleURLSchemes=[e.CFBundleURLSchemes]),e.CFBundleTypeRole&&(i.CFBundleTypeRole=e.CFBundleTypeRole),i}updatePrivacyBackgroundImage(e,i,t,n,a){t.message("doing","updatePrivacyBackgroundImage "+n);if(fs_extra_1.default.readdirSync(i).forEach(e=>{"privacy_"+n===path_1.default.basename(e,path_1.default.extname(e))&&fs_extra_1.default.removeSync(path_1.default.join(i,e))}),!a)return;path_1.default.isAbsolute(a)||(a=path_1.default.join(e,a)),a=this.getMaterialFilePath(e,a);const s=path_1.default.extname(a),o=path_1.default.join(i,`privacy_${n}${s}`);try{fs_extra_1.default.copyFileSync(a,o)}catch(e){throw t.message("fail",`copy privacy image failed: ${n}, ${a} to ${o}`),e}}async updateIOSInfoPlistInfo(e,i,t,n,a,s){var o,l,r,d,p,u,c,f,_,h;a.progress("update app base info...");const{mobileapp_info:g={}}=i,m=g.mobileapp_id,y=path_1.default.join(t,"Info.plist"),I={},S=(e,i)=>{var t,n;if((null==i?void 0:i.startsWith("%"))&&(null==i?void 0:i.endsWith("%"))){const o=i.slice(1,-1);I[e]=o;const l=(null===(n=null===(t=null==s?void 0:s.base)||void 0===t?void 0:t.ios)||void 0===n?void 0:n[o])||"";return l||a.message("fail",`未在国际化配置 base.json 中找到字段 ${o},请检查`),l}return i};S("UISplashScreenImageName",null===(o=null==n?void 0:n.splashscreen)||void 0===o?void 0:o.customImage),S("UILaunchStoryboardName",null===(l=null==n?void 0:n.splashscreen)||void 0===l?void 0:l.customImage);const x=plist.readFileSync(y);if(x.CFBundleName=S("CFBundleName",n.name),x.CFBundleDisplayName=S("CFBundleDisplayName",n.name),x.CFBundleShortVersionString=n.version,"number"==typeof n.versionCode?x.CFBundleVersion=parseInt(n.versionCode.toString(),10).toString():x.CFBundleVersion=(parseInt(x.CFBundleVersion,10)+1).toString(),x.CFBundleIdentifier=this.getBundleIdentifier(g),Array.isArray(x.CFBundleURLTypes)||(x.CFBundleURLTypes=[]),(null===(d=null===(r=x.CFBundleURLTypes)||void 0===r?void 0:r[0])||void 0===d?void 0:d.CFBundleURLSchemes)&&(x.CFBundleURLTypes[0].CFBundleURLSchemes=[m]),x.CFBundleURLTypes[0]&&(x.CFBundleURLTypes=[x.CFBundleURLTypes[0]]),Object.keys(miniappJson_1.iosPrivacyDescObj).forEach(e=>{var i,t;(null===(i=null==n?void 0:n.privateDescriptions)||void 0===i?void 0:i[e])?x[e]=S(e,null===(t=n.privateDescriptions)||void 0===t?void 0:t[e]):delete x[e]}),!0===(null===(p=null==n?void 0:n.infoPlist)||void 0===p?void 0:p.DisableAppUsesNonExemptEncryption)?x.ITSAppUsesNonExemptEncryption=!1:delete x.ITSAppUsesNonExemptEncryption,x.UIBackgroundModes=[],!0===(null===(u=null==n?void 0:n.infoPlist)||void 0===u?void 0:u.AudioInBackgroundMode)&&x.UIBackgroundModes.push("audio"),!0===(null===(c=null==n?void 0:n.infoPlist)||void 0===c?void 0:c.LocationInBackgroundMode)&&x.UIBackgroundModes.push("location"),!0===(null===(f=null==n?void 0:n.infoPlist)||void 0===f?void 0:f.requiresFullScreen)?x.UIRequiresFullScreen=!0:delete x.UIRequiresFullScreen,"object"==typeof(null===(_=null==n?void 0:n.infoPlist)||void 0===_?void 0:_.CFBundleURLTypes)){const e=this.generateInfoPlistCFBundleURLTypesItem(n.infoPlist.CFBundleURLTypes);x.CFBundleURLTypes.push(e);const{additionalCFBundleURLTypes:i}=n.infoPlist.CFBundleURLTypes;Array.isArray(i)&&i.forEach(e=>{if("object"==typeof e){const i=this.generateInfoPlistCFBundleURLTypesItem(e);x.CFBundleURLTypes.push(i)}})}if(!0===n.enableIpad&&((0,miniappJson_1.iOSAppJsonIsUsingIPadResizable)(e)?(x["UISupportedInterfaceOrientations~ipad"]=["UIInterfaceOrientationPortrait","UIInterfaceOrientationPortraitUpsideDown","UIInterfaceOrientationLandscapeLeft","UIInterfaceOrientationLandscapeRight"],a.progress("ipad is support Landscape")):(x["UISupportedInterfaceOrientations~ipad"]=["UIInterfaceOrientationPortrait","UIInterfaceOrientationPortraitUpsideDown"],a.progress("ipad is not support Landscape"))),null===(h=n.infoPlist)||void 0===h?void 0:h.LSApplicationQueriesSchemes){const e=n.infoPlist.LSApplicationQueriesSchemes.split(",");e.length&&x.LSApplicationQueriesSchemes.push(...e.filter(e=>e))}return plist.writeFileSync(y,x),await this.writeI18NInfoFile(t,s,I),x.CFBundleVersion}getBundleIdentifier(e){return e.ios_flag&&e.bundle_id||e.debug_ios_bundle_id}useGDT(e){return(0,miniappJson_1.iOSMiniAppJsonIsUsingGDT)(e)}async updateIOSAppConfigPlistInfo(e,i,t,n,a,s,o,l="Dark",r){var d,p,u,c;o.progress("update app module info...");const{module_info:f={},cpa_info:_={},cpa_package_info:h={enable_remove_watermark:!1}}=i;if(!_.sdk_key||!_.sdk_key_secret)throw new Error("sdkKey and sdkSecret not found");const g=path_1.default.join(t,"MiniApp.bundle"),m=path_1.default.join(g,"AppConfig.plist"),y=plist.readFileSync(m);h.enable_remove_watermark?y.enableRemoveWatermark=!0:y.splashscreenTheme=l,y.miniModuleId=f.module_id,y.sdkKey=_.sdk_key,y.sdkSecret=_.sdk_key_secret;const{privacy:I={}}=n;y.privacy||(y.privacy={}),y.privacy.enable=!!I.enable;const S=path_1.default.posix.join(g,"configs/privacy.json"),{contentViewImage:x,cancelButtonImage:v,confirmButtonImage:b,template:P}=I;if(I.enable){let i=P||"";if(fs_extra_1.default.ensureDirSync(path_1.default.posix.join(g,"configs")),i.startsWith("%")&&i.endsWith("%")){const t=P.slice(1,-1);i=(null===(p=null===(d=null==r?void 0:r.base)||void 0===d?void 0:d.ios)||void 0===p?void 0:p[t])||"",i||o.message("fail",`未在国际化配置 base.json 中找到字段 ${t},请检查`),Object.keys(r).forEach(i=>{var n,a;if("base"===i)return;let s=null===(a=null===(n=r[i])||void 0===n?void 0:n.ios)||void 0===a?void 0:a[t];if(s){s=this.getMaterialFilePath(e,s);const t=`configs/privacy-${i}.json`,n=path_1.default.posix.join(g,t);fs_extra_1.default.existsSync(s)?fs_extra_1.default.copyFileSync(s,n):o.message("fail",`未找到隐私协议在国际化配置 ${i}.json 中配置的文件 ${s},请检查`)}})}i?(i=this.getMaterialFilePath(e,i),fs_extra_1.default.existsSync(i)?(fs_extra_1.default.copyFileSync(i,S),y.privacy.template="configs/privacy.json"):(o.message("fail",`未找到隐私协议中配置的文件 ${i},请检查`),y.privacy.template="configs/defaultPrivacy.json")):y.privacy.template="configs/defaultPrivacy.json",!0===I.enableNativePlugin&&"string"==typeof I.nativePluginId&&I.nativePluginId.length>2&&(y.privacy.plugin={pluginId:I.nativePluginId,enable:!0})}else y.privacy.template="",fs_extra_1.default.removeSync(S);this.updatePrivacyBackgroundImage(e,t,o,"contentViewImage",x),this.updatePrivacyBackgroundImage(e,t,o,"confirmButtonImage",b),this.updatePrivacyBackgroundImage(e,t,o,"cancelButtonImage",v);const{appMenuEnable:F=!0}=n;y.appMenuEnable=F;const{enableVConsole:j="undefined"}=n;y.enableVConsole=j;const{tpush:B}=n;let C=!1;if("object"==typeof B){const e=path_1.default.posix.join(t,"PlugIns/TPNSService.appex"),i=path_1.default.posix.join(e,"AppConfig.plist");if(this.useTpush(n)){y.TPNSAccessID=B.accessID,y.TPNSAccessKey=B.accessKey,B.clusterDomainName?y.clusterDomainName=B.clusterDomainName:delete y.clusterDomainName;const t=s?"x86_64":"arm64",n=path_1.default.join(a,`appex/${t}/TPNSService.appex`);if(!fs_extra_1.default.existsSync(n))throw new Error("can not found extendsdk: "+n);try{fs_extra_1.default.copySync(n,e),plist.writeFileSync(i,y),C=!0}catch(e){throw new Error("copy TPNSService.appex to app failed: "+e)}}}if(!C)try{const e=path_1.default.posix.join(t,"PlugIns");fs_extra_1.default.existsSync(e)?(fs_extra_1.default.removeSync(e),o.progress("removed PlugIns folder...")):o.progress("no PlugIns folder...")}catch(e){throw new Error("remove TPNSService.appex from app failed: "+e)}if(null===(u=n.useExtendedSdk)||void 0===u?void 0:u.WeAppLBS){if(!n.qmapAPIKey)throw new Error("You need to provide the Tencent Location Service API Key when using LBS SDK.");y.qmapAPIKey=n.qmapAPIKey}const{gdt:w}=n,L=this.useGDT(n);if(y.GDTAd=L?{appid:w.appid,enable:!0,SplashAd:{placementId:w.splashAd_placementId,fetchDelay:w.splashAd_fetchDelay||3,defaultEnable:null===(c=w.splashAd_defaultEnable)||void 0===c||c}}:{appid:"",enable:!1,SplashAd:{placementId:"",fetchDelay:3}},n["mini-plugin"]&&Array.isArray(n["mini-plugin"].ios)){const e=n["mini-plugin"].ios.filter(e=>!!(e.open&&e.pluginId&&e.loadWhenStart)).map(e=>e.pluginId);y.plugins={loadWhenStart:e}}const{enableDebugLog:$=!1}=n;y.enableDebugLog=$;const{debugLogSizeLimit:D=10}=n;isNaN(Number(D))?o.message("fail",`ios debugLogSizeLimit ${D} is NaN`):y.debugLogSizeLimit=Number(D);const{enableOpenUrlNavigate:E=!1}=n;y.enableOpenUrlNavigate=E,plist.writeFileSync(m,y)}async updateIOSAppexInfoPlistInfo(e,i,t,n,a){if(this.useTpush(t)){a.progress("update appex for notification base info...");const{mobileapp_info:s={}}=e,o=path_1.default.join(i,"PlugIns/TPNSService.appex"),l=path_1.default.join(o,"Info.plist"),r=plist.readFileSync(l);r.CFBundleShortVersionString=t.version,a.progress("update appex for CFBundleVersion: "+n),r.CFBundleVersion=n;const d=s.ios_flag&&s.bundle_id||s.debug_ios_bundle_id;r.CFBundleIdentifier=t.tpush.serviceBundleId||d+".service",a.progress("update appex bundle identifier for infoPlist : "+r.CFBundleIdentifier),plist.writeFileSync(l,r)}else a.progress("not using tpush...")}updateBundleIcons(e,i,t,n,a){const s=[],o=[],l=[];for(const r in t){if(!t[r])continue;const d=this.getMaterialFilePath(e,t[r]);if(!d)return void a.message("fail","getMatrialFailed: "+t[r]);const p=iconInfoMap[r];try{const e=sizeOf(d),i=p.size[0]*p.scale,n=p.size[1]*p.scale;if(e.width!==i||e.height!==n){a.progress(`check ${r} size failed, require [${i}, ${n}] but [${e.width}, ${e.height}] ingore ${t[r]} `);continue}}catch(e){a.progress(`get ${r} info failed, ingore ${t[r]}(e: ${e.message})`);continue}const u=path_1.default.extname(d),c=1===p.scale?"":`@${p.scale}x`,f=`${p.size[0]}x${p.size[1]}`,_=r.startsWith("ipad"),h="appStore1024"===r||"appStore1024Other"===r,g="appStore1024Other"===r?n+"Other":n,m=path_1.default.join(i,`${g}${f}${c}${_?"~ipad":""}${u}`),y={from:d,to:m,filename:path_1.default.basename(m),size:f,scale:p.scale+"x",idiom:p.idiom,key:r};s.push(y),h||(_?l.includes(`${g}${f}`)||l.push(`${g}${f}${c}`):o.includes(`${g}${f}`)||o.push(`${g}${f}${c}`))}return{iphoneBundleIconFiles:o,ipadBundleIconFiles:l,addFiles:s}}async updateIOSIcons(e,i,t,n,a,s){s.progress("update app icons...");const{icons:o={}}=n,l=a&&!env_1.isWin&&!!t;s.progress("genAssetCar: "+l);const r=glob_1.default.sync("AppIcon*.+(png|jpg|jpeg|webp)",{nodir:!0,cwd:i}).map(e=>path_1.default.join(i,e)),d="AppIcon-"+uuidv4().slice(0,8),p=this.updateBundleIcons(e,i,o,d,s);if(!p)throw new Error("updateBundleIcons failed");const{iphoneBundleIconFiles:u=[],ipadBundleIconFiles:c=[],addFiles:f=[]}=p,_={};for(const e in iconInfoMap){if(!iconInfoMap[e].required||o[e])continue;const i=iconInfoMap[e].size[0]*iconInfoMap[e].scale,t=iconInfoMap[e].size[1]*iconInfoMap[e].scale;if(_[e]=path_1.default.join(defaultIconDirPath,`donut-icon${i}x${t}.png`),s.progress(`using default app icons when ${e} is not config...`),!fs_extra_1.default.existsSync(_[e]))throw new Error(`required ${e} but not default or set`)}const h=this.updateBundleIcons(e,i,_,d,s);if(!h)throw new Error("updateBundleIcons WithDefaultIcon failed");const{iphoneBundleIconFiles:g,ipadBundleIconFiles:m,addFiles:y}=h;if(u.push(...g),c.push(...m),f.push(...y),!u.length&&!c.length)return;r.forEach(e=>{fs_extra_1.default.existsSync(e)&&fs_extra_1.default.removeSync(e)});const I=path_1.default.join(t,"__assetCarOperateDir/assetsCar/"),S=path_1.default.join(I,`Assets.xcassets/${d}.appiconset/`);l&&(fs_extra_1.default.ensureDirSync(S),fs_extra_1.default.emptyDirSync(S));const x=[];let v=!1;if(f.forEach(e=>{fs_extra_1.default.existsSync(e.to)&&fs_extra_1.default.removeSync(e.to),fs_extra_1.default.copyFileSync(e.from,e.to),l&&(fs_extra_1.default.copySync(e.from,path_1.default.join(S,e.filename)),console.log("看看啊",path_1.default.join(S,e.filename)),"ios-marketing-other"===e.idiom&&(v=!0),x.push({filename:e.filename,size:e.size,scale:e.scale,idiom:e.idiom}))}),l&&fs_extra_1.default.writeJsonSync(path_1.default.join(S,"Contents.json"),{images:x,info:{author:"xcode",version:1}},{spaces:"\t"}),l){const e=path_1.default.join(__dirname,"../../../static/scripts/assetsCar/"),t=path_1.default.join(I,"createAssetsCar");fs_extra_1.default.copySync(e,I);try{await(0,codesign_1.checkXcodeEnv)(s),child_process.execSync(`"${t}" ${d}`,{env:(0,env_1.getProcessEnv)()})}catch(e){s.progress("createAssetsCar failed "+(e.message||""))}const n=path_1.default.join(I,"build/Assets.car"),a=path_1.default.join(i,"Assets.car");fs_extra_1.default.copyFileSync(n,a)}else{const e=path_1.default.join(i,"Assets.car");fs_extra_1.default.removeSync(e)}const b=path_1.default.join(i,"Info.plist"),P=plist.readFileSync(b);if(!P.CFBundleIcons){const e={CFBundlePrimaryIcon:{}};P.CFBundleIcons=e}v&&(P.CFBundleIcons.CFBundleAlternateIcons={OtherAppStoreIcon:{CFBundleIconFiles:[d+"Other"],CFBundleIconName:"OtherAppStoreIcon"}}),P.CFBundleIcons.CFBundlePrimaryIcon.CFBundleIconName=d,P.CFBundleIcons.CFBundlePrimaryIcon.CFBundleIconFiles=u,P["CFBundleIcons~ipad"]||(P["CFBundleIcons~ipad"]={CFBundlePrimaryIcon:{}}),P["CFBundleIcons~ipad"].CFBundlePrimaryIcon.CFBundleIconName=d,P["CFBundleIcons~ipad"].CFBundlePrimaryIcon.CFBundleIconFiles=c,P.NSAppTransportSecurity={NSAllowsArbitraryLoads:!0},plist.writeFileSync(b,P)}replaceLaunchScreenImage(e,i,t,n,a,s){const o=path_1.default.join(e,"01J-lp-oVM-view-Ze5-6b-2t3.nib");let l=fs_extra_1.default.readFileSync(o).toString("hex");if(!i.endsWith(".png"))return void n.message("fail","IOS 启动页图片配置格式错误,必须为 PNG 格式, 错误配置:"+i);const r=this.getMaterialFilePath(a,i),d=t+".png",p="LaunchScreen-"+uuidv4().slice(0,12),u=p+".png",c=path_1.default.join(s,u);fs_extra_1.default.copyFileSync(r,c);const f=Buffer.from(d,"utf-8").toString("hex"),_=Buffer.from(u,"utf-8").toString("hex");return-1!==l.indexOf(f)?(l=l.replace(f,_),console.log("replace storyboard customImage success")):console.log("replace storyboard customImage fail"),fs_extra_1.default.writeFileSync(o,Buffer.from(l,"hex")),p}async updateSplashScreen(e,i,t,n,a="Dark",s){var o,l,r;let d;n.progress("update splashscreen image..."),allowTheme.includes(a)&&(d=path_1.default.join(i,`/Base.lproj/LaunchScreen${a}.storyboardc`)),d&&fs_extra_1.default.existsSync(d)&&fs_extra_1.default.copySync(d,path_1.default.join(i,"/Base.lproj/LaunchScreen.storyboardc")),allowTheme.forEach(e=>{const t=path_1.default.join(i,`/Base.lproj/LaunchScreen${e}.storyboardc`);fs_extra_1.default.existsSync(t)&&fs_extra_1.default.removeSync(t)});let p=null===(o=null==t?void 0:t.splashscreen)||void 0===o?void 0:o.customImage;if(!p)return;const u=path_1.default.join(i,"Info.plist"),c=plist.readFileSync(u),f=c.UISplashScreenImageName;if(glob_1.default.sync("LaunchScreen-*.+(png|jpg|jpeg|webp)",{nodir:!0,cwd:i}).forEach(e=>{const t=path_1.default.join(i,e);fs_extra_1.default.removeSync(t)}),p.startsWith("%")&&(null==p?void 0:p.endsWith("%"))){const t=p.slice(1,-1),a=(null===(r=null===(l=null==s?void 0:s.base)||void 0===l?void 0:l.ios)||void 0===r?void 0:r[t])||"";if(!a)return void n.message("fail",`未在国际化配置 base.json 中找到字段 ${t},请检查,启动页国际化配置失败`);p=a,Object.keys(s).forEach(a=>{var o,l;if("base"===a)return;const r=null===(l=null===(o=s[a])||void 0===o?void 0:o.ios)||void 0===l?void 0:l[t];if(r){const t=path_1.default.join(i,`/${a}.lproj/LaunchScreen_${a}.storyboardc`);fs_extra_1.default.ensureDirSync(path_1.default.join(t,"..")),fs_extra_1.default.copySync(path_1.default.join(i,"/Base.lproj/LaunchScreen.storyboardc"),t);const s=this.replaceLaunchScreenImage(t,this.getMaterialFilePath(e,r),f,n,e,i);n.progress(`update ${a} splashscreen image...`);const o=fs_extra_1.default.readFileSync(path_1.default.join(i,a+".lproj/InfoPlist.strings"),"utf8");let l="";l=s?o.replace("__UISplashScreenImageName__",`UISplashScreenImageName = "${s}";\n`).replace("__UILaunchStoryboardName__",`UILaunchStoryboardName = "LaunchScreen_${a}";\n`):o.replace("__UISplashScreenImageName__","").replace("__UILaunchStoryboardName__",""),fs_extra_1.default.writeFileSync(path_1.default.join(i,a+".lproj/InfoPlist.strings"),l),n.progress(`update ${a} splashscreen image success`)}})}n.progress("update base splashscreen image...");const _=this.replaceLaunchScreenImage(path_1.default.join(i,"/Base.lproj/LaunchScreen.storyboardc"),this.getMaterialFilePath(e,p),f,n,e,i);n.progress("update base splashscreen image success"),_&&(c.UISplashScreenImageName=_,c.UILaunchStoryboardName="LaunchScreen",plist.writeFileSync(u,c))}genUseExtendedSdk(e){const i=Object.assign({},e.useExtendedSdk||{});for(const t in e)if("object"==typeof e[t])for(const n in e[t])if(n.startsWith("useExtendedLib_WeApp")&&!0===e[t][n]){i[n.slice("useExtendedLib_".length)]=!0}return!i.WeAppLBS||i.WeAppOpenFuns||i.WeAppOpenFuns_HasPay||(i.WeAppOpenFuns=!0),i}async updateExtendedSdk(e,i,t,n,a,s){const o=path_1.default.join(i,"Frameworks");fs_extra_1.default.ensureDirSync(o),s.progress("update extendsdk...");const l=path_1.default.join(t,"WeAppSDK.podspec"),r=fs_extra_1.default.readFileSync(l,"utf-8"),d=this.genUseExtendedSdk(a);s.progress("useExtendedSdks: "+JSON.stringify(d));const{mobileapp_info:p={}}=e,u=this.getBundleIdentifier(p);if(d.WeAppOpenFuns&&d.WeAppOpenFuns_HasPay)throw new Error("OpenFuncs SDK 只可勾选使用一个,请按需勾选使用");const c={};for(const e in d){if(!d[e])continue;const i=getDepReg(e),a=r.match(i);if(!(null==a?void 0:a[1]))throw new Error(`拓展模块 ${e} 不存在或已被移除,请检查 project.miniapp.json -> 对应平台 -> useExtendedSdk 删除配置 ${e},版本配置差异请参考更新日志或 https://dev.weixin.qq.com/docs/framework/dev/sdk/difflog.html`);const s=[];if(a[1].split("\n").forEach(e=>{const i=e.match(/.*'(.*?)',/);if(null==i?void 0:i[1]){const e=i[1].split("/").pop(),a=path_1.default.join(t,"Libs",n,e);if(!fs_extra_1.default.existsSync(a))throw new Error(`拓展模块 ${e} 不存在或已被移除,请检查 project.miniapp.json -> 对应平台 -> useExtendedSdk 删除配置 ${e},版本配置差异请参考更新日志或 https://dev.weixin.qq.com/docs/framework/dev/sdk/difflog.html`);const l=path_1.default.join(o,e);fs_extra_1.default.copySync(a,l),s.push(path_1.default.basename(e));const r=path_1.default.join(l,"info.plist");if(!fs_extra_1.default.existsSync(r))throw new Error("can not found extendsdk info.plist: "+e);this.changeExtendSDKInfoplistBundleId(r,u,e)}}),s.length){c[s.shift()]=s}}const f=path_1.default.join(i,"DyFrameworks.plist");fs_extra_1.default.existsSync(f)&&fs_extra_1.default.removeSync(f),plist.writeFileSync(f,c)}async updatePrivacyInfo(e,i,t){var n;const a=null===(n=null==i?void 0:i.privacy)||void 0===n?void 0:n.privacyInfo;a&&(a.endsWith("PrivacyInfo.xcprivacy")?fs_extra_1.default.existsSync(a)?(fs_extra_1.default.copySync(a,path_1.default.join(e,"/PrivacyInfo.xcprivacy")),t.progress("隐私清单文件替换成功")):t.message("fail","隐私清单文件替换失败,文件不存在,将使用默认文件"):t.message("fail","隐私清单文件替换失败,文件名必须为 PrivacyInfo.xcprivacy,将使用默认文件"))}async updatePlugin(e,i,t,n,a,s,o,l){if(!i.length)return;const r=path_1.default.join(e,"Frameworks"),d=path_1.default.join(e,"PlugIns");fs_extra_1.default.ensureDirSync(r),l.progress("update plugin...");const p=this.prepareAppexProfileConfig(i,n,t,a,s,o,n.version,l);if(!p)throw new Error("依赖的多端插件需要配置对应的profile");const u={};if(n["mini-plugin"]&&Array.isArray(n["mini-plugin"].ios)){n["mini-plugin"].ios.forEach(e=>{e.open&&e.pluginId&&"string"==typeof e.resourcePath&&e.resourcePath.length>0&&(u[e.pluginId]=e.resourcePath)})}i.forEach(i=>{const{pluginId:n}=i,a=i.dir,s=n+".framework",o=path_1.default.join(r,s);if(-1!==a.indexOf("local-miniapp-plugin")){const e=fs_extra_1.default.statSync(a),{mtime:i}=e;l.progress(`${n}.framework 正在使用本地版本,修改时间为 ${i}`)}fs_extra_1.default.existsSync(o)&&fs_extra_1.default.removeSync(o);const c=path_1.default.join(a,s);if(fs_extra_1.default.existsSync(c)){fs_extra_1.default.copySync(c,o),this.copyResourcesToMainBundle(c,e),this.copyUserResourcePathIntoPlugins(n,t,u[n],path_1.default.join(o,"MiniPlugin.bundle"),l);fs_extra_1.default.readdirSync(a).forEach(i=>{if(i.endsWith(".appex")){const s=path_1.default.parse(i).name,o=p[s],r=path_1.default.join(d,i);if(!o||!0!==o.enable)return;l.progress(`${n} 插件使用 appex 中 : ${i}`),fs_extra_1.default.existsSync(r)&&fs_extra_1.default.removeSync(r),fs_extra_1.default.ensureDirSync(r);const c=path_1.default.join(a,i);fs_extra_1.default.copySync(c,r),(null==o?void 0:o.profilePath)&&fs_extra_1.default.copySync(o.profilePath,path_1.default.join(r,"embedded.mobileprovision")),this.copyResourcesToMainBundle(c,e),this.copyUserResourcePathIntoPlugins(n,t,u[n],path_1.default.join(r,"MiniPlugin.bundle"),l)}})}else fs_extra_1.default.copySync(a,o),this.copyResourcesToMainBundle(a,e),this.copyUserResourcePathIntoPlugins(n,t,u[n],path_1.default.join(o,"MiniPlugin.bundle"),l)})}copyUserResourcePathIntoPlugins(e,i,t,n,a){const s=n;if(t){const n=path_1.default.basename(t),o=this.getMaterialFilePath(i,t);if(o){a.progress(`${e}.framework 正在拷贝配置的资源:${t}`);const i=fs_extra_1.default.lstatSync(o);fs_extra_1.default.ensureDirSync(s),i.isDirectory()?fs_extra_1.default.copySync(o,s):i.isFile()&&fs_extra_1.default.copyFileSync(o,path_1.default.join(s,n))}}}copyResourcesToMainBundle(e,i){const t=path_1.default.join(e,"MiniPlugin.bundle"),n=path_1.default.join(t,"PluginConfig.plist");if(fs_extra_1.default.existsSync(n)){const e=plist.readFileSync(n).CopyResourcesToMainBundle;(null==e?void 0:e.length)&&e.forEach(e=>{const n=path_1.default.join(t,e);fs_extra_1.default.existsSync(n)&&fs_extra_1.default.copySync(n,path_1.default.join(i,e))})}}prepareAppexProfileConfig(e,i,t,n,a,s,o,l){if(!n)return void l.message("doing","miniappCacheDirPath is missing");let r=!1;const d={};if(i["mini-plugin"]&&Array.isArray(i["mini-plugin"].ios)){i["mini-plugin"].ios.forEach(e=>{if(e.open&&e.pluginId&&"object"==typeof e.appexProfiles)for(const i in e.appexProfiles){l.message("doing",`检查插件 ${e.pluginId} ${i} appex 配置中 ...`);const n=e.appexProfiles[i];if(!0===n.enable){const s=`${e.pluginId}_${i}`;d[s]={enable:!0};let o=n.profilePath;if(a&&(o=n.distributeProfilePath),n.bundleID&&o){const a=path_1.default.join(t,o);fs_extra_1.default.existsSync(a)?(d[s].bundleID=n.bundleID,d[s].profilePath=path_1.default.join(t,o)):(r=!0,l.message("fail",`${e.pluginId} 中 ${i} 的 profilePath 无法找到对应的文件:${a}(需要在小程序项目路径下,填入相对于项目根目录的路径)`))}else r=!0,l.message("fail",`${e.pluginId}中${i} 是 无效的appexProfiles配置。需要配置 bundleID,profilePath,distributeProfilePath。profile 文件需要放置在小程序项目内,然后配置相对于小程序项目根目录的相对路径。分发证书构建的情况下, 一定需要配置distributeProfilePath。查看文档了解详情。`)}}})}if(e.forEach(e=>{fs_extra_1.default.readdirSync(e.dir).forEach(i=>{if(i.endsWith(".appex")){const t=path_1.default.parse(i).name,n=d[t];if(n&&!0===n.enable)if(n.bundleID&&n.profilePath){if(n.bundleID&&n.profilePath){const t=path_1.default.join(e.dir,i,"info.plist"),a=n.bundleID;this.changeInfoplistBundleId(t,a),this.changeInfoplistBundleVersion(t,s,o),l.message("doing",`${e.pluginId} ${i} ${a} ${t} 处理 appex bundle ID 中`)}}else r=!0,l.message("fail",`${e.pluginId} 的 多端插件包含了${t.slice(e.pluginId.length+1)} 的 appex。开发者需要在project.miniapp.json 中 mini-plugin 配置下对应合理的 profile 文件。查看文档了解详情。`)}})}),r)return!1;if(!(0,lodash_1.isEmpty)(d)){const e=path_1.default.join(n,APPEX_PROFILES_MAPS_FILE);fs_extra_1.default.existsSync(e)&&fs_extra_1.default.removeSync(e),fs_extra_1.default.ensureFileSync(e);const i={};for(const e in d)i[e]={bundleID:d[e].bundleID,profilePath:d[e].profilePath};fs_extra_1.default.writeFileSync(e,JSON.stringify(i));const t=path_1.default.join(n,APPEX_PROFILES_MAPS_FOR_SHELL_FILE);fs_extra_1.default.existsSync(t)&&fs_extra_1.default.removeSync(t),fs_extra_1.default.ensureFileSync(t);const a=Object.keys(d).map(e=>{const i=d[e];return`pluginAppexName:${e};_;_;bundleID:${i.bundleID};_;_;profile:${i.profilePath}\n\n`}).join("");fs_extra_1.default.writeFileSync(t,a)}return d}changeExtendSDKInfoplistBundleId(e,i,t){const n=`${i}.${path_1.default.parse(t).name.replace(/_/g,"")}`;return this.changeInfoplistBundleId(e,n)}changeInfoplistBundleId(e,i){const t=plist.readFileSync(e);return t.CFBundleIdentifier=i,plist.writeFileSync(e,t),t.CFBundleIdentifier}changeInfoplistBundleVersion(e,i,t){const n=plist.readFileSync(e);return n.CFBundleVersion=i,n.CFBundleShortVersionString=t,plist.writeFileSync(e,n),n.CFBundleIdentifier}async getEntitlements(e,i,t,n){const{mobileapp_info:a={}}=e;let s=a.ios_universal_link||a.debug_ios_universal_link;return(s.startsWith("https://")||s.startsWith("http://"))&&(s=s.replace(/^http(s)?:\/\//g,"applinks:")),{"com.apple.developer.associated-domains":s}}useTpush(e){return(0,miniappJson_1.iOSMiniAppJsonIsUsingTpush)(e)}async buildCloud(e,i){const{projectPath:t,demoIpaPath:n,sdkPath:a,arch:s="arm64",bindingInfo:o,certificateInfo:l,output:r,miniappCacheDirPath:d,pluginDirList:p,inLandun:u,theme:c,i18nInfo:f}=e,_=this.generateTempDemoIpaPath(n),{selfCertificate:h={}}=l,g=(null==h?void 0:h.isPublish)||!1,m=(0,miniappJson_1.tryGetIOSMiniappJson)(t),y=this.useTpush(m);if((0,lodash_1.isEmpty)(m))throw new Error("获取project.miniapp.json失败");if(errorIOSSdkVersions.includes(m.sdkVersion))throw new Error("当前 mini-ios.sdkVersion 存在缺陷,请参考更新日志进行修改");let I=o;if(l.signType===miniapp_builder_1.miniappSinTypes.appleId.type){const{mobileapp_info:e={}}=I;I=Object.assign(Object.assign({},I),{mobileapp_info:Object.assign(Object.assign({},e),{bundle_id:miniapp_builder_1.DEFAULT_BUNDLE_ID,debug_ios_bundle_id:miniapp_builder_1.DEFAULT_BUNDLE_ID})})}const S=await this.updateIOSInfoPlistInfo(t,I,_,m,i,f);await this.updateIOSAppConfigPlistInfo(t,I,_,m,a,!1,i,c,f),await this.updateIOSAppexInfoPlistInfo(I,_,m,S,i),await this.updateIOSIcons(t,_,d,m,g,i),await this.updateSplashScreen(t,_,m,i,c,f),await this.updateExtendedSdk(I,_,a,s,m,i),await this.updatePlugin(_,p,t,m,d,g,S,i),await this.updatePrivacyInfo(_,m,i);const x=await this.getEntitlements(I,_,m,i),{mobileapp_info:v={}}=I;let b;b=l.signType===miniapp_builder_1.miniappSinTypes.appleId.type?miniapp_builder_1.DEFAULT_BUNDLE_ID:v.ios_flag&&v.bundle_id||v.debug_ios_bundle_id;const P={bundleId:b,output:r,entitlements:x};if(m.buildCloud&&(m.buildCloud.certificate&&"string"==typeof m.buildCloud.certificate&&(P.certificate=m.buildCloud.certificate),m.buildCloud.profile&&"string"==typeof m.buildCloud.profile&&(P.profile=path_1.default.join(t,m.buildCloud.profile)),y&&m.buildCloud.tpnsProfile&&"string"==typeof m.buildCloud.tpnsProfile&&(P.tpnsProfile=path_1.default.join(t,m.buildCloud.tpnsProfile))),h.isPublish){const e=await(0,codesign_1.codesignAndExport)(t,_,d||"",P,i,y,!0===u);if(!0!==e.success)throw new Error("Build ipa failed:"+(e.errMsg||"codesignAndExport failed"))}return{projectPath:t,demoIpaPath:_,opts:P,iosMiniappJson:m,isPublish:g}}async writeI18NInfoFile(e,i,t){Object.keys(i).forEach(n=>{if("base"===n)return;let a="";Object.keys(t).forEach(e=>{var s,o,l,r;"UISplashScreenImageName"!==e?"UILaunchStoryboardName"!==e?(null===(o=null===(s=i[n])||void 0===s?void 0:s.ios)||void 0===o?void 0:o[t[e]])&&(a+=`${e} = "${null===(r=null===(l=i[n])||void 0===l?void 0:l.ios)||void 0===r?void 0:r[t[e]]}";\n`):a+="__UILaunchStoryboardName__\n":a+="__UISplashScreenImageName__\n"}),a&&(fs_extra_1.default.ensureDirSync(path_1.default.join(e,n+".lproj")),fs_extra_1.default.writeFileSync(path_1.default.join(e,n+".lproj/InfoPlist.strings"),a))})}getMaterialFilePath(e,i){if(!i)return"";let t=i;if(path_1.default.isAbsolute(i)||(t=path_1.default.join(e,i)),fs_extra_1.default.existsSync(t))return t;const n=(0,tools_1.generateMD5)(i),a=path_1.default.basename(i),s=path_1.default.join(e,exports.remoteBuildProjectMaterialAbsoluteCacheDir,`${n}_${a}`);return fs_extra_1.default.existsSync(s)?s:""}}exports.default=new buildCloudManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.IOSUtils=void 0;const tslib_1=require("tslib"),child_process=tslib_1.__importStar(require("child_process")),path_1=tslib_1.__importDefault(require("path")),fs_extra_1=tslib_1.__importDefault(require("fs-extra")),env_1=require("../../../utils/env"),deviceUtils=tslib_1.__importStar(require("./device")),projectConfigUtils=tslib_1.__importStar(require("./projectconfig")),cp_1=require("../../../utils/cp"),miniapp_builder_1=require("../../../utils/miniapp-builder"),miniappJson_1=require("../../../utils/miniappJson"),singletontask_1=require("../../../utils/singletontask"),buildCloud_1=tslib_1.__importStar(require("./buildCloud")),tools_1=require("../../../utils/tools"),codesign_1=require("../../../utils/codesign"),ProjectMiniappJsonSplashScreenThemeKey="__splashscreenTheme",_iconInfoMap={appStore1024:{size:[1024,1024],scale:1,idiom:"ios-marketing",required:!0},mainIcon120:{size:[60,60],scale:2,idiom:"iphone",required:!0},mainIcon180:{size:[60,60],scale:3,idiom:"iphone"},spotlightIcon80:{size:[40,40],scale:2,idiom:"iphone"},spotlightIcon120:{size:[40,40],scale:3,idiom:"iphone"},settingsIcon58:{size:[29,29],scale:2,idiom:"iphone"},settingsIcon87:{size:[29,29],scale:3,idiom:"iphone"},notificationIcon40:{size:[20,20],scale:2,idiom:"iphone"},notificationIcon60:{size:[20,20],scale:3,idiom:"iphone"},ipadMainIcon152:{size:[76,76],scale:2,idiom:"ipad"},ipadMainIcon167:{size:[83.5,83.5],scale:2,idiom:"ipad"},ipadSpotlightIcon40:{size:[40,40],scale:1,idiom:"ipad"},ipadSpotlightIcon80:{size:[40,40],scale:2,idiom:"ipad"},ipadSettingsIcon29:{size:[29,29],scale:1,idiom:"ipad"},ipadSpotlightIcon58:{size:[29,29],scale:2,idiom:"ipad"},ipadNotificationIcon20:{size:[20,20],scale:1,idiom:"ipad"},ipadNotificationIcon40:{size:[20,20],scale:2,idiom:"ipad"}},_allowTheme=["Light","LightSpecial","Dark","DarkSpecial","Default"],_getDepReg=e=>new RegExp(`s.subspec '${e}'.*\n(?:.*\n)*?(?:.*sp.vendored_frameworks = \\[\n)((?:.*'.*?'.*\n)*?)(?:.*\\]\n)`,"m"),buildIOSPluginTask={};class IOSUtils{constructor(e,i={},t,n){this.root=e,this.userConfig=i,this.miniappDirPath=t,this.devtoolsVersion=n}getProjectConfig(){const e=projectConfigUtils.getProjectConfig(this.root,this.userConfig);if(!e)throw new Error("iOS project folder not found. Are you sure this is a miniapp project?");return e}getBundleId(e){return child_process.execFileSync("/usr/libexec/PlistBuddy",["-c","Print:CFBundleIdentifier",path_1.default.join(e,"Info.plist")],{encoding:"utf8",env:(0,env_1.getProcessEnv)()}).trim()}tryInstallPod(e,i){const t=this.getProjectConfig(),{sourceDir:n}=t,o={cwd:n,env:(0,env_1.getProcessEnv)()};i.progress("export LANG=en_US.UTF-8 && pod install"),child_process.execSync("export LANG=en_US.UTF-8 && pod install",o)}async runLocal(e,i){const t=this.getProjectConfig(),{sourceDir:n}=t;process.chdir(n),this.tryInstallPod(e,i);const o=path_1.default.basename(t.name,path_1.default.extname(t.name)),s=e.scheme||o;if(i.progress(`Found Xcode ${t.isWorkspace?"workspace":"project"} "${t.name}"`),e.device||e.udid){if(e.udid||e.device){const n=await deviceUtils.getDevices({recorder:i}),o=n.find(i=>i.udid===e.udid||i.name===e.device);if(!o)throw new Error(`Could not find a device with udid(${e.udid}) or device(${e.device}). ${deviceUtils.printFoundDevices(n)}`);if("simulator"===o.type)return void await this.runOnSimulatorLocal(t,s,e,i);await this.runOnDeviceLocal(t,s,o,i)}}else await this.runOnSimulatorLocal(t,s,e,i)}async runCloud(e,i){try{const{deviceType:t,udid:n,projectPath:o,demoIpaPath:s,sdkPath:a,bindingInfo:r,certificateInfo:c,arch:l="arm64",pluginDirList:d,miniappCacheDirPath:p,theme:u,i18nInfo:h}=e,f=buildCloud_1.default.generateTempDemoIpaPath(s),_="simulator"===t,m=(0,miniappJson_1.tryGetIOSMiniappJson)(o);let g=r;if(c.signType===miniapp_builder_1.miniappSinTypes.appleId.type){const{mobileapp_info:e={}}=g;g=Object.assign(Object.assign({},g),{mobileapp_info:Object.assign(Object.assign({},e),{bundle_id:miniapp_builder_1.DEFAULT_BUNDLE_ID,debug_ios_bundle_id:miniapp_builder_1.DEFAULT_BUNDLE_ID})})}const b=await buildCloud_1.default.updateIOSInfoPlistInfo(o,g,f,m,i,h);await buildCloud_1.default.updateIOSAppConfigPlistInfo(o,g,f,m,a,_,i,u,h),await buildCloud_1.default.updateIOSAppexInfoPlistInfo(g,f,m,b,i),await buildCloud_1.default.updateIOSIcons(o,f,"",m,!1,i),await buildCloud_1.default.updateSplashScreen(o,f,m,i,u),await buildCloud_1.default.updateExtendedSdk(g,f,a,l,m,i),await buildCloud_1.default.updatePlugin(f,d,o,m,p,!1,b,i);const v=await buildCloud_1.default.getEntitlements(g,f,m,i);if("device"===t){const{mobileapp_info:e={}}=g,t=e.ios_flag&&e.bundle_id||e.debug_ios_bundle_id;await(0,miniapp_builder_1.signAndInstallOrExport)(o,f,p,c,{bundleId:t,install:!0,deviceId:n,entitlements:v},{recorder:i,miniappDirPath:this.miniappDirPath,devtoolsVersion:this.devtoolsVersion})}else await this.runOnSimulatorCloud(f,{udid:n},i)}catch(e){throw new Error("Run the app failed:"+e.message)}}async buildLocal(e,i){const t=this.getProjectConfig();process.chdir(t.sourceDir);const n=path_1.default.basename(t.name,path_1.default.extname(t.name)),o=e.scheme||n;this.tryInstallPod(e,i),i.progress("start build ipa...");const s=await this.buildProjectArchive(t,{output:e.output,scheme:o},i),a=await this.exportArchive(t,s,e,i);return console.log("Successfully build ipa: "+a),a}async buildCloud(e,i){try{const{projectPath:t,certificateInfo:n,miniappCacheDirPath:o}=e,s=await buildCloud_1.default.buildCloud(e,i),{demoIpaPath:a,opts:r}=s,c={recorder:i,miniappDirPath:this.miniappDirPath,devtoolsVersion:this.devtoolsVersion};s.isPublish||await(0,miniapp_builder_1.signAndInstallOrExport)(t,a,o,n,r,c)}catch(e){throw new Error("Build ipa failed:"+e.message)}}async genProjectMaterialMap(e,i,t,n){var o,s;const a=buildCloud_1.remoteBuildProjectMaterialAbsoluteCacheDir,r=path_1.default.join(i,a),c=(0,miniappJson_1.tryGetIOSMiniappJson)(e);function l(e,i){fs_extra_1.default.ensureDirSync(path_1.default.dirname(i)),fs_extra_1.default.copyFileSync(e,i)}function d(t,n,o=!0){if(!n){if(o)return"";throw new Error(`file cant be empty for cloud build, key: ${t} , fileName: ${n}`)}if(path_1.default.isAbsolute(n)){const e=path_1.default.basename(n);if(!fs_extra_1.default.existsSync(n)){if(o)return"";throw new Error(`file cant be empty for cloud build, key: ${t} , fileName: ${n}`)}const i=(0,tools_1.generateMD5)(n);return l(n,path_1.default.join(r,`${i}_${e}`)),path_1.default.join(a,e)}const s=path_1.default.join(e,n),c=path_1.default.join(i,n);if(!fs_extra_1.default.existsSync(s)){if(o)return"";throw new Error(`file cant be empty for cloud build, key: ${t} , fileName: ${n}`)}return l(s,c),n}fs_extra_1.default.ensureDirSync(r);const{privacy:p={},icons:u={},splashscreen:h={},buildCloud:f={}}=c,_=d("project.miniapp.json","project.miniapp.json",!1),m=d("project.config.json","project.config.json",!1),g=(0,miniappJson_1.getMiniprogramRoot)(e),b=d("app.json",path_1.default.join(g,"app.json"),!1),{template:v,contentViewImage:y,cancelButtonImage:S,confirmButtonImage:w}=p,P=d("privacy template",v),I=d("privacy contentViewImage",y),x=d("privacy cancelButtonImage",S),j=d("privacy confirmButtonImage",w),E=[];for(const e in u)if(u[e]){const i=d("icons."+e,u[e],!1);i&&E.push(i)}const O=d("splashscreen.customImage",h.customImage),{p12:D,profile:C,tpnsProfile:A}=f,$=d("p12 Path",D,!1),T=d("profile Path",C,!1);let k=void 0;!0===(null===(o=null==c?void 0:c.tpush)||void 0===o?void 0:o.useExtendedLib_WeAppTPNS)&&(k=d("tpns profile Path",A,!0!==(null===(s=null==c?void 0:c.tpush)||void 0===s?void 0:s.useExtendedLib_WeAppTPNS)));const B="miniapp/ios/i18nInfo.json",U=path_1.default.join(e,B),F=d("i18n",B,!0);if(fs_extra_1.default.existsSync(U)){const i=function(e,i){function t(i,t,n){if(t[n]&&"object"==typeof t[n][i])for(const o in t[n][i])if("object"==typeof t[n][i]){const s=t[n][i][o];if("string"==typeof s&&s.length>0){fs_extra_1.default.existsSync(path_1.default.isAbsolute(s)?s:path_1.default.join(e,s))&&d(`i18nFiles.${n}.${o}`,s,!0)}}}try{const n=fs_extra_1.default.readJSONSync(path_1.default.join(e,i));for(const e in n)t("ios",n,e),t("android",n,e)}catch(e){return e.message}}(e,B);if(i)throw n.message("fail",i),new Error("copyi18NFiles error "+i)}const L=path_1.default.join(i,"project.miniapp.json");try{const e=fs_extra_1.default.readJsonSync(L);let{theme:i}=t;t.theme||(i="Dark"),e.__splashscreenTheme=i,fs_extra_1.default.writeJSONSync(L,e)}catch(e){throw new Error(`ReadWriteJsonFailed projectMiniappJsonCacheFilePath: ${L},error ${e.message}`)}const M=c["mini-plugin"];return M&&Array.isArray(M.ios)&&M.ios.forEach(e=>{!0===e.open&&e.resourcePath&&d(`mini-plugin ios ${e.pluginId}:${e.resourcePath}`,e.resourcePath)}),{projectMiniappJson:_,projectConfigJson:m,appJson:b,privacyJson:P,privacyContentViewImage:I,privacyCancelButtonImage:x,privacyConfirmButtonImage:j,icons:E,splashScreen:O,p12:$,profile:T,tpnsProfile:k,i18nJson:F}}async codesignIOSApp(e,i){const{projectPath:t,demoIpaPath:n,opts:o}=e,s=await(0,codesign_1.codesignAndExport)(t,n,e.miniappCacheDir||"",o,i,e.isUsingTpush,!1,!0);if(!0!==s.success)throw new Error("Build ipa failed:"+(s.errMsg||"codesignAndExport failed"))}async packIOSCloudBuildMaterial(e,i){i.progress("start uploadProjectAllMaterial");const{projectPath:t,matrialDistPath:n,theme:o}=e;await this.genProjectMaterialMap(t,n,e,i);i.progress("packIOSCloudBuildMaterial done")}launchSimulator(e,i){let t;try{t=JSON.parse(child_process.execFileSync("xcrun",["simctl","list","--json","devices"],{encoding:"utf8",env:(0,env_1.getProcessEnv)()}))}catch(e){throw new Error("Could not get the simulator list from Xcode. Please open Xcode and try running project directly from there to resolve the remaining issues."+e.message)}const n=["iPhone 13","iPhone 12","iPhone 11"].reduce((e,i)=>e||deviceUtils.findMatchingSimulator(t,{device:i}),deviceUtils.findMatchingSimulator(t,e));if(!n)throw new Error("No simulator available with "+(e.device?`name "${e.device}"`:`udid "${e.udid}"`));const o=child_process.execFileSync("xcode-select",["-p"],{encoding:"utf8",env:(0,env_1.getProcessEnv)()}).trim();if(child_process.execFileSync("open",[o+"/Applications/Simulator.app","--args","-CurrentDeviceUDID",n.udid],{env:(0,env_1.getProcessEnv)()}),!n.booted){const e=deviceUtils.formattedDeviceName(n);i.progress("Launching "+e),child_process.spawnSync("xcrun",["simctl","boot",n.udid],{env:(0,env_1.getProcessEnv)()})}return n}async runOnSimulatorCloud(e,i,t){const{udid:n}=i,o=this.launchSimulator({udid:n},t);await this.installAppOnSimulator(o,e,t),await this.launchAppOnSimulator(o,e,t)}async runOnSimulatorLocal(e,i,t,n){const o=this.launchSimulator(t,n),{appPath:s}=await this.buildProjectApp(e,{udid:o.udid,scheme:i},n);await this.installAppOnSimulator(o,s,n),await this.launchAppOnSimulator(o,s,n)}async runOnDeviceLocal(e,i,t,n){const{appPath:o}=await this.buildProjectApp(e,{udid:t.udid,scheme:i},n);if("catalyst"===t.type){child_process.spawn(`${o}/${i}`,[],{detached:!0,stdio:"ignore",env:(0,env_1.getProcessEnv)()}).unref()}else{const e=["--bundle",o,"--id",t.udid,"--justlaunch"];n.progress("Installing and launching your app on "+t.name);const i=path_1.default.join(__dirname,"../../../vendor/ios-deploy/ios-deploy");await(0,cp_1.spawnSync)(i,e,{},n)}return n.progress("Install successfully the app to the device.")}buildProjectApp(e,i,t){return new Promise((n,o)=>{const{scheme:s,udid:a}=i,r=[e.isWorkspace?"-workspace":"-project",e.name,"-scheme",s];let c;a&&r.push("-destination","id="+a),t.progress(`Building (using "xcodebuild ${r.join(" ")}")`),this.xcbeautifyAvailable()?c=child_process.spawn("xcbeautify",[],{stdio:["pipe",process.stdout,process.stderr],env:(0,env_1.getProcessEnv)()}):this.xcprettyAvailable()&&(c=child_process.spawn("xcpretty",[],{stdio:["pipe",process.stdout,process.stderr],env:(0,env_1.getProcessEnv)()}));const l=child_process.spawn("xcodebuild",r,{env:(0,env_1.getProcessEnv)()});let d="",p="";l.stdout.on("data",e=>{const i=e.toString();t.progress(i),d+=i,c&&c.stdin.write(e)}),l.stderr.on("data",e=>{const i=e.toString();p+=i,t.progress(i)}),l.on("close",i=>{if(c&&c.stdin.end(),0!==i)return void o(new Error(` Failed to build iOS project.\n We ran "xcodebuild" command but it exited with error code ${i}. To debug build\n logs further, consider building your app with Xcode.app, by opening\n ${e.name}.\n ${c?void 0:`${d}\n${p}`}\n `));let a;try{a=this.getBuildInfo(e,d,s)}catch(e){o(e)}t.progress("Successfully built the app"),n(a)})})}async installAppOnSimulator(e,i,t){const n=["simctl","install",e.udid,i];await(0,cp_1.spawnSync)("xcrun",n,{},t)}async launchAppOnSimulator(e,i,t){const n=this.getBundleId(i),o=["simctl","launch",e.udid,n];await(0,cp_1.spawnSync)("xcrun",o,{},t),t.progress("Successfully launched the app on the simulator")}async buildProjectArchive(e,i,t){const{output:n,scheme:o,udid:s}=i,a=path_1.default.join(n,"./app"),{sourceDir:r}=e;fs_extra_1.default.ensureDirSync(path_1.default.dirname(a));const c=["archive",e.isWorkspace?"-workspace":"-project",e.name,"-scheme",o,"-archivePath",a];s&&c.push("-destination","id="+s);try{if(await(0,cp_1.spawnSync)("xcodebuild",c,{cwd:r},t),!fs_extra_1.default.existsSync(a+".xcarchive"))throw new Error(`Failed to build iOS project.\n ${a+".xcarchive"} does not found\n `);return t.progress(`Successfully archive the app: ${a}.xcarchive`),a+".xcarchive"}catch(i){throw new Error(`Failed to build iOS project. To debug build\n logs further, consider building your app with Xcode.app, by opening\n ${e.name}.\n `)}}async exportArchive(e,i,t,n){const o=path_1.default.join(t.output,"ipa");fs_extra_1.default.ensureDirSync(o),fs_extra_1.default.emptyDirSync(o);const{exportOptionPlistPath:s}=t;if(!s)throw new Error("build ios ipa require exportOptionPlistPath in project.miniapp.json");let a="";a=path_1.default.isAbsolute(s)?s:path_1.default.join(t.projectPath,s);const r=["-exportArchive","-archivePath",i,"-exportOptionsPlist",a,"-exportPath",o];try{await(0,cp_1.spawnSync)("xcodebuild",r,{cwd:e.sourceDir},n)}catch(i){throw new Error(`To debug build\n logs further, consider building your app with Xcode.app, by opening\n ${e.name}.\n `)}return fs_extra_1.default.removeSync(i),o}getTargetPaths(e){const i=JSON.parse(e);for(const e in i){if("app"===i[e].buildSettings.WRAPPER_EXTENSION)return{targetBuildDir:i[e].buildSettings.TARGET_BUILD_DIR,executableFolderPath:i[e].buildSettings.EXECUTABLE_FOLDER_PATH}}return{}}getBuildInfo(e,i,t){const n=this.getPlatformName(i),o=[e.isWorkspace?"-workspace":"-project",e.name,"-scheme",t,"-sdk",n,"-showBuildSettings","-json"].join(" "),s=child_process.execSync("xcodebuild "+o,{encoding:"utf8",cwd:e.sourceDir,env:(0,env_1.getProcessEnv)()}),a=this.getBuildProductDir(i),{executableFolderPath:r}=this.getTargetPaths(s);if(!r)throw new Error("Failed to get the app name.");return{sdk:n,appPath:`${a}/${r}`}}getPlatformName(e){const i=/export PLATFORM_NAME\\?="?(\w+)"?$/m.exec(e);if(!i)throw new Error("Couldn't find PLATFORM_NAME in xcodebuild output.");return i[1]}getBuildProductDir(e){const i=/export BUILT_PRODUCTS_DIR\\?="?(.+)"?$/m.exec(e);if(!i)throw new Error("Couldn't find BUILT_PRODUCTS_DIR in xcodebuild output.");return i[1]}xcbeautifyAvailable(){try{child_process.execSync("xcbeautify --version",{stdio:[0,"pipe","ignore"],env:(0,env_1.getProcessEnv)()})}catch(e){return!1}return!0}xcprettyAvailable(){try{child_process.execSync("xcpretty --version",{stdio:[0,"pipe","ignore"],env:(0,env_1.getProcessEnv)()})}catch(e){return!1}return!0}async buildPlugin(e,i){const{pluginId:t,projectPath:n,buildShellPath:o}=e;i.progress("start build native plugin...");try{const e=[n,t];fs_extra_1.default.chmodSync(o,"777"),buildIOSPluginTask[t]?(i.message("fail","存在未结束的插件构建任务,需等待构建结束..."),await buildIOSPluginTask[t].getResult(!0)):(buildIOSPluginTask[t]=new singletontask_1.SingletonTask(cp_1.spawnSyncExecShell.bind(null,o,e,{},i)),await buildIOSPluginTask[t].getResult(!0),buildIOSPluginTask[t]=void 0)}catch(e){throw buildIOSPluginTask[t]=void 0,new Error("build plugin failed: "+e)}}async writeI18NInfoFile(e,i,t){Object.keys(i).forEach(n=>{if("base"===n)return;let o="";Object.keys(t).forEach(e=>{var s,a,r,c;(null===(a=null===(s=i[n])||void 0===s?void 0:s.ios)||void 0===a?void 0:a[t[e]])&&(o+=`${e} = "${null===(c=null===(r=i[n])||void 0===r?void 0:r.ios)||void 0===c?void 0:c[t[e]]}";\n`)}),o&&(fs_extra_1.default.ensureDirSync(path_1.default.join(e,n+".lproj")),fs_extra_1.default.writeFileSync(path_1.default.join(e,n+".lproj/InfoPlist.strings"),o))})}}exports.IOSUtils=IOSUtils;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.IOSUtils=void 0;const tslib_1=require("tslib"),child_process=tslib_1.__importStar(require("child_process")),path_1=tslib_1.__importDefault(require("path")),fs_extra_1=tslib_1.__importDefault(require("fs-extra")),env_1=require("../../../utils/env"),deviceUtils=tslib_1.__importStar(require("./device")),projectConfigUtils=tslib_1.__importStar(require("./projectconfig")),cp_1=require("../../../utils/cp"),miniapp_builder_1=require("../../../utils/miniapp-builder"),miniappJson_1=require("../../../utils/miniappJson"),singletontask_1=require("../../../utils/singletontask"),buildCloud_1=tslib_1.__importStar(require("./buildCloud")),tools_1=require("../../../utils/tools"),codesign_1=require("../../../utils/codesign"),ProjectMiniappJsonSplashScreenThemeKey="__splashscreenTheme",_iconInfoMap={appStore1024:{size:[1024,1024],scale:1,idiom:"ios-marketing",required:!0},mainIcon120:{size:[60,60],scale:2,idiom:"iphone",required:!0},mainIcon180:{size:[60,60],scale:3,idiom:"iphone"},spotlightIcon80:{size:[40,40],scale:2,idiom:"iphone"},spotlightIcon120:{size:[40,40],scale:3,idiom:"iphone"},settingsIcon58:{size:[29,29],scale:2,idiom:"iphone"},settingsIcon87:{size:[29,29],scale:3,idiom:"iphone"},notificationIcon40:{size:[20,20],scale:2,idiom:"iphone"},notificationIcon60:{size:[20,20],scale:3,idiom:"iphone"},ipadMainIcon152:{size:[76,76],scale:2,idiom:"ipad"},ipadMainIcon167:{size:[83.5,83.5],scale:2,idiom:"ipad"},ipadSpotlightIcon40:{size:[40,40],scale:1,idiom:"ipad"},ipadSpotlightIcon80:{size:[40,40],scale:2,idiom:"ipad"},ipadSettingsIcon29:{size:[29,29],scale:1,idiom:"ipad"},ipadSpotlightIcon58:{size:[29,29],scale:2,idiom:"ipad"},ipadNotificationIcon20:{size:[20,20],scale:1,idiom:"ipad"},ipadNotificationIcon40:{size:[20,20],scale:2,idiom:"ipad"}},_allowTheme=["Light","LightSpecial","Dark","DarkSpecial","Default"],_getDepReg=e=>new RegExp(`s.subspec '${e}'.*\n(?:.*\n)*?(?:.*sp.vendored_frameworks = \\[\n)((?:.*'.*?'.*\n)*?)(?:.*\\]\n)`,"m"),buildIOSPluginTask={};class IOSUtils{constructor(e,i={},t,n){this.root=e,this.userConfig=i,this.miniappDirPath=t,this.devtoolsVersion=n}getProjectConfig(){const e=projectConfigUtils.getProjectConfig(this.root,this.userConfig);if(!e)throw new Error("iOS project folder not found. Are you sure this is a miniapp project?");return e}getBundleId(e){return child_process.execFileSync("/usr/libexec/PlistBuddy",["-c","Print:CFBundleIdentifier",path_1.default.join(e,"Info.plist")],{encoding:"utf8",env:(0,env_1.getProcessEnv)()}).trim()}tryInstallPod(e,i){const t=this.getProjectConfig(),{sourceDir:n}=t,o={cwd:n,env:(0,env_1.getProcessEnv)()};i.progress("export LANG=en_US.UTF-8 && pod install"),child_process.execSync("export LANG=en_US.UTF-8 && pod install",o)}async runLocal(e,i){const t=this.getProjectConfig(),{sourceDir:n}=t;process.chdir(n),this.tryInstallPod(e,i);const o=path_1.default.basename(t.name,path_1.default.extname(t.name)),s=e.scheme||o;if(i.progress(`Found Xcode ${t.isWorkspace?"workspace":"project"} "${t.name}"`),e.device||e.udid){if(e.udid||e.device){const n=await deviceUtils.getDevices({recorder:i}),o=n.find(i=>i.udid===e.udid||i.name===e.device);if(!o)throw new Error(`Could not find a device with udid(${e.udid}) or device(${e.device}). ${deviceUtils.printFoundDevices(n)}`);if("simulator"===o.type)return void await this.runOnSimulatorLocal(t,s,e,i);await this.runOnDeviceLocal(t,s,o,i)}}else await this.runOnSimulatorLocal(t,s,e,i)}async runCloud(e,i){try{const{deviceType:t,udid:n,projectPath:o,demoIpaPath:s,sdkPath:a,bindingInfo:r,certificateInfo:c,arch:l="arm64",pluginDirList:d,miniappCacheDirPath:p,theme:u,i18nInfo:h}=e,f=buildCloud_1.default.generateTempDemoIpaPath(s),_="simulator"===t,m=(0,miniappJson_1.tryGetIOSMiniappJson)(o);let g=r;if(c.signType===miniapp_builder_1.miniappSinTypes.appleId.type){const{mobileapp_info:e={}}=g;g=Object.assign(Object.assign({},g),{mobileapp_info:Object.assign(Object.assign({},e),{bundle_id:miniapp_builder_1.DEFAULT_BUNDLE_ID,debug_ios_bundle_id:miniapp_builder_1.DEFAULT_BUNDLE_ID})})}const b=await buildCloud_1.default.updateIOSInfoPlistInfo(o,g,f,m,i,h);await buildCloud_1.default.updateIOSAppConfigPlistInfo(o,g,f,m,a,_,i,u,h),await buildCloud_1.default.updateIOSAppexInfoPlistInfo(g,f,m,b,i),await buildCloud_1.default.updateIOSIcons(o,f,"",m,!1,i),await buildCloud_1.default.updateSplashScreen(o,f,m,i,u,h),await buildCloud_1.default.updateExtendedSdk(g,f,a,l,m,i),await buildCloud_1.default.updatePlugin(f,d,o,m,p,!1,b,i);const v=await buildCloud_1.default.getEntitlements(g,f,m,i);if("device"===t){const{mobileapp_info:e={}}=g,t=e.ios_flag&&e.bundle_id||e.debug_ios_bundle_id;await(0,miniapp_builder_1.signAndInstallOrExport)(o,f,p,c,{bundleId:t,install:!0,deviceId:n,entitlements:v},{recorder:i,miniappDirPath:this.miniappDirPath,devtoolsVersion:this.devtoolsVersion})}else await this.runOnSimulatorCloud(f,{udid:n},i)}catch(e){throw new Error("Run the app failed:"+e.message)}}async buildLocal(e,i){const t=this.getProjectConfig();process.chdir(t.sourceDir);const n=path_1.default.basename(t.name,path_1.default.extname(t.name)),o=e.scheme||n;this.tryInstallPod(e,i),i.progress("start build ipa...");const s=await this.buildProjectArchive(t,{output:e.output,scheme:o},i),a=await this.exportArchive(t,s,e,i);return console.log("Successfully build ipa: "+a),a}async buildCloud(e,i){try{const{projectPath:t,certificateInfo:n,miniappCacheDirPath:o}=e,s=await buildCloud_1.default.buildCloud(e,i),{demoIpaPath:a,opts:r}=s,c={recorder:i,miniappDirPath:this.miniappDirPath,devtoolsVersion:this.devtoolsVersion};s.isPublish||await(0,miniapp_builder_1.signAndInstallOrExport)(t,a,o,n,r,c)}catch(e){throw new Error("Build ipa failed:"+e.message)}}async genProjectMaterialMap(e,i,t,n){var o,s;const a=buildCloud_1.remoteBuildProjectMaterialAbsoluteCacheDir,r=path_1.default.join(i,a),c=(0,miniappJson_1.tryGetIOSMiniappJson)(e);function l(e,i){fs_extra_1.default.ensureDirSync(path_1.default.dirname(i)),fs_extra_1.default.copyFileSync(e,i)}function d(t,n,o=!0){if(!n){if(o)return"";throw new Error(`file cant be empty for cloud build, key: ${t} , fileName: ${n}`)}if(path_1.default.isAbsolute(n)){const e=path_1.default.basename(n);if(!fs_extra_1.default.existsSync(n)){if(o)return"";throw new Error(`file cant be empty for cloud build, key: ${t} , fileName: ${n}`)}const i=(0,tools_1.generateMD5)(n);return l(n,path_1.default.join(r,`${i}_${e}`)),path_1.default.join(a,e)}const s=path_1.default.join(e,n),c=path_1.default.join(i,n);if(!fs_extra_1.default.existsSync(s)){if(o)return"";throw new Error(`file cant be empty for cloud build, key: ${t} , fileName: ${n}`)}return l(s,c),n}fs_extra_1.default.ensureDirSync(r);const{privacy:p={},icons:u={},splashscreen:h={},buildCloud:f={}}=c,_=d("project.miniapp.json","project.miniapp.json",!1),m=d("project.config.json","project.config.json",!1),g=(0,miniappJson_1.getMiniprogramRoot)(e),b=d("app.json",path_1.default.join(g,"app.json"),!1),{template:v,contentViewImage:y,cancelButtonImage:S,confirmButtonImage:w}=p,P=d("privacy template",v),I=d("privacy contentViewImage",y),x=d("privacy cancelButtonImage",S),j=d("privacy confirmButtonImage",w),E=[];for(const e in u)if(u[e]){const i=d("icons."+e,u[e],!1);i&&E.push(i)}const O=d("splashscreen.customImage",h.customImage),{p12:D,profile:C,tpnsProfile:A}=f,$=d("p12 Path",D,!1),T=d("profile Path",C,!1);let k=void 0;!0===(null===(o=null==c?void 0:c.tpush)||void 0===o?void 0:o.useExtendedLib_WeAppTPNS)&&(k=d("tpns profile Path",A,!0!==(null===(s=null==c?void 0:c.tpush)||void 0===s?void 0:s.useExtendedLib_WeAppTPNS)));const B="miniapp/ios/i18nInfo.json",U=path_1.default.join(e,B),F=d("i18n",B,!0);if(fs_extra_1.default.existsSync(U)){const i=function(e,i){function t(i,t,n){if(t[n]&&"object"==typeof t[n][i])for(const o in t[n][i])if("object"==typeof t[n][i]){const s=t[n][i][o];if("string"==typeof s&&s.length>0){fs_extra_1.default.existsSync(path_1.default.isAbsolute(s)?s:path_1.default.join(e,s))&&d(`i18nFiles.${n}.${o}`,s,!0)}}}try{const n=fs_extra_1.default.readJSONSync(path_1.default.join(e,i));for(const e in n)t("ios",n,e),t("android",n,e)}catch(e){return e.message}}(e,B);if(i)throw n.message("fail",i),new Error("copyi18NFiles error "+i)}const L=path_1.default.join(i,"project.miniapp.json");try{const e=fs_extra_1.default.readJsonSync(L);let{theme:i}=t;t.theme||(i="Dark"),e.__splashscreenTheme=i,fs_extra_1.default.writeJSONSync(L,e)}catch(e){throw new Error(`ReadWriteJsonFailed projectMiniappJsonCacheFilePath: ${L},error ${e.message}`)}const M=c["mini-plugin"];return M&&Array.isArray(M.ios)&&M.ios.forEach(e=>{!0===e.open&&e.resourcePath&&d(`mini-plugin ios ${e.pluginId}:${e.resourcePath}`,e.resourcePath)}),{projectMiniappJson:_,projectConfigJson:m,appJson:b,privacyJson:P,privacyContentViewImage:I,privacyCancelButtonImage:x,privacyConfirmButtonImage:j,icons:E,splashScreen:O,p12:$,profile:T,tpnsProfile:k,i18nJson:F}}async codesignIOSApp(e,i){const{projectPath:t,demoIpaPath:n,opts:o}=e,s=await(0,codesign_1.codesignAndExport)(t,n,e.miniappCacheDir||"",o,i,e.isUsingTpush,!1,!0);if(!0!==s.success)throw new Error("Build ipa failed:"+(s.errMsg||"codesignAndExport failed"))}async packIOSCloudBuildMaterial(e,i){i.progress("start uploadProjectAllMaterial");const{projectPath:t,matrialDistPath:n,theme:o}=e;await this.genProjectMaterialMap(t,n,e,i);i.progress("packIOSCloudBuildMaterial done")}launchSimulator(e,i){let t;try{t=JSON.parse(child_process.execFileSync("xcrun",["simctl","list","--json","devices"],{encoding:"utf8",env:(0,env_1.getProcessEnv)()}))}catch(e){throw new Error("Could not get the simulator list from Xcode. Please open Xcode and try running project directly from there to resolve the remaining issues."+e.message)}const n=["iPhone 13","iPhone 12","iPhone 11"].reduce((e,i)=>e||deviceUtils.findMatchingSimulator(t,{device:i}),deviceUtils.findMatchingSimulator(t,e));if(!n)throw new Error("No simulator available with "+(e.device?`name "${e.device}"`:`udid "${e.udid}"`));const o=child_process.execFileSync("xcode-select",["-p"],{encoding:"utf8",env:(0,env_1.getProcessEnv)()}).trim();if(child_process.execFileSync("open",[o+"/Applications/Simulator.app","--args","-CurrentDeviceUDID",n.udid],{env:(0,env_1.getProcessEnv)()}),!n.booted){const e=deviceUtils.formattedDeviceName(n);i.progress("Launching "+e),child_process.spawnSync("xcrun",["simctl","boot",n.udid],{env:(0,env_1.getProcessEnv)()})}return n}async runOnSimulatorCloud(e,i,t){const{udid:n}=i,o=this.launchSimulator({udid:n},t);await this.installAppOnSimulator(o,e,t),await this.launchAppOnSimulator(o,e,t)}async runOnSimulatorLocal(e,i,t,n){const o=this.launchSimulator(t,n),{appPath:s}=await this.buildProjectApp(e,{udid:o.udid,scheme:i},n);await this.installAppOnSimulator(o,s,n),await this.launchAppOnSimulator(o,s,n)}async runOnDeviceLocal(e,i,t,n){const{appPath:o}=await this.buildProjectApp(e,{udid:t.udid,scheme:i},n);if("catalyst"===t.type){child_process.spawn(`${o}/${i}`,[],{detached:!0,stdio:"ignore",env:(0,env_1.getProcessEnv)()}).unref()}else{const e=["--bundle",o,"--id",t.udid,"--justlaunch"];n.progress("Installing and launching your app on "+t.name);const i=path_1.default.join(__dirname,"../../../vendor/ios-deploy/ios-deploy");await(0,cp_1.spawnSync)(i,e,{},n)}return n.progress("Install successfully the app to the device.")}buildProjectApp(e,i,t){return new Promise((n,o)=>{const{scheme:s,udid:a}=i,r=[e.isWorkspace?"-workspace":"-project",e.name,"-scheme",s];let c;a&&r.push("-destination","id="+a),t.progress(`Building (using "xcodebuild ${r.join(" ")}")`),this.xcbeautifyAvailable()?c=child_process.spawn("xcbeautify",[],{stdio:["pipe",process.stdout,process.stderr],env:(0,env_1.getProcessEnv)()}):this.xcprettyAvailable()&&(c=child_process.spawn("xcpretty",[],{stdio:["pipe",process.stdout,process.stderr],env:(0,env_1.getProcessEnv)()}));const l=child_process.spawn("xcodebuild",r,{env:(0,env_1.getProcessEnv)()});let d="",p="";l.stdout.on("data",e=>{const i=e.toString();t.progress(i),d+=i,c&&c.stdin.write(e)}),l.stderr.on("data",e=>{const i=e.toString();p+=i,t.progress(i)}),l.on("close",i=>{if(c&&c.stdin.end(),0!==i)return void o(new Error(` Failed to build iOS project.\n We ran "xcodebuild" command but it exited with error code ${i}. To debug build\n logs further, consider building your app with Xcode.app, by opening\n ${e.name}.\n ${c?void 0:`${d}\n${p}`}\n `));let a;try{a=this.getBuildInfo(e,d,s)}catch(e){o(e)}t.progress("Successfully built the app"),n(a)})})}async installAppOnSimulator(e,i,t){const n=["simctl","install",e.udid,i];await(0,cp_1.spawnSync)("xcrun",n,{},t)}async launchAppOnSimulator(e,i,t){const n=this.getBundleId(i),o=["simctl","launch",e.udid,n];await(0,cp_1.spawnSync)("xcrun",o,{},t),t.progress("Successfully launched the app on the simulator")}async buildProjectArchive(e,i,t){const{output:n,scheme:o,udid:s}=i,a=path_1.default.join(n,"./app"),{sourceDir:r}=e;fs_extra_1.default.ensureDirSync(path_1.default.dirname(a));const c=["archive",e.isWorkspace?"-workspace":"-project",e.name,"-scheme",o,"-archivePath",a];s&&c.push("-destination","id="+s);try{if(await(0,cp_1.spawnSync)("xcodebuild",c,{cwd:r},t),!fs_extra_1.default.existsSync(a+".xcarchive"))throw new Error(`Failed to build iOS project.\n ${a+".xcarchive"} does not found\n `);return t.progress(`Successfully archive the app: ${a}.xcarchive`),a+".xcarchive"}catch(i){throw new Error(`Failed to build iOS project. To debug build\n logs further, consider building your app with Xcode.app, by opening\n ${e.name}.\n `)}}async exportArchive(e,i,t,n){const o=path_1.default.join(t.output,"ipa");fs_extra_1.default.ensureDirSync(o),fs_extra_1.default.emptyDirSync(o);const{exportOptionPlistPath:s}=t;if(!s)throw new Error("build ios ipa require exportOptionPlistPath in project.miniapp.json");let a="";a=path_1.default.isAbsolute(s)?s:path_1.default.join(t.projectPath,s);const r=["-exportArchive","-archivePath",i,"-exportOptionsPlist",a,"-exportPath",o];try{await(0,cp_1.spawnSync)("xcodebuild",r,{cwd:e.sourceDir},n)}catch(i){throw new Error(`To debug build\n logs further, consider building your app with Xcode.app, by opening\n ${e.name}.\n `)}return fs_extra_1.default.removeSync(i),o}getTargetPaths(e){const i=JSON.parse(e);for(const e in i){if("app"===i[e].buildSettings.WRAPPER_EXTENSION)return{targetBuildDir:i[e].buildSettings.TARGET_BUILD_DIR,executableFolderPath:i[e].buildSettings.EXECUTABLE_FOLDER_PATH}}return{}}getBuildInfo(e,i,t){const n=this.getPlatformName(i),o=[e.isWorkspace?"-workspace":"-project",e.name,"-scheme",t,"-sdk",n,"-showBuildSettings","-json"].join(" "),s=child_process.execSync("xcodebuild "+o,{encoding:"utf8",cwd:e.sourceDir,env:(0,env_1.getProcessEnv)()}),a=this.getBuildProductDir(i),{executableFolderPath:r}=this.getTargetPaths(s);if(!r)throw new Error("Failed to get the app name.");return{sdk:n,appPath:`${a}/${r}`}}getPlatformName(e){const i=/export PLATFORM_NAME\\?="?(\w+)"?$/m.exec(e);if(!i)throw new Error("Couldn't find PLATFORM_NAME in xcodebuild output.");return i[1]}getBuildProductDir(e){const i=/export BUILT_PRODUCTS_DIR\\?="?(.+)"?$/m.exec(e);if(!i)throw new Error("Couldn't find BUILT_PRODUCTS_DIR in xcodebuild output.");return i[1]}xcbeautifyAvailable(){try{child_process.execSync("xcbeautify --version",{stdio:[0,"pipe","ignore"],env:(0,env_1.getProcessEnv)()})}catch(e){return!1}return!0}xcprettyAvailable(){try{child_process.execSync("xcpretty --version",{stdio:[0,"pipe","ignore"],env:(0,env_1.getProcessEnv)()})}catch(e){return!1}return!0}async buildPlugin(e,i){const{pluginId:t,projectPath:n,buildShellPath:o}=e;i.progress("start build native plugin...");try{const e=[n,t];fs_extra_1.default.chmodSync(o,"777"),buildIOSPluginTask[t]?(i.message("fail","存在未结束的插件构建任务,需等待构建结束..."),await buildIOSPluginTask[t].getResult(!0)):(buildIOSPluginTask[t]=new singletontask_1.SingletonTask(cp_1.spawnSyncExecShell.bind(null,o,e,{},i)),await buildIOSPluginTask[t].getResult(!0),buildIOSPluginTask[t]=void 0)}catch(e){throw buildIOSPluginTask[t]=void 0,new Error("build plugin failed: "+e)}}async writeI18NInfoFile(e,i,t){Object.keys(i).forEach(n=>{if("base"===n)return;let o="";Object.keys(t).forEach(e=>{var s,a,r,c;(null===(a=null===(s=i[n])||void 0===s?void 0:s.ios)||void 0===a?void 0:a[t[e]])&&(o+=`${e} = "${null===(c=null===(r=i[n])||void 0===r?void 0:r.ios)||void 0===c?void 0:c[t[e]]}";\n`)}),o&&(fs_extra_1.default.ensureDirSync(path_1.default.join(e,n+".lproj")),fs_extra_1.default.writeFileSync(path_1.default.join(e,n+".lproj/InfoPlist.strings"),o))})}}exports.IOSUtils=IOSUtils;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PreCompileProject=void 0;const tslib_1=require("tslib"),path_1=tslib_1.__importDefault(require("path")),stream_1=require("stream"),baseProject_1=require("../baseProject"),tools_1=require("../../utils/tools"),define_1=require("../../config/define");class PreCompileProject extends baseProject_1.BaseProject{constructor(t,e,i){var r,s,o;if(super(),this.event=new stream_1.EventEmitter,this.targetPlatform=define_1.PLATFORM["mini-weixin"],this.targetPlatformDefines={},this._fileBufferCache={},this.onFileChange=async(t,e)=>{if(e=(0,tools_1.normalizePath)(e).replace(/\/$/,"").replace(/^\//,""),"add"===t&&(this.cacheDirName(this._dirSet,path_1.default.posix.dirname(e)),this._fileSet.add(e),this.shouldConditionalCompile()?this._fileBufferCache[e]=this.conditionCompiler.compileFile(e,{targetPlatform:this.targetPlatform,targetPlatformDefines:this.targetPlatformDefines}):this._fileBufferCache[e]=this.project.getFile("",e)),"addDir"===t&&this.cacheDirName(this._dirSet,e),"unlink"===t&&(this.deleteDirOrFileOfSet(this._dirSet,this._fileSet,e),this._fileBufferCache[e]&&delete this._fileBufferCache[e]),"unlinkDir"===t&&this.deleteDirOrFileOfSet(this._dirSet,this._fileSet,e),"change"===t&&delete this._fileBufferCache[e],this.event.emit("fileChange",t,e),"change"===t&&e===path_1.default.posix.join(this.project.miniprogramRoot||"","app.json")){const t=Array.from(this._fileSet);this.updateFileAndDirs(),this.notifyRefreshFileOrDirs(t)}},this.project=t,this._projectPath=(0,tools_1.normalizePath)(t.projectPath),this._projectArchitecture=t.projectArchitecture,this._miniprogramRoot=t.miniprogramRoot||"",this._pluginRoot=t.pluginRoot,this._appid=t.appid,this._type=t.type?t.type:"miniProgram",this._privateKey=t.privateKey,this.ignores=t.ignores||[],null===(r=this.project.event)||void 0===r||r.on("fileChange",(t,e)=>{this.onFileChange(t,e)}),null===(s=this.project.event)||void 0===s||s.on("optionsChange",t=>{this.updateOptions(t)}),this.runEnv=i.runEnv,null===(o=this.project)||void 0===o?void 0:o.setting)this.setting=this.project.setting;else{const t=this.getProjectConfig();(null==t?void 0:t.setting)&&(this.setting=t.setting)}this.conditionCompiler=e,this.updateConditionCompileOptions({targetPlatform:i.targetPlatform||define_1.PLATFORM["mini-weixin"],targetPlatformDefines:i.targetPlatformDefines})}async ready(){await this.wait(this.init.bind(this))}async init(){this.updateFileAndDirs()}shouldConditionalCompile(){var t;return!!(null===(t=this.project.setting)||void 0===t?void 0:t.condition)}updateOptions(t){this._appid=t.appid,this._attr=t.attr,this._type=this.getProjectType(t.attr,t.compileType),this._miniprogramRoot=t.miniprogramRoot,this._pluginRoot=t.pluginRoot,this._projectArchitecture=t.projectArchitecture}updateConditionCompileOptions(t){const e=this.targetPlatform;if(this.targetPlatform=t.targetPlatform||define_1.PLATFORM["mini-weixin"],this.targetPlatformDefines=t.targetPlatformDefines||{},this.targetPlatform!==e){this._fileBufferCache={};const t=Array.from(this._fileSet);this.updateFileAndDirs(),this.notifyRefreshFileOrDirs(t),this.event.emit("precompileOptionsChange",{targetPlatform:this.targetPlatform,targetPlatformDefines:this.targetPlatformDefines})}}updateFileAndDirs(){var t,e;if(null===(t=this._fileSet)||void 0===t||t.clear(),null===(e=this._dirSet)||void 0===e||e.clear(),this.shouldConditionalCompile()){const t=this.conditionCompiler.filterResourceByPlatfrom({targetPlatform:this.targetPlatform});for(const e of t){const t=e.replace(/\\/g,path_1.default.posix.sep);this._fileSet.add(t),this.cacheDirName(this._dirSet,t)}}else{const{files:t,dirs:e}=this.project.getFilesAndDirs();this._fileSet=new Set(t),this._dirSet=new Set(e)}}get srcPath(){return this.project.srcPath||""}async attr(){return await this.project.attr()}async serialize(){const t=await super.serialize();return Object.assign(Object.assign({},t),{targetPlatform:this.targetPlatform,targetPlatformDefines:this.targetPlatformDefines})}getSrcFile(t="",e){return this.project.getFile(t,e)}getFile(t="",e){const i=this.getTargetPath(t,e);return this._fileBufferCache[i]||(this.shouldConditionalCompile()?this._fileBufferCache[i]=this.conditionCompiler.compileFile(i,{targetPlatform:this.targetPlatform,targetPlatformDefines:this.targetPlatformDefines}):this._fileBufferCache[i]=this.project.getFile(t,e)),this._fileBufferCache[i]}notifyRefreshFileOrDirs(t){const e=Array.from(this._fileSet);e.length!==t.length&&(e.forEach(e=>{t.includes(e)||this.event.emit("fileChange","add",e)}),t.forEach(t=>{e.includes(t)||this.event.emit("fileChange","unlink",t)}))}clearCache(){var t,e;this._fileBufferCache={},null===(e=(t=this.project).clearCache)||void 0===e||e.call(t)}}exports.PreCompileProject=PreCompileProject;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PreCompileProject=void 0;const tslib_1=require("tslib"),path_1=tslib_1.__importDefault(require("path")),stream_1=require("stream"),baseProject_1=require("../baseProject"),tools_1=require("../../utils/tools"),define_1=require("../../config/define");class PreCompileProject extends baseProject_1.BaseProject{constructor(t,e,i){var r,s,o;if(super(),this.event=new stream_1.EventEmitter,this.targetPlatform=define_1.PLATFORM["mini-weixin"],this.targetPlatformDefines={},this._fileBufferCache={},this.onFileChange=async(t,e)=>{if(e=(0,tools_1.normalizePath)(e).replace(/\/$/,"").replace(/^\//,""),"add"===t&&(this.cacheDirName(this._dirSet,path_1.default.posix.dirname(e)),this._fileSet.add(e),this.shouldConditionalCompile()?this._fileBufferCache[e]=this.conditionCompiler.compileFile(e,{targetPlatform:this.targetPlatform,targetPlatformDefines:this.targetPlatformDefines}):this._fileBufferCache[e]=this.project.getFile("",e)),"addDir"===t&&this.cacheDirName(this._dirSet,e),"unlink"===t&&(this.deleteDirOrFileOfSet(this._dirSet,this._fileSet,e),this._fileBufferCache[e]&&delete this._fileBufferCache[e]),"unlinkDir"===t&&this.deleteDirOrFileOfSet(this._dirSet,this._fileSet,e),"change"===t&&delete this._fileBufferCache[e],this.event.emit("fileChange",t,e),"change"===t&&e===path_1.default.posix.join(this.project.miniprogramRoot||"","app.json")){const t=Array.from(this._fileSet);this.updateFileAndDirs(),this.notifyRefreshFileOrDirs(t)}},this.project=t,this._projectPath=(0,tools_1.normalizePath)(t.projectPath),this._projectArchitecture=t.projectArchitecture,this._miniprogramRoot=t.miniprogramRoot||"",this._pluginRoot=t.pluginRoot,this._appid=t.appid,this._type=t.type?t.type:"miniProgram",this._privateKey=t.privateKey,this.ignores=t.ignores||[],null===(r=this.project.event)||void 0===r||r.on("fileChange",(t,e)=>{this.onFileChange(t,e)}),null===(s=this.project.event)||void 0===s||s.on("optionsChange",t=>{this.updateOptions(t)}),this.runEnv=i.runEnv,null===(o=this.project)||void 0===o?void 0:o.setting)this.setting=this.project.setting;else{const t=this.getProjectConfig();(null==t?void 0:t.setting)&&(this.setting=t.setting)}this.conditionCompiler=e,this.updateConditionCompileOptions({targetPlatform:i.targetPlatform||define_1.PLATFORM["mini-weixin"],targetPlatformDefines:i.targetPlatformDefines}),this.packOptions=t.packOptions||{ignore:[],include:[]}}async ready(){await this.wait(this.init.bind(this))}async init(){this.updateFileAndDirs()}shouldConditionalCompile(){var t;return!!(null===(t=this.project.setting)||void 0===t?void 0:t.condition)}updateOptions(t){this._appid=t.appid,this._attr=t.attr,this._type=this.getProjectType(t.attr,t.compileType),this._miniprogramRoot=t.miniprogramRoot,this._pluginRoot=t.pluginRoot,this._projectArchitecture=t.projectArchitecture,this.packOptions=t.packOptions||{ignore:[],include:[]}}updateConditionCompileOptions(t){const e=this.targetPlatform;if(this.targetPlatform=t.targetPlatform||define_1.PLATFORM["mini-weixin"],this.targetPlatformDefines=t.targetPlatformDefines||{},this.targetPlatform!==e){this._fileBufferCache={};const t=Array.from(this._fileSet);this.updateFileAndDirs(),this.notifyRefreshFileOrDirs(t),this.event.emit("precompileOptionsChange",{targetPlatform:this.targetPlatform,targetPlatformDefines:this.targetPlatformDefines})}}updateFileAndDirs(){var t,e;if(null===(t=this._fileSet)||void 0===t||t.clear(),null===(e=this._dirSet)||void 0===e||e.clear(),this.shouldConditionalCompile()){const t=this.conditionCompiler.filterResourceByPlatfrom({targetPlatform:this.targetPlatform});for(const e of t){const t=e.replace(/\\/g,path_1.default.posix.sep);this._fileSet.add(t),this.cacheDirName(this._dirSet,t)}}else{const{files:t,dirs:e}=this.project.getFilesAndDirs();this._fileSet=new Set(t),this._dirSet=new Set(e)}}get srcPath(){return this.project.srcPath||""}async attr(){return await this.project.attr()}async serialize(){const t=await super.serialize();return Object.assign(Object.assign({},t),{targetPlatform:this.targetPlatform,targetPlatformDefines:this.targetPlatformDefines})}getSrcFile(t="",e){return this.project.getFile(t,e)}getFile(t="",e){const i=this.getTargetPath(t,e);return this._fileBufferCache[i]||(this.shouldConditionalCompile()?this._fileBufferCache[i]=this.conditionCompiler.compileFile(i,{targetPlatform:this.targetPlatform,targetPlatformDefines:this.targetPlatformDefines}):this._fileBufferCache[i]=this.project.getFile(t,e)),this._fileBufferCache[i]}notifyRefreshFileOrDirs(t){const e=Array.from(this._fileSet);e.length!==t.length&&(e.forEach(e=>{t.includes(e)||this.event.emit("fileChange","add",e)}),t.forEach(t=>{e.includes(t)||this.event.emit("fileChange","unlink",t)}))}clearCache(){var t,e;this._fileBufferCache={},null===(e=(t=this.project).clearCache)||void 0===e||e.call(t)}}exports.PreCompileProject=PreCompileProject;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.BaseProject=void 0;const tslib_1=require("tslib"),path_1=tslib_1.__importDefault(require("path")),stream_1=require("stream"),fs_extra_1=tslib_1.__importDefault(require("fs-extra")),tools_1=require("../utils/tools"),waitable_1=tslib_1.__importDefault(require("../utils/waitable"));class BaseProject extends waitable_1.default{constructor(){super(...arguments),this._projectPath="",this._projectArchitecture="miniProgram",this._type="miniProgram",this._privateKey="",this.ignores=[],this.setting={},this._dirSet=new Set,this._fileSet=new Set,this.event=new stream_1.EventEmitter}get projectPath(){return this._projectPath}get projectArchitecture(){return this._projectArchitecture}get srcPath(){let t="";return"miniProgramPlugin"!==this._type&&"miniGamePlugin"!==this._type||(t=(0,tools_1.normalizePath)(path_1.default.join(this.projectPath,this.pluginRoot||""))),t=(0,tools_1.normalizePath)(path_1.default.join(this.projectPath,this.miniprogramRoot||"")),(this._projectPath.startsWith("//")||this._projectPath.startsWith("\\\\"))&&(t.startsWith("//")||(t="/"+t)),t}get pluginSrcPath(){return(0,tools_1.normalizePath)(path_1.default.join(this.projectPath,this.pluginRoot||""))}get type(){return this._type}set type(t){this._type=t}get appid(){return this._appid}set appid(t){this._appid=t}get privateKey(){return this._privateKey}set privateKey(t){this._privateKey=t}get miniprogramRoot(){return this._miniprogramRoot||""}set miniprogramRoot(t){this._miniprogramRoot=t}get pluginRoot(){return this._pluginRoot}set pluginRoot(t){this._pluginRoot=t}get nameMappingFromDevtools(){return this._nameMappingFromDevtools}set nameMappingFromDevtools(t){this._nameMappingFromDevtools=t}async attr(){return this._attr}async ready(){await this.wait()}getProjectType(t,e){let i="";return i=(null==t?void 0:t.gameApp)?"miniGamePlugin"===e?"miniGamePlugin":"miniGame":e,i}getProjectConfig(){let t={};const e=path_1.default.join(this.projectPath,"project.config.json");if(fs_extra_1.default.existsSync(e))try{t=fs_extra_1.default.readJsonSync(e)}catch(t){throw new Error("project.config.json not exist")}return t}async serialize(){const{files:t,dirs:e}=this.getFilesAndDirs();return{projectPath:this.projectPath,appid:this.appid,attr:await this.attr(),type:this.type,projectArchitecture:this.projectArchitecture,miniprogramRoot:this.miniprogramRoot,pluginRoot:this.pluginRoot,files:t,dirs:e,setting:this.setting}}updateFiles(){this.updateFileAndDirs(...arguments)}updateOptions(t){this._appid=t.appid,this._attr=t.attr,this._type=this.getProjectType(t.attr,t.compileType),this._miniprogramRoot=t.miniprogramRoot,this._pluginRoot=t.pluginRoot,this._projectArchitecture=t.projectArchitecture,this.event.emit("optionsChange",t)}cacheDirName(t,e){t.has(e)||(t.add(e),this.cacheDirName(t,path_1.default.posix.dirname(e)))}deleteDirOrFileOfSet(t,e,i){if(t.has(i)){t.delete(i);const r=i+"/",s=Array.from(t);for(const e of s)e.startsWith(r)&&t.delete(e);const a=Array.from(e);for(const t of a)t.startsWith(r)&&e.delete(t)}e.has(i)&&e.delete(i)}getTargetPath(t="",e=""){return(0,tools_1.normalizePath)(path_1.default.posix.join(t,e)).replace(/\/$/,"").replace(/^\//,"")}getFilesAndDirs(){return{files:Array.from(this._fileSet),dirs:Array.from(this._dirSet)}}exists(t="",e=""){const i=this.getTargetPath(t,e);if(this._fileSet.has(i)||this._dirSet.has(i))return!0;const r=(0,tools_1.normalizePath)(path_1.default.posix.join(this.projectPath,i));return fs_extra_1.default.existsSync(r)}stat(t="",e=""){const i=this.getTargetPath(t,e),r=path_1.default.join(this.projectPath,i);let s={};if(this._fileSet.has(i)){return{isFile:!0,isDirectory:!1,size:this.getFileSize(t,e),mtimeMs:s.mtimeMs||""}}
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.BaseProject=void 0;const tslib_1=require("tslib"),path_1=tslib_1.__importDefault(require("path")),stream_1=require("stream"),fs_extra_1=tslib_1.__importDefault(require("fs-extra")),tools_1=require("../utils/tools"),waitable_1=tslib_1.__importDefault(require("../utils/waitable"));class BaseProject extends waitable_1.default{constructor(){super(...arguments),this._projectPath="",this._projectArchitecture="miniProgram",this._type="miniProgram",this._privateKey="",this.ignores=[],this.setting={},this._dirSet=new Set,this._fileSet=new Set,this.event=new stream_1.EventEmitter}get projectPath(){return this._projectPath}get projectArchitecture(){return this._projectArchitecture}get srcPath(){let t="";return"miniProgramPlugin"!==this._type&&"miniGamePlugin"!==this._type||(t=(0,tools_1.normalizePath)(path_1.default.join(this.projectPath,this.pluginRoot||""))),t=(0,tools_1.normalizePath)(path_1.default.join(this.projectPath,this.miniprogramRoot||"")),(this._projectPath.startsWith("//")||this._projectPath.startsWith("\\\\"))&&(t.startsWith("//")||(t="/"+t)),t}get pluginSrcPath(){return(0,tools_1.normalizePath)(path_1.default.join(this.projectPath,this.pluginRoot||""))}get type(){return this._type}set type(t){this._type=t}get appid(){return this._appid}set appid(t){this._appid=t}get privateKey(){return this._privateKey}set privateKey(t){this._privateKey=t}get miniprogramRoot(){return this._miniprogramRoot||""}set miniprogramRoot(t){this._miniprogramRoot=t}get pluginRoot(){return this._pluginRoot}set pluginRoot(t){this._pluginRoot=t}get nameMappingFromDevtools(){return this._nameMappingFromDevtools}set nameMappingFromDevtools(t){this._nameMappingFromDevtools=t}async attr(){return this._attr}async ready(){await this.wait()}getProjectType(t,e){let i="";return i=(null==t?void 0:t.gameApp)?"miniGamePlugin"===e?"miniGamePlugin":"miniGame":e,i}getProjectConfig(){let t={};const e=path_1.default.join(this.projectPath,"project.config.json");if(fs_extra_1.default.existsSync(e))try{t=fs_extra_1.default.readJsonSync(e)}catch(t){throw new Error("project.config.json not exist")}return t}async serialize(){const{files:t,dirs:e}=this.getFilesAndDirs();return{projectPath:this.projectPath,appid:this.appid,attr:await this.attr(),type:this.type,projectArchitecture:this.projectArchitecture,miniprogramRoot:this.miniprogramRoot,pluginRoot:this.pluginRoot,files:t,dirs:e,setting:this.setting}}updateFiles(){this.updateFileAndDirs(...arguments)}updateOptions(t){this._appid=t.appid,this._attr=t.attr,this._type=this.getProjectType(t.attr,t.compileType),this._miniprogramRoot=t.miniprogramRoot,this._pluginRoot=t.pluginRoot,this._projectArchitecture=t.projectArchitecture,this.packOptions=t.packOptions||{ignore:[],include:[]},this.event.emit("optionsChange",t)}cacheDirName(t,e){t.has(e)||(t.add(e),this.cacheDirName(t,path_1.default.posix.dirname(e)))}deleteDirOrFileOfSet(t,e,i){if(t.has(i)){t.delete(i);const r=i+"/",s=Array.from(t);for(const e of s)e.startsWith(r)&&t.delete(e);const a=Array.from(e);for(const t of a)t.startsWith(r)&&e.delete(t)}e.has(i)&&e.delete(i)}getTargetPath(t="",e=""){return(0,tools_1.normalizePath)(path_1.default.posix.join(t,e)).replace(/\/$/,"").replace(/^\//,"")}getFilesAndDirs(){return{files:Array.from(this._fileSet),dirs:Array.from(this._dirSet)}}exists(t="",e=""){const i=this.getTargetPath(t,e);if(!i.startsWith(t))return!1;if(this._fileSet.has(i)||this._dirSet.has(i))return!0;const r=(0,tools_1.normalizePath)(path_1.default.posix.join(this.projectPath,i));return fs_extra_1.default.existsSync(r)}stat(t="",e=""){if(!this.exists(t,e))return;const i=this.getTargetPath(t,e),r=path_1.default.join(this.projectPath,i);let s={};try{s=fs_extra_1.default.statSync(r)}catch(t){fs_extra_1.default.existsSync(r)||this.deleteDirOrFileOfSet(this._dirSet,this._fileSet,i)}if(this._fileSet.has(i)){return{isFile:!0,isDirectory:!1,size:this.getFileSize(t,e),mtimeMs:s.mtimeMs||""}}return this._dirSet.has(i)?{isFile:!1,isDirectory:!0,size:0,mtimeMs:s.mtimeMs}:void 0}getAllFileInfo(t=""){const e=this.getFileList(t),i={};return e.forEach(t=>{i[t]=this.stat("",t)||{}}),i}getFileList(t="",e=""){return Array.from(this._fileSet).filter(i=>(!e||path_1.default.posix.extname(i)===e)&&!(t&&!i.startsWith(t)))}getSrcFile(t,e){t=t||"";const i=this.getTargetPath(t,e),r=(0,tools_1.normalizePath)(path_1.default.posix.join(this.projectPath,i));return fs_extra_1.default.readFileSync(r,null)}getFile(t,e){return this.getSrcFile(t,e)}getJson(t="",e=""){const i=this.getFile(t,e).toString("utf-8");try{return JSON.parse(i)}catch(i){throw new Error("JSON parse failed: "+this.getTargetPath(t,e))}}getFileSize(t="",e=""){const i=this.getFile(t,e);return i?i.byteLength:0}getExtAppid(){throw new Error("Method not implemented.")}async onFileChange(t,e){e=(0,tools_1.normalizePath)(e).replace(/\/$/,"").replace(/^\//,""),"add"===t&&(this.cacheDirName(this._dirSet,path_1.default.posix.dirname(e)),this._fileSet.add(e)),"addDir"===t&&this.cacheDirName(this._dirSet,e),"unlink"===t&&this.deleteDirOrFileOfSet(this._dirSet,this._fileSet,e),"unlinkDir"===t&&this.deleteDirOrFileOfSet(this._dirSet,this._fileSet,e),"change"===t&&this._fileSet.has(e),this.event.emit("fileChange",t,e)}clearCache(){}}exports.BaseProject=BaseProject;
|
package/dist/utils/codesign.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.checkXcodeEnv=exports.codesignAndExport=void 0;const generateIpa_1=require("./generateIpa"),singletontask_1=require("./singletontask"),cp_1=require("./cp"),path=require("path"),signAndInstallTask={};async function codesignAndExport(e,n,t,s,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.checkXcodeEnv=exports.codesignAndExport=void 0;const generateIpa_1=require("./generateIpa"),singletontask_1=require("./singletontask"),cp_1=require("./cp"),env_1=require("./env"),path=require("path"),signAndInstallTask={};async function codesignAndExport(e,n,t,i,s,a,c,r){var o;const{output:p}=i,d=path.join(__dirname,"../static/scripts/resignIpa"),l=await(0,generateIpa_1.generateIpa)(n,s),g=(null===(o=i.entitlements)||void 0===o?void 0:o["com.apple.developer.associated-domains"])||"";try{await checkXcodeEnv(s);const e=[l,p,i.outputAppWithName?i.outputAppWithName:"false",a?"true":"",g,t];let n=!1;if(i.certificate?(e.push(i.certificate),i.profile?(e.push(i.profile),n=!0,i.tpnsProfile?(e.push(i.tpnsProfile),s.message("doing","certificate: find tpns profile")):s.message("doing","certificate: cant find tpns profile")):s.message("fail","certificate: cant find profile")):!0===r?n=!0:s.message("fail","certificate: cant find certificate"),!n)throw s.message("fail","codesignAndExport missing needed info"),new Error("Failed! codesignAndExport missing needed info");return signAndInstallTask[l]||(signAndInstallTask[l]=new singletontask_1.SingletonTask(cp_1.spawnSyncExecShell.bind(null,d,e,{},s))),await signAndInstallTask[l].getResult(!0),{success:!0}}catch(e){return{success:!1,errMsg:e.message}}finally{delete signAndInstallTask[l]}}async function checkXcodeEnv(e){if(env_1.isWin)throw new Error("windows下不能使用分发证书签名。需要启用远程构建");const n=path.join(__dirname,"../static/scripts/checkXcodeEnv");await(0,cp_1.spawnSyncExecShell)(n,[],{},e)}exports.codesignAndExport=codesignAndExport,exports.checkXcodeEnv=checkXcodeEnv;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";function shouldInspectCompiler(){var o;return!!(null===(o=global.localStorage)||void 0===o?void 0:o.getItem("inspectCompiler"))}function shouldRunInMainProcess(){var o;return!!(null===(o=global.localStorage)||void 0===o?void 0:o.getItem("compilerInMainProcess"))}function shouldNotRunInWorker(){var o;return!!(null===(o=global.localStorage)||void 0===o?void 0:o.getItem("compilerNotInWorker"))}Object.defineProperty(exports,"__esModule",{value:!0}),exports.shouldNotRunInWorker=exports.shouldRunInMainProcess=exports.shouldInspectCompiler=void 0,exports.shouldInspectCompiler=shouldInspectCompiler,exports.shouldRunInMainProcess=shouldRunInMainProcess,exports.shouldNotRunInWorker=shouldNotRunInWorker;
|
package/dist/utils/locales/en.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const fomatable_string_1=require("./fomatable_string"),config={GENERATE_LOCAL_SIGNATURE_FAIL:"generate local signature fail. Usually this happens the content or encoding of private key file is incorrect. Detail: %s",PARAM_ERROR:'function: "%s" lack of parameter: "%s"',SHOULD_NOT_BE_EMPTY:"%s should not be empty",JSON_CONTENT_SHOULD_BE:"%s field needs to be %s",SHOULD_MATCH:"%s should match %s",SHOULD_EQUAL:"%s should equal to %s",SHOULD_AT_LEAST_ONE_ITEM:"%s should have at least on item",OR:"Or",CORRESPONDING_FILE_NOT_FOUND:'%s could not find the corresponding file: "%s"',JSON_SHOULD_NOT_CONTAIN:"%s should not contain %s",JSON_SHOULD_NOT_START_WITH:"%s should not begin with '%s'",NOT_FOUND:"%s not found",COMPONENT_NOT_FOUND:"%s, component not found in the path: %s",NOT_FOUND_IN_ROOT_DIR:"%s is not found in the project root directory",MINIPROGRAM_APP_JSON_NOT_FOUND:'In the directory %s specified by "miniprogramRoot" in project.config.json, %s is not found in that directory.If you don\'t know what "miniprogramRoot" means for, just leave it as empty string.',PLUGIN_JSON_NOT_FOUND:"In the miniprogram local development plug-in directory %s specified by pluginRoot in project.config.json, %s is not found",PLUGIN_PATH_SAME_WITH_MINIPROGRAM:"The plugin directory %s specified by pluginRoot in project.config.json is the same as the miniprogram directory %s, please modify it to a different directory",CONTENT_EXIST:"%s already exists",FILE_NOT_FOUND:'"%s" file not found, or the file read failed',JSON_PARSE_ERROR:"%s File parsing error",ENTRANCE_NOT_FOUND:"No pages : %s defined in the entry page \napp.json is found",JSON_PAGE_FILE_NOT_EXISTS:'%s %s "%s" could not find the corresponding %s file',SHOULD_NOT_IN:"%s Should not exist in %s",JSON_CUSTOM_COMPILE_PATH_NOT_EXISTS_TITLE:"app.json or custom compilation condition error",JSON_CUSTOM_COMPILE_PATH_NOT_EXISTS:"The startup page %s specified in the custom compilation is not defined in app.json",JSON_ENTRY_PAGE_PATH_NOT_FOUND:"No entry page defined in %s is found in %s",JSON_TABBAR_AT_LEAST:'["tabBar"]["list"] must contain at least %s items',JSON_TABBAR_AT_MOST:'["tabBar"]["list"] cannot contain more than %s items',JSON_TABBAR_PATH_EMPTY:'["tabBar"]["list"][%s]["pagePath"] cannot be empty',JSON_TABBAR_PATH_SAME_WITH_OTHER:'["tabBar"]["list"][%s]["pagePath"] is same with ["tabBar"]["list"][%s]["pagePath"]',JSON_TABBAR_ICON_MAX_SIZE:'The size of ["tabBar"]["list"][%s]["%s"] exceeds %skb',JSON_TABBAR_ICON_EXT:'["tabBar"]["list"][%s]["%s"] Wrong file format, only %s format is supported',EXT_SHOULD_BE_ERROR:'extension name of %s should be "%s"',JSON_CONTENT_SHOULD_NOT_BE:"%s cannot be %s",JSON_RESOLVE_ALIAS_ILLEGAL:'Invalid %s or %s in resolveAlias field, contains consecutive "//"',JSON_RESOLVE_ALIAS_INCLUDE_STAR:'The key "%s" or value "%s" in resolveAlias field should end with "/*"',JSON_RESOLVE_ALIAS_SHOULD_NOT_START_WITH:'The value "%s" in resolveAlias field should not start with "./"',APP_JSON_SKYLINE_WINDOW_TIPS:'Due to the "custom" navigationStyle of the Skyline page, the configuration of "navigationStyle", "navigationBarTextStyle", "navigationBarTitleText", and "navigationBarBackgroundColor" in app.json will not take effect.',APP_JSON_SHOULD_SET_LAZYCODELOADING:'You need to add "lazyCodeLoading": "requiredComponents" in app.json, since the value of "renderer" in %s is "skyline"',APP_JSON_SHOULD_SET_RENDEREROPTIONS:'You need to configure the "skyline" sub-option in the "rendererOptions" option in app.json, since the value of "renderer" in %s is "skyline"',JSON_SHOULD_SET_RENDEREROPTIONS:'You need to add "rendererOptions" field in %, as the "renderer" field is set to skyline。More detail: https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/skyline/wxss.html#%E5%BC%80%E5%90%AF%E9%BB%98%E8%AE%A4Block%E5%B8%83%E5%B1%80',JSON_SHOULD_SET_RENDEREROPTIONS_SKYLINE:'You need to add "skyline" configuration in the rendererOptions field of the %, as the "renderer" field is set to skyline。More detail: https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/skyline/wxss.html#%E5%BC%80%E5%90%AF%E9%BB%98%E8%AE%A4Block%E5%B8%83%E5%B1%80',JSON_SHOULD_SET_COMPONENTFRAMEWORK_SKYLINE:'You need to set the value of the "componentFramework" field to "glass-easel" in the %, as the "renderer" field is set to skyline。More detail: https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/glass-easel/migration.html',PAGE_JSON_SHOULD_SET_DISABLESCROLL_TRUE:'According to the configuration of the page or app.json, the value of "renderer" in %s page is "skyline", the "disableScroll" configuration for the page should be set to true',PAGE_JSON_SHOULD_SET_NAVIGATIONSTYLE_CUSTOM:'According to the configuration of the page or app.json, the value of "renderer" in %s page is "skyline", the "navigationStyle" configuration for the page should be set to "custom"',JSON_CONTENT_EXISTED:"%s already exists",JSON_CONTENT_NOT_FOUND:"%s does not exist",LACK_OF_FILE:"File %s is missing",JSON_PAGES_REPEAT:"%s is repeated in %s",JSON_CONTENT_REPEAT:"%s could not be declared both in %s",EXT_JSON_INVALID:'%s is not a 3rdMiniProgramAppid, ext.json cannot take effect;Read the documentation: "%s"',GAME_EXT_JSON_INVALID:"%s is not a 3rdMiniGameAppid, ext.json cannot take effect;",EXT_APPID_SHOULD_NOT_BE_EMPTY:"extAppid should not be empty",FILE_NOT_UTF8:"%s file is not in UTF-8 encoding",INVALID:"invalid %s",DIRECTORY:"Directory",EXCEED_LIMIT:"%s exceed limit %s",PLEASE_CHOOSE_PLUGIN_MODE:"If you are developing a plugin, choose the plugin mode",TRIPLE_NUMBER_DOT:"digit.digit.digit, each segment of digit is no more than 3 digits",PAGE_PATH:"Page Path",PLUGINS_SAME_ALIAS:"%s and %s have same alias",SAME_ITEM:'%s and %s have same "%s"',ALREADY_EXISTS:"already exists",SAME_KEY_PAGE_PUBLICCOMPONENTS:'There can not be the same key: %s in ["pages"] and ["publicComponents"]',GAME_DEV_PLUGIN_SHOULD_NOT_USE_LOCAL_PATH:"Dev plugin: %s shall never specify a local path",GAME_PLUGIN_SIGNATURE_MD5_NOT_MATCH_CONTENT:'MD5 hash of the plugin library file "%s": "%s" not matching the value "%s" given by its signature.json, thus the compiling process has been interrupted.\nThis indicates you might have changed the content of the file.\nRestore the original content of this file may help solve the issue and remove this warning.\n\nTo learn more, you may refer to the documentation.\n',FILE:"FILE",PROCESSING:"processing: %s",DONE:"done: %s",UPLOAD:"upload",SUCCESS:"success",PROJECT_TYPE_ERROR:"project.type is %s, but appid(%s) is %s",MINI_PROGRAM:"MiniProgram",MINI_GAME:"MiniGame",NOT_ALLOWED_REQUIRE_VAR:"Require variable is not allowed",NOT_ALLOWED_REQUIRE_ASSIGN:"Assigning the require function to other variables is not allowed",NOT_FOUND_NPM_ENTRY:"Npm package entry file not found",NOT_FOUND_NODE_MODULES:"NPM packages not found. Please confirm npm packages which need to build are belong to `miniprogramRoot` directory. Or you may edit project.config.json's `packNpmManually` and `packNpmRelationList`",JSON_ENTRANCE_DECLARE_PATH_ERR:'["entranceDeclare"]["locationMessage"]["path"] "%s" should belong to pages or pages in sub packages',JSON_ENTRANCE_DECLARE_PATH_EMPTY:'["entranceDeclare"]["locationMessage"]["path"] should not be empty',JSON_REQUIRED_PRIVATE_INFOS_MUTUALLY_EXCLUSIVE:"requiredPrivateInfos %s is is mutually exclusive with %s.",COULD_NOT_USE_CODE_PROTECT:"Code protect is not available",SUMMER_COMPILING_MODULE:"Compiling %s",SUMMER_COMPILE_JSON:"Compile jSON files",SUMMER_OPTIMIZE_CODE:"Optimize code",SUMMER_PACK_FILES:"Pack resource file",SUMMER_COMPRESS_PACK:"Compress code package",SUMMER_SEAL_PACK:"Seal code package",SUMMER_APPEND_BABEL_HELPERS:"Append babel helper files",SUMMER_COMPILE_PAGE_JSON:"Compile json files of %s pages",SUMMER_COMPILE_PLUGIN_PAGE_JSON:"Compiling json files of %s plugin pages",SUMMER_COMPILE:"Compile %s",SUMMER_COMPILE_MINIPROGRAM:"Compile miniprogram",SUMMER_COMPILE_MINIGAME:"Compile minigame",SUMMER_COMPILE_PLUGIN:"Compile plugin",FILE_EXT_FORMAT_ERROR:"%s Wrong file format, only %s format is supported",THEME_JSON_VALUE_SHOULD_BE:"%s as the value of %s , should be %s",JSON_VARIABLE_VALUE_NOT_FOUND:"could not find the value of %s in %s",THEME_JSON_SHOULD_EXIST:"%s use variable: %s,you need to use %s to specify the path of theme.json",PARSEERR_ENTRANCE_PAGE_ERROR:"The entrance page cannot be found\nPages defined in app.json : %s",PARSEERR_ENTRANCE_FILE_ERROR:"Failed to find or read the entrance file %s. Please recompile after checking",COMPILE_WXML_ERROR_CONSOLE:"compile .wxml error. The error message is as above, and you can view more details in the console.",COMPILE_WXSS_ERROR_CONSOLE:"Compile .wxss error. The error message is as above, and you can view more details in the console.",RELATED_NODE_MODULES_NOT_FOUND:"The related node_modules of %s is not found, please run `npm install` at %s",PACKAGE_JSON_PATH_IN_VALID:'packageJsonPath should ends with `package.json`, "%s" is invalid.',ACCOUNT_CARD_PACKAPGE_IN_VALID:'The independent subpackage defined with the value ["AccountCardPackage"]["root"] as the path was not found. Please check the ["subPackages"] configuration.'},formatConfig={};for(const[e,o]of Object.entries(config))formatConfig[e]=new fomatable_string_1.FormatableString(o);exports.default=formatConfig;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const fomatable_string_1=require("./fomatable_string"),config={GENERATE_LOCAL_SIGNATURE_FAIL:"generate local signature fail. Usually this happens the content or encoding of private key file is incorrect. Detail: %s",PARAM_ERROR:'function: "%s" lack of parameter: "%s"',SHOULD_NOT_BE_EMPTY:"%s should not be empty",JSON_CONTENT_SHOULD_BE:"%s field needs to be %s",SHOULD_MATCH:"%s should match %s",SHOULD_EQUAL:"%s should equal to %s",SHOULD_AT_LEAST_ONE_ITEM:"%s should have at least on item",OR:"Or",CORRESPONDING_FILE_NOT_FOUND:'%s could not find the corresponding file: "%s"',JSON_SHOULD_NOT_CONTAIN:"%s should not contain %s",JSON_SHOULD_NOT_START_WITH:"%s should not begin with '%s'",NOT_FOUND:"%s not found",COMPONENT_NOT_FOUND:"%s, component not found in the path: %s",NOT_FOUND_IN_ROOT_DIR:"%s is not found in the project root directory",MINIPROGRAM_APP_JSON_NOT_FOUND:'In the directory %s specified by "miniprogramRoot" in project.config.json, %s is not found in that directory.If you don\'t know what "miniprogramRoot" means for, just leave it as empty string.',PLUGIN_JSON_NOT_FOUND:"In the miniprogram local development plug-in directory %s specified by pluginRoot in project.config.json, %s is not found",PLUGIN_PATH_SAME_WITH_MINIPROGRAM:"The plugin directory %s specified by pluginRoot in project.config.json is the same as the miniprogram directory %s, please modify it to a different directory",CONTENT_EXIST:"%s already exists",FILE_NOT_FOUND:'"%s" file not found, or the file read failed',JSON_PARSE_ERROR:"%s File parsing error",ENTRANCE_NOT_FOUND:"No pages : %s defined in the entry page \napp.json is found",JSON_PAGE_FILE_NOT_EXISTS:'%s %s "%s" could not find the corresponding %s file',SHOULD_NOT_IN:"%s Should not exist in %s",JSON_CUSTOM_COMPILE_PATH_NOT_EXISTS_TITLE:"app.json or custom compilation condition error",JSON_CUSTOM_COMPILE_PATH_NOT_EXISTS:"The startup page %s specified in the custom compilation is not defined in app.json",JSON_ENTRY_PAGE_PATH_NOT_FOUND:"No entry page defined in %s is found in %s",JSON_TABBAR_AT_LEAST:'["tabBar"]["list"] must contain at least %s items',JSON_TABBAR_AT_MOST:'["tabBar"]["list"] cannot contain more than %s items',JSON_TABBAR_PATH_EMPTY:'["tabBar"]["list"][%s]["pagePath"] cannot be empty',JSON_TABBAR_PATH_SAME_WITH_OTHER:'["tabBar"]["list"][%s]["pagePath"] is same with ["tabBar"]["list"][%s]["pagePath"]',JSON_TABBAR_ICON_MAX_SIZE:'The size of ["tabBar"]["list"][%s]["%s"] exceeds %skb',JSON_TABBAR_ICON_EXT:'["tabBar"]["list"][%s]["%s"] Wrong file format, only %s format is supported',EXT_SHOULD_BE_ERROR:'extension name of %s should be "%s"',JSON_CONTENT_SHOULD_NOT_BE:"%s cannot be %s",JSON_RESOLVE_ALIAS_ILLEGAL:'Invalid %s or %s in resolveAlias field, contains consecutive "//"',JSON_RESOLVE_ALIAS_INCLUDE_STAR:'The key "%s" or value "%s" in resolveAlias field should end with "/*"',JSON_RESOLVE_ALIAS_SHOULD_NOT_START_WITH:'The value "%s" in resolveAlias field should not start with "./"',APP_JSON_SKYLINE_WINDOW_TIPS:'Due to the "custom" navigationStyle of the Skyline page, the configuration of "navigationStyle", "navigationBarTextStyle", "navigationBarTitleText", and "navigationBarBackgroundColor" in app.json will not take effect.',APP_JSON_SHOULD_SET_LAZYCODELOADING:'You need to add "lazyCodeLoading": "requiredComponents" in app.json, since the value of "renderer" in %s is "skyline"',APP_JSON_SHOULD_SET_RENDEREROPTIONS:'You need to configure the "skyline" sub-option in the "rendererOptions" option in app.json, since the value of "renderer" in %s is "skyline"',JSON_SHOULD_SET_RENDEREROPTIONS:'You need to add "rendererOptions" field in %, as the "renderer" field is set to skyline。More detail: https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/skyline/wxss.html#%E5%BC%80%E5%90%AF%E9%BB%98%E8%AE%A4Block%E5%B8%83%E5%B1%80',JSON_SHOULD_SET_RENDEREROPTIONS_SKYLINE:'You need to add "skyline" configuration in the rendererOptions field of the %, as the "renderer" field is set to skyline。More detail: https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/skyline/wxss.html#%E5%BC%80%E5%90%AF%E9%BB%98%E8%AE%A4Block%E5%B8%83%E5%B1%80',JSON_SHOULD_SET_COMPONENTFRAMEWORK_SKYLINE:'You need to set the value of the "componentFramework" field to "glass-easel" in the %, as the "renderer" field is set to skyline。More detail: https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/glass-easel/migration.html',PAGE_JSON_SHOULD_SET_DISABLESCROLL_TRUE:'According to the configuration of the page or app.json, the value of "renderer" in %s page is "skyline", the "disableScroll" configuration for the page should be set to true',PAGE_JSON_SHOULD_SET_NAVIGATIONSTYLE_CUSTOM:'According to the configuration of the page or app.json, the value of "renderer" in %s page is "skyline", the "navigationStyle" configuration for the page should be set to "custom"',JSON_CONTENT_EXISTED:"%s already exists",JSON_CONTENT_NOT_FOUND:"%s does not exist",LACK_OF_FILE:"File %s is missing",JSON_PAGES_REPEAT:"%s is repeated in %s",JSON_CONTENT_REPEAT:"%s could not be declared both in %s",EXT_JSON_INVALID:'%s is not a 3rdMiniProgramAppid, ext.json cannot take effect;Read the documentation: "%s"',GAME_EXT_JSON_INVALID:"%s is not a 3rdMiniGameAppid, ext.json cannot take effect;",EXT_APPID_SHOULD_NOT_BE_EMPTY:"extAppid should not be empty",FILE_NOT_UTF8:"%s file is not in UTF-8 encoding",INVALID:"invalid %s",DIRECTORY:"Directory",EXCEED_LIMIT:"%s exceed limit %s",PLEASE_CHOOSE_PLUGIN_MODE:"If you are developing a plugin, choose the plugin mode",TRIPLE_NUMBER_DOT:"digit.digit.digit, each segment of digit is no more than 3 digits",PAGE_PATH:"Page Path",PLUGINS_SAME_ALIAS:"%s and %s have same alias",SAME_ITEM:'%s and %s have same "%s"',ALREADY_EXISTS:"already exists",SAME_KEY_PAGE_PUBLICCOMPONENTS:'There can not be the same key: %s in ["pages"] and ["publicComponents"]',GAME_DEV_PLUGIN_SHOULD_NOT_USE_LOCAL_PATH:"Dev plugin: %s shall never specify a local path",GAME_PLUGIN_SIGNATURE_MD5_NOT_MATCH_CONTENT:'MD5 hash of the plugin library file "%s": "%s" not matching the value "%s" given by its signature.json, thus the compiling process has been interrupted.\nThis indicates you might have changed the content of the file.\nRestore the original content of this file may help solve the issue and remove this warning.\n\nTo learn more, you may refer to the documentation.\n',FILE:"FILE",PROCESSING:"processing: %s",DONE:"done: %s",UPLOAD:"upload",SUCCESS:"success",PROJECT_TYPE_ERROR:"project.type is %s, but appid(%s) is %s",MINI_PROGRAM:"MiniProgram",MINI_GAME:"MiniGame",NOT_ALLOWED_REQUIRE_VAR:"Require variable is not allowed",NOT_ALLOWED_REQUIRE_ASSIGN:"Assigning the require function to other variables is not allowed",NOT_FOUND_NPM_ENTRY:"Npm package entry file not found",NOT_FOUND_NODE_MODULES:"NPM packages not found. Please confirm npm packages which need to build are belong to `miniprogramRoot` directory. Or you may edit project.config.json's `packNpmManually` and `packNpmRelationList`",JSON_ENTRANCE_DECLARE_PATH_ERR:'["entranceDeclare"]["locationMessage"]["path"] "%s" should belong to pages or pages in sub packages',JSON_ENTRANCE_DECLARE_PATH_EMPTY:'["entranceDeclare"]["locationMessage"]["path"] should not be empty',JSON_REQUIRED_PRIVATE_INFOS_MUTUALLY_EXCLUSIVE:"requiredPrivateInfos %s is is mutually exclusive with %s.",COULD_NOT_USE_CODE_PROTECT:"Code protect is not available",SUMMER_COMPILING_MODULE:"Compiling %s",SUMMER_COMPILE_JSON:"Compile jSON files",SUMMER_OPTIMIZE_CODE:"Optimize code",SUMMER_PACK_FILES:"Pack resource file",SUMMER_COMPRESS_PACK:"Compress code package",SUMMER_SEAL_PACK:"Seal code package",SUMMER_APPEND_BABEL_HELPERS:"Append babel helper files",SUMMER_COMPILE_PAGE_JSON:"Compile json files of %s pages",SUMMER_COMPILE_PLUGIN_PAGE_JSON:"Compiling json files of %s plugin pages",SUMMER_COMPILE:"Compile %s",SUMMER_COMPILE_MINIPROGRAM:"Compile miniprogram",SUMMER_COMPILE_MINIGAME:"Compile minigame",SUMMER_COMPILE_PLUGIN:"Compile plugin",FILE_EXT_FORMAT_ERROR:"%s Wrong file format, only %s format is supported",THEME_JSON_VALUE_SHOULD_BE:"%s as the value of %s , should be %s",JSON_VARIABLE_VALUE_NOT_FOUND:"could not find the value of %s in %s",THEME_JSON_SHOULD_EXIST:"%s use variable: %s,you need to use %s to specify the path of theme.json",PARSEERR_ENTRANCE_PAGE_ERROR:"The entrance page cannot be found\nPages defined in app.json : %s",PARSEERR_ENTRANCE_FILE_ERROR:"Failed to find or read the entrance file %s. Please recompile after checking",COMPILE_WXML_ERROR_CONSOLE:"compile .wxml error. The error message is as above, and you can view more details in the console.",COMPILE_WXSS_ERROR_CONSOLE:"Compile .wxss error. The error message is as above, and you can view more details in the console.",RELATED_NODE_MODULES_NOT_FOUND:"The related node_modules of %s is not found, please run `npm install` at %s",PACKAGE_JSON_PATH_IN_VALID:'packageJsonPath should ends with `package.json`, "%s" is invalid.',ACCOUNT_CARD_PACKAPGE_IN_VALID:'The independent subpackage defined with the value ["AccountCardPackage"]["root"] as the path was not found. Please check the ["subPackages"] configuration.',UNUSE_FILE_LIST:"Ignored by code analyzer: %s",PACK_OPTIONS_IGNORE_LIST:"Ignored by project.config.json packOptions.ignore setting: %s",PARTIAL_COMPILE_IGNORE_LIST:"Ignore by partial compile condition: %s",UNKNOWN_REASON_INGORE_LIST:"Ingore by %s: %s",LARGEFILE_WARNING:"%s exceed the max file size: %sKB,ignored by compile process"},formatConfig={};for(const[e,o]of Object.entries(config))formatConfig[e]=new fomatable_string_1.FormatableString(o);exports.default=formatConfig;
|
package/dist/utils/locales/zh.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const fomatable_string_1=require("./fomatable_string"),config={GENERATE_LOCAL_SIGNATURE_FAIL:"生成本地签名失败。通常是key文件编码或者内容有误。错误详情: %s",PARAM_ERROR:'方法:"%s" 缺少参数:"%s"',SHOULD_NOT_BE_EMPTY:"%s 不能为空",JSON_CONTENT_SHOULD_BE:"%s 字段需为 %s",SHOULD_AT_LEAST_ONE_ITEM:"%s 需至少存在一项",SHOULD_MATCH:"%s 需与 %s 匹配",SHOULD_EQUAL:"%s 需等于 %s",EXT_SHOULD_BE_ERROR:'%s 的拓展名需为 "%s"',OR:"或",CORRESPONDING_FILE_NOT_FOUND:"未找到 %s 对应的 %s 文件",JSON_SHOULD_NOT_START_WITH:"%s 不应该以 '%s' 开头",JSON_SHOULD_NOT_CONTAIN:"%s 不应该包含 %s",NOT_FOUND:"%s 未找到",COMPONENT_NOT_FOUND:"%s,在 %s 路径下未找到组件",NOT_FOUND_IN_ROOT_DIR:"在项目根目录未找到 %s ",MINIPROGRAM_APP_JSON_NOT_FOUND:"根据 project.config.json 中 miniprogramRoot 指定的小程序目录 %s,在该目录下未找到 %s。\n如果你不理解 miniprogramRoot 字段的含义,请在 project.config.json 中将 miniprogramRoot 设为空字符串。\n详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",PLUGIN_JSON_NOT_FOUND:"根据 project.config.json 中 pluginRoot 指定的小程序本地开发插件目录 %s,%s 未找到",PLUGIN_PATH_SAME_WITH_MINIPROGRAM:"project.config.json 中 pluginRoot 指定的小程序本地开发插件目录 %s,与小程序目录 %s 相同,请修改为不同目录",FILE_NOT_FOUND:"未找到 %s 文件,或者文件读取失败",JSON_PARSE_ERROR:"%s 文件解析错误",ENTRANCE_NOT_FOUND:"未找到入口页面\napp.json 中定义的 pages : %s",JSON_PAGE_FILE_NOT_EXISTS:'未找到 %s 中的定义的 %s "%s" 对应的 %s 文件',SHOULD_NOT_IN:"%s 不应该在 %s 中",JSON_CUSTOM_COMPILE_PATH_NOT_EXISTS_TITLE:"app.json 或自定义编译条件错误",JSON_CUSTOM_COMPILE_PATH_NOT_EXISTS:"app.json 中未定义自定义编译中指定的启动页面 %s",JSON_ENTRY_PAGE_PATH_NOT_FOUND:"未在 %s 中找到 %s 定义的入口页面",JSON_TABBAR_AT_LEAST:'["tabBar"]["list"] 需至少包含 %s 项',JSON_TABBAR_AT_MOST:'["tabBar"]["list"] 不能超过 %s 项',JSON_TABBAR_PATH_EMPTY:'["tabBar"]["list"][%s]["pagePath"] 不能为空',JSON_TABBAR_PATH_SAME_WITH_OTHER:'["tabBar"]["list"][%s]["pagePath"] 和 ["tabBar"]["list"][%s]["pagePath"] 相同',JSON_TABBAR_ICON_MAX_SIZE:'["tabBar"]["list"][%s]["%s"] 大小超过 %skb',JSON_TABBAR_ICON_EXT:'["tabBar"]["list"][%s]["%s"] 文件格式错误,仅支持 %s 格式',JSON_CONTENT_SHOULD_NOT_BE:"%s 不能为 %s",JSON_RESOLVE_ALIAS_ILLEGAL:'resolveAlias 配置中 %s 或 %s 不合法,包含连续的 "//"',JSON_RESOLVE_ALIAS_INCLUDE_STAR:'resolveAlias 配置中 %s 或 %s 需要用 "/*" 结尾',JSON_RESOLVE_ALIAS_SHOULD_NOT_START_WITH:'resolveAlias 配置中 %s 不能以 "./" 开头',JSON_REQUIRED_PRIVATE_INFOS_MUTUALLY_EXCLUSIVE:"requiredPrivateInfos %s 与 %s 互斥",APP_JSON_SKYLINE_WINDOW_TIPS:"由于 skyline 页面的 navigationStyle 是 custom,app.json 中的 window 配置 navigationStyle、navigationBarTextStyle、navigationBarTitleText、navigationBarBackgroundColor 是不生效的",APP_JSON_SHOULD_SET_LAZYCODELOADING:'%s 中 "renderer" 设置为 "skyline",需在 app.json 添加 "lazyCodeLoading": "requiredComponents"',APP_JSON_SHOULD_SET_RENDEREROPTIONS:'%s 中 "renderer" 设置为 "skyline",需在 app.json 设置 "rendererOptions" 选项中 "skyline" 子选项的内容',JSON_SHOULD_SET_RENDEREROPTIONS:'%s 中 "renderer" 设置为 "skyline",需要同时设置 rendererOptions 选项以及 skyline 配置。\n详见文档:https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/skyline/wxss.html#%E5%BC%80%E5%90%AF%E9%BB%98%E8%AE%A4Block%E5%B8%83%E5%B1%80',JSON_SHOULD_SET_RENDEREROPTIONS_SKYLINE:'%s 中 "renderer" 设置为 "skyline",需要同时设置 rendererOptions 字段中 skyline 配置。\n详见文档:https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/skyline/wxss.html#%E5%BC%80%E5%90%AF%E9%BB%98%E8%AE%A4Block%E5%B8%83%E5%B1%80',JSON_SHOULD_SET_COMPONENTFRAMEWORK_SKYLINE:'%s 中 "renderer" 设置为 "skyline",需要同时设置 componentFramework 字段为 "glass-easel" 。\n详见文档:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/glass-easel/migration.html',PAGE_JSON_SHOULD_SET_DISABLESCROLL_TRUE:'根据页面或 app.json 的配置,%s 页面 "renderer" 为 "skyline",页面配置 "disableScroll" 需设置为 true',PAGE_JSON_SHOULD_SET_NAVIGATIONSTYLE_CUSTOM:'根据页面或 app.json 的配置,%s 页面 "renderer" 为 "skyline",页面配置 "navigationStyle" 需设置为 "custom"',CONTENT_EXIST:"%s 已经存在",JSON_CONTENT_EXISTED:"%s 已经存在",JSON_CONTENT_NOT_FOUND:"%s 不存在",LACK_OF_FILE:"缺少文件 %s",JSON_PAGES_REPEAT:"%s 在 %s 中重复",JSON_CONTENT_REPEAT:"%s 不能同时在 %s 中声明",EXT_JSON_INVALID:'%s 不是 3rdMiniProgramAppid, ext.json 无法生效;查看文档: "%s"',GAME_EXT_JSON_INVALID:'%s 不是 3rdMiniGameAppid, ext.json 无法生效;"%s"',EXT_APPID_SHOULD_NOT_BE_EMPTY:"extAppid 不能为空",FILE_NOT_UTF8:"%s 文件不是 UTF-8 格式",INVALID:"无效的 %s",DIRECTORY:"目录",EXCEED_LIMIT:"%s 超过限制 %s",PLEASE_CHOOSE_PLUGIN_MODE:"如果正在开发插件,请选择插件模式",TRIPLE_NUMBER_DOT:"数字.数字.数字,每段数字不超过 3 位",PAGE_PATH:"页面路径",PLUGINS_SAME_ALIAS:"%s 和 %s 的别名相同",SAME_ITEM:'%s 和 %s 的 "%s" 相同',ALREADY_EXISTS:"已存在",SAME_KEY_PAGE_PUBLICCOMPONENTS:'["pages"] 与 ["publicComponents"] 不能存在相同的 key: %s',GAME_DEV_PLUGIN_SHOULD_NOT_USE_LOCAL_PATH:"开发版插件 %s 不能使用 %s 指定本地路径",GAME_PLUGIN_SIGNATURE_MD5_NOT_MATCH_CONTENT:'插件文件 "%s" 的 MD5: "%s" 与其 signature.json 所给定的值: "%s" 不匹配, 因此编译过程已经中断。\n这表示此文件的内容可能已经被修改。\n恢复此文件的原始内容可能可以解决此问题并移除此警告。\n\n要了解更多,可以参考文档。\n',FILE:"文件",PROCESSING:"处理中: %s",DONE:"完成: %s",UPLOAD:"上传",SUCCESS:"成功",PROJECT_TYPE_ERROR:"project.type 是 %s, 但 appid(%s) 是 %s",MINI_PROGRAM:"小程序",MINI_GAME:"小游戏",NOT_ALLOWED_REQUIRE_VAR:"不允许require变量",NOT_ALLOWED_REQUIRE_ASSIGN:"不允许将require函数赋值给其他变量",NOT_FOUND_NPM_ENTRY:"未找到npm包入口文件",NOT_FOUND_NODE_MODULES:"没有找到可以构建的 NPM 包,请确认需要参与构建的 npm 都在 `miniprogramRoot` 目录内,或配置 project.config.json 的 packNpmManually 和 packNpmRelationList 进行构建",JSON_ENTRANCE_DECLARE_PATH_ERR:'["entranceDeclare"]["locationMessage"]["path"] "%s" 需在 pages 数组或分包 pages 数组中',JSON_ENTRANCE_DECLARE_PATH_EMPTY:'["entranceDeclare"]["locationMessage"]["path"] 不能为空',COULD_NOT_USE_CODE_PROTECT:"无法使用代码保护功能",SUMMER_COMPILING_MODULE:"编译 %s",SUMMER_COMPILE_JSON:"编译 JSON 文件",SUMMER_OPTIMIZE_CODE:"优化代码",SUMMER_PACK_FILES:"打包资源文件",SUMMER_COMPRESS_PACK:"压缩代码包",SUMMER_SEAL_PACK:"封装代码包",SUMMER_APPEND_BABEL_HELPERS:"追加 %s helper 文件",SUMMER_COMPILE_PAGE_JSON:"编译 %s 个页面json文件",SUMMER_COMPILE_PLUGIN_PAGE_JSON:"编译插件 %s 个页面json文件",SUMMER_COMPILE:"编译 %s",SUMMER_COMPILE_MINIPROGRAM:"编译打包小程序",SUMMER_COMPILE_MINIGAME:"编译打包小游戏",SUMMER_COMPILE_PLUGIN:"编译打包插件",FILE_EXT_FORMAT_ERROR:"%s 文件格式错误,仅支持 %s 格式",THEME_JSON_VALUE_SHOULD_BE:"%s 作为 %s 的值,需要为 %s",JSON_VARIABLE_VALUE_NOT_FOUND:"%s 定义的变量未在 %s 中找到对应的值",THEME_JSON_SHOULD_EXIST:"%s 使用了变量 %s,需要使用 %s 来指定 theme.json 的路径",PARSEERR_ENTRANCE_PAGE_ERROR:"未找到入口页面\napp.json 中定义的 pages : %s",PARSEERR_ENTRANCE_FILE_ERROR:"未找到入口 %s 文件,或者文件读取失败,请检查后重新编译。",COMPILE_WXML_ERROR_CONSOLE:"编译 .wxml 文件错误,错误信息如上,可在控制台查看更详细信息",COMPILE_WXSS_ERROR_CONSOLE:"编译 .wxss 文件错误,错误信息如上,可在控制台查看更详细信息",RELATED_NODE_MODULES_NOT_FOUND:"%s 对应的 node_modules 不存在,请在 %s 执行 `npm install`",PACKAGE_JSON_PATH_IN_VALID:'packageJsonPath 需以 `package.json` 结尾, "%s" 是不合法的',ACCOUNT_CARD_PACKAPGE_IN_VALID:'没有找到以 ["AccountCardPackage"]["root"] 的值作为路径定义的独立分包,请检查 ["subPackages"] 配置并进行修改。'},formatConfig={};for(const[_,E]of Object.entries(config))formatConfig[_]=new fomatable_string_1.FormatableString(E);exports.default=formatConfig;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const fomatable_string_1=require("./fomatable_string"),config={GENERATE_LOCAL_SIGNATURE_FAIL:"生成本地签名失败。通常是key文件编码或者内容有误。错误详情: %s",PARAM_ERROR:'方法:"%s" 缺少参数:"%s"',SHOULD_NOT_BE_EMPTY:"%s 不能为空",JSON_CONTENT_SHOULD_BE:"%s 字段需为 %s",SHOULD_AT_LEAST_ONE_ITEM:"%s 需至少存在一项",SHOULD_MATCH:"%s 需与 %s 匹配",SHOULD_EQUAL:"%s 需等于 %s",EXT_SHOULD_BE_ERROR:'%s 的拓展名需为 "%s"',OR:"或",CORRESPONDING_FILE_NOT_FOUND:"未找到 %s 对应的 %s 文件",JSON_SHOULD_NOT_START_WITH:"%s 不应该以 '%s' 开头",JSON_SHOULD_NOT_CONTAIN:"%s 不应该包含 %s",NOT_FOUND:"%s 未找到",COMPONENT_NOT_FOUND:"%s,在 %s 路径下未找到组件",NOT_FOUND_IN_ROOT_DIR:"在项目根目录未找到 %s ",MINIPROGRAM_APP_JSON_NOT_FOUND:"根据 project.config.json 中 miniprogramRoot 指定的小程序目录 %s,在该目录下未找到 %s。\n如果你不理解 miniprogramRoot 字段的含义,请在 project.config.json 中将 miniprogramRoot 设为空字符串。\n详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",PLUGIN_JSON_NOT_FOUND:"根据 project.config.json 中 pluginRoot 指定的小程序本地开发插件目录 %s,%s 未找到",PLUGIN_PATH_SAME_WITH_MINIPROGRAM:"project.config.json 中 pluginRoot 指定的小程序本地开发插件目录 %s,与小程序目录 %s 相同,请修改为不同目录",FILE_NOT_FOUND:"未找到 %s 文件,或者文件读取失败",JSON_PARSE_ERROR:"%s 文件解析错误",ENTRANCE_NOT_FOUND:"未找到入口页面\napp.json 中定义的 pages : %s",JSON_PAGE_FILE_NOT_EXISTS:'未找到 %s 中的定义的 %s "%s" 对应的 %s 文件',SHOULD_NOT_IN:"%s 不应该在 %s 中",JSON_CUSTOM_COMPILE_PATH_NOT_EXISTS_TITLE:"app.json 或自定义编译条件错误",JSON_CUSTOM_COMPILE_PATH_NOT_EXISTS:"app.json 中未定义自定义编译中指定的启动页面 %s",JSON_ENTRY_PAGE_PATH_NOT_FOUND:"未在 %s 中找到 %s 定义的入口页面",JSON_TABBAR_AT_LEAST:'["tabBar"]["list"] 需至少包含 %s 项',JSON_TABBAR_AT_MOST:'["tabBar"]["list"] 不能超过 %s 项',JSON_TABBAR_PATH_EMPTY:'["tabBar"]["list"][%s]["pagePath"] 不能为空',JSON_TABBAR_PATH_SAME_WITH_OTHER:'["tabBar"]["list"][%s]["pagePath"] 和 ["tabBar"]["list"][%s]["pagePath"] 相同',JSON_TABBAR_ICON_MAX_SIZE:'["tabBar"]["list"][%s]["%s"] 大小超过 %skb',JSON_TABBAR_ICON_EXT:'["tabBar"]["list"][%s]["%s"] 文件格式错误,仅支持 %s 格式',JSON_CONTENT_SHOULD_NOT_BE:"%s 不能为 %s",JSON_RESOLVE_ALIAS_ILLEGAL:'resolveAlias 配置中 %s 或 %s 不合法,包含连续的 "//"',JSON_RESOLVE_ALIAS_INCLUDE_STAR:'resolveAlias 配置中 %s 或 %s 需要用 "/*" 结尾',JSON_RESOLVE_ALIAS_SHOULD_NOT_START_WITH:'resolveAlias 配置中 %s 不能以 "./" 开头',JSON_REQUIRED_PRIVATE_INFOS_MUTUALLY_EXCLUSIVE:"requiredPrivateInfos %s 与 %s 互斥",APP_JSON_SKYLINE_WINDOW_TIPS:"由于 skyline 页面的 navigationStyle 是 custom,app.json 中的 window 配置 navigationStyle、navigationBarTextStyle、navigationBarTitleText、navigationBarBackgroundColor 是不生效的",APP_JSON_SHOULD_SET_LAZYCODELOADING:'%s 中 "renderer" 设置为 "skyline",需在 app.json 添加 "lazyCodeLoading": "requiredComponents"',APP_JSON_SHOULD_SET_RENDEREROPTIONS:'%s 中 "renderer" 设置为 "skyline",需在 app.json 设置 "rendererOptions" 选项中 "skyline" 子选项的内容',JSON_SHOULD_SET_RENDEREROPTIONS:'%s 中 "renderer" 设置为 "skyline",需要同时设置 rendererOptions 选项以及 skyline 配置。\n详见文档:https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/skyline/wxss.html#%E5%BC%80%E5%90%AF%E9%BB%98%E8%AE%A4Block%E5%B8%83%E5%B1%80',JSON_SHOULD_SET_RENDEREROPTIONS_SKYLINE:'%s 中 "renderer" 设置为 "skyline",需要同时设置 rendererOptions 字段中 skyline 配置。\n详见文档:https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/skyline/wxss.html#%E5%BC%80%E5%90%AF%E9%BB%98%E8%AE%A4Block%E5%B8%83%E5%B1%80',JSON_SHOULD_SET_COMPONENTFRAMEWORK_SKYLINE:'%s 中 "renderer" 设置为 "skyline",需要同时设置 componentFramework 字段为 "glass-easel" 。\n详见文档:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/glass-easel/migration.html',PAGE_JSON_SHOULD_SET_DISABLESCROLL_TRUE:'根据页面或 app.json 的配置,%s 页面 "renderer" 为 "skyline",页面配置 "disableScroll" 需设置为 true',PAGE_JSON_SHOULD_SET_NAVIGATIONSTYLE_CUSTOM:'根据页面或 app.json 的配置,%s 页面 "renderer" 为 "skyline",页面配置 "navigationStyle" 需设置为 "custom"',CONTENT_EXIST:"%s 已经存在",JSON_CONTENT_EXISTED:"%s 已经存在",JSON_CONTENT_NOT_FOUND:"%s 不存在",LACK_OF_FILE:"缺少文件 %s",JSON_PAGES_REPEAT:"%s 在 %s 中重复",JSON_CONTENT_REPEAT:"%s 不能同时在 %s 中声明",EXT_JSON_INVALID:'%s 不是 3rdMiniProgramAppid, ext.json 无法生效;查看文档: "%s"',GAME_EXT_JSON_INVALID:'%s 不是 3rdMiniGameAppid, ext.json 无法生效;"%s"',EXT_APPID_SHOULD_NOT_BE_EMPTY:"extAppid 不能为空",FILE_NOT_UTF8:"%s 文件不是 UTF-8 格式",INVALID:"无效的 %s",DIRECTORY:"目录",EXCEED_LIMIT:"%s 超过限制 %s",PLEASE_CHOOSE_PLUGIN_MODE:"如果正在开发插件,请选择插件模式",TRIPLE_NUMBER_DOT:"数字.数字.数字,每段数字不超过 3 位",PAGE_PATH:"页面路径",PLUGINS_SAME_ALIAS:"%s 和 %s 的别名相同",SAME_ITEM:'%s 和 %s 的 "%s" 相同',ALREADY_EXISTS:"已存在",SAME_KEY_PAGE_PUBLICCOMPONENTS:'["pages"] 与 ["publicComponents"] 不能存在相同的 key: %s',GAME_DEV_PLUGIN_SHOULD_NOT_USE_LOCAL_PATH:"开发版插件 %s 不能使用 %s 指定本地路径",GAME_PLUGIN_SIGNATURE_MD5_NOT_MATCH_CONTENT:'插件文件 "%s" 的 MD5: "%s" 与其 signature.json 所给定的值: "%s" 不匹配, 因此编译过程已经中断。\n这表示此文件的内容可能已经被修改。\n恢复此文件的原始内容可能可以解决此问题并移除此警告。\n\n要了解更多,可以参考文档。\n',FILE:"文件",PROCESSING:"处理中: %s",DONE:"完成: %s",UPLOAD:"上传",SUCCESS:"成功",PROJECT_TYPE_ERROR:"project.type 是 %s, 但 appid(%s) 是 %s",MINI_PROGRAM:"小程序",MINI_GAME:"小游戏",NOT_ALLOWED_REQUIRE_VAR:"不允许require变量",NOT_ALLOWED_REQUIRE_ASSIGN:"不允许将require函数赋值给其他变量",NOT_FOUND_NPM_ENTRY:"未找到npm包入口文件",NOT_FOUND_NODE_MODULES:"没有找到可以构建的 NPM 包,请确认需要参与构建的 npm 都在 `miniprogramRoot` 目录内,或配置 project.config.json 的 packNpmManually 和 packNpmRelationList 进行构建",JSON_ENTRANCE_DECLARE_PATH_ERR:'["entranceDeclare"]["locationMessage"]["path"] "%s" 需在 pages 数组或分包 pages 数组中',JSON_ENTRANCE_DECLARE_PATH_EMPTY:'["entranceDeclare"]["locationMessage"]["path"] 不能为空',COULD_NOT_USE_CODE_PROTECT:"无法使用代码保护功能",SUMMER_COMPILING_MODULE:"编译 %s",SUMMER_COMPILE_JSON:"编译 JSON 文件",SUMMER_OPTIMIZE_CODE:"优化代码",SUMMER_PACK_FILES:"打包资源文件",SUMMER_COMPRESS_PACK:"压缩代码包",SUMMER_SEAL_PACK:"封装代码包",SUMMER_APPEND_BABEL_HELPERS:"追加 %s helper 文件",SUMMER_COMPILE_PAGE_JSON:"编译 %s 个页面json文件",SUMMER_COMPILE_PLUGIN_PAGE_JSON:"编译插件 %s 个页面json文件",SUMMER_COMPILE:"编译 %s",SUMMER_COMPILE_MINIPROGRAM:"编译打包小程序",SUMMER_COMPILE_MINIGAME:"编译打包小游戏",SUMMER_COMPILE_PLUGIN:"编译打包插件",FILE_EXT_FORMAT_ERROR:"%s 文件格式错误,仅支持 %s 格式",THEME_JSON_VALUE_SHOULD_BE:"%s 作为 %s 的值,需要为 %s",JSON_VARIABLE_VALUE_NOT_FOUND:"%s 定义的变量未在 %s 中找到对应的值",THEME_JSON_SHOULD_EXIST:"%s 使用了变量 %s,需要使用 %s 来指定 theme.json 的路径",PARSEERR_ENTRANCE_PAGE_ERROR:"未找到入口页面\napp.json 中定义的 pages : %s",PARSEERR_ENTRANCE_FILE_ERROR:"未找到入口 %s 文件,或者文件读取失败,请检查后重新编译。",COMPILE_WXML_ERROR_CONSOLE:"编译 .wxml 文件错误,错误信息如上,可在控制台查看更详细信息",COMPILE_WXSS_ERROR_CONSOLE:"编译 .wxss 文件错误,错误信息如上,可在控制台查看更详细信息",RELATED_NODE_MODULES_NOT_FOUND:"%s 对应的 node_modules 不存在,请在 %s 执行 `npm install`",PACKAGE_JSON_PATH_IN_VALID:'packageJsonPath 需以 `package.json` 结尾, "%s" 是不合法的',ACCOUNT_CARD_PACKAPGE_IN_VALID:'没有找到以 ["AccountCardPackage"]["root"] 的值作为路径定义的独立分包,请检查 ["subPackages"] 配置并进行修改。',UNUSE_FILE_LIST:"无依赖文件列表:%s",PACK_OPTIONS_IGNORE_LIST:"被 project.config.json packOptions.ignore 忽略的文件列表:%s",PARTIAL_COMPILE_IGNORE_LIST:"被局部编译所忽略的文件列表:%s",UNKNOWN_REASON_INGORE_LIST:"被 %s 忽略的文件列表: %s",LARGEFILE_WARNING:"%s 文件超过最大大小: %sKB,编译进程不处理"},formatConfig={};for(const[_,E]of Object.entries(config))formatConfig[_]=new fomatable_string_1.FormatableString(E);exports.default=formatConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.signAndInstallOrExport=exports.doCertificateSignAndInstallOrExport=exports.doAppleIdSignAndInstallOrExport=exports.clearCache=exports.getIOSDevices=exports.miniappSinTypes=exports.DEFAULT_BUNDLE_ID=void 0;const tslib_1=require("tslib"),child_process=tslib_1.__importStar(require("child_process")),singletontask_1=require("./singletontask"),zip_1=require("./zip"),cp_1=require("./cp"),tools_1=require("./tools"),progressRecorder_1=require("./progressRecorder"),download_1=require("./download"),glob_1=tslib_1.__importDefault(require("glob")),miniappJson_1=require("./miniappJson"),generateIpa_1=require("./generateIpa"),path=require("path"),os=require("os"),fse=require("fs-extra"),querystring=require("querystring");exports.DEFAULT_BUNDLE_ID="com.tencent.devtoolssaaademo.db";const isMac="darwin"===process.platform,remoteUrlRoot="http://dldir1.qq.com/WechatWebDev/donut/miniapp-builder/";exports.miniappSinTypes={appleId:{type:"appleId"},certificate:{type:"certificate"}};const majorVersion="
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.signAndInstallOrExport=exports.doCertificateSignAndInstallOrExport=exports.doAppleIdSignAndInstallOrExport=exports.clearCache=exports.getIOSDevices=exports.miniappSinTypes=exports.DEFAULT_BUNDLE_ID=void 0;const tslib_1=require("tslib"),child_process=tslib_1.__importStar(require("child_process")),singletontask_1=require("./singletontask"),zip_1=require("./zip"),cp_1=require("./cp"),tools_1=require("./tools"),progressRecorder_1=require("./progressRecorder"),download_1=require("./download"),glob_1=tslib_1.__importDefault(require("glob")),miniappJson_1=require("./miniappJson"),generateIpa_1=require("./generateIpa"),path=require("path"),os=require("os"),fse=require("fs-extra"),querystring=require("querystring");exports.DEFAULT_BUNDLE_ID="com.tencent.devtoolssaaademo.db";const isMac="darwin"===process.platform,remoteUrlRoot="http://dldir1.qq.com/WechatWebDev/donut/miniapp-builder/";exports.miniappSinTypes={appleId:{type:"appleId"},certificate:{type:"certificate"}};const majorVersion="1",signAndInstallTask={};async function getMiniAppBuilderVersion(e="cli"){try{"dev"!==e&&"cli"!==e&&(e="release-1");const i=`${remoteUrlRoot}versionMap/${e}.json`,n=path.join(os.tmpdir(),"miniapp-builder-version.json");fse.existsSync(n)&&fse.removeSync(n),await(0,download_1.downloadLargeFile)(i,n);const t=fse.readJSONSync(n);return isMac?t.mac:t.win}catch(e){throw new Error("getMiniAppBuilderVersion fail: "+e.message)}}async function downloadMiniAppBuilder(e,i,n){const t=`${remoteUrlRoot}${isMac?"mac":"win"}/miniapp-builder-${e}.zip`,s=path.join(os.tmpdir(),"miniapp-builder.zip");fse.existsSync(s)&&fse.removeSync(s),null==n||n.progress("Downloading the miniapp-builder..."),await(0,download_1.downloadLargeFile)(t,s),await(0,zip_1.unzip)(s,i)}async function getMiniAppBuilder(e){const{miniappDirPath:i=path.join(__dirname,"../vendor"),devtoolsVersion:n="cli",recorder:t}=e,s=await getMiniAppBuilderVersion(n);let r="";const a=path.join(i,"miniapp-builder");if(r="win32"===process.platform?(0,tools_1.unifyPath)(path.join(a,s,"MiniappBuilder.exe")):(0,tools_1.unifyPath)(path.join(a,s,"MiniAppBuilder")),!fse.existsSync(r)){fse.ensureDirSync(a),fse.emptyDirSync(a);const e=path.dirname(r);fse.ensureDirSync(e),await downloadMiniAppBuilder(s,e,t);glob_1.default.sync("*",{nodir:!0,cwd:e}).forEach(i=>{fse.chmodSync(path.join(e,i),"777")})}return{builderPath:r,exe:path.basename(r),cwd:path.dirname(r)}}async function getIOSDevices(e){const{builderPath:i}=await getMiniAppBuilder(e),n=child_process.execSync(`"${i}" --action getDevices`,{}).toString().split("\n"),t=[];return n.forEach(e=>{if(e.trim()){const i=e.split("|");t.push({type:"device",name:(i[1]||"").trim(),version:(i[2]||"").trim(),udid:(i[3]||"").trim()})}}),t}async function clearCache(e){const{builderPath:i}=await getMiniAppBuilder(e),n=(0,miniappJson_1.getTargetMiniprogramArg)(e.projectPath,"appid");child_process.execSync(`"${i}" --appid ${n} --action clear --type ${e.type}`,{})}async function doAppleIdSignAndInstallOrExport(e,i){const{recorder:n}=i,t=genInterceptRecorder(n),{exe:s,cwd:r,builderPath:a}=await getMiniAppBuilder(i),p=(0,tools_1.unifyPath)(e.ipaPath),o=["--appid",(0,miniappJson_1.getTargetMiniprogramArg)(e.projectPath,"appid"),"--action","sign","--ipa",p,"--type","appleId"];if(e.appleId&&o.push("-ai",e.appleId),e.password&&o.push("-p",e.password),e.entitlements&&o.push("--entitlements",querystring.stringify(e.entitlements)),e.install&&(isMac?o.push("--install"):o.push("--install","true")),e.deviceId&&o.push("--deviceId",e.deviceId),e.output&&o.push("--output",e.output),e.bundleId){const i=e.bundleId===exports.DEFAULT_BUNDLE_ID?"auto":e.bundleId;o.push("--bundleId",i)}try{return signAndInstallTask[p]||(signAndInstallTask[p]=isMac?new singletontask_1.SingletonTask(cp_1.spawnSync.bind(null,a,o,{},t)):new singletontask_1.SingletonTask(cp_1.spawnSync.bind(null,s,o,{cwd:r},t))),await signAndInstallTask[p].getResult(!0),{success:!0}}catch(e){return{success:!1,errMsg:e.message}}finally{delete signAndInstallTask[p]}}async function doCertificateSignAndInstallOrExport(e,i){const{recorder:n}=i,{exe:t,cwd:s,builderPath:r}=await getMiniAppBuilder(i),a=(0,miniappJson_1.tryGetIOSMiniappJson)(e.projectPath),p=(0,miniappJson_1.iOSMiniAppJsonIsUsingTpush)(a),o=e.miniappCacheDirPath||"",l=(0,tools_1.unifyPath)(e.ipaPath),c=["--appid",(0,miniappJson_1.getTargetMiniprogramArg)(e.projectPath,"appid"),"--action","sign","--miniappCacheDir",o,"--ipa",l,"--type","certificate"];e.entitlements&&c.push("--entitlements",querystring.stringify(e.entitlements)),e.install&&(isMac?c.push("--install"):c.push("--install","true")),p&&(isMac?c.push("--extensionProfilePath"):c.push("--extension","true")),e.deviceId&&c.push("--deviceId",e.deviceId),e.output&&c.push("--output",e.output);try{return signAndInstallTask[l]||(signAndInstallTask[l]=isMac?new singletontask_1.SingletonTask(cp_1.spawnSync.bind(null,r,c,{},n)):new singletontask_1.SingletonTask(cp_1.spawnSync.bind(null,t,c,{cwd:s},n))),await signAndInstallTask[l].getResult(!0),{success:!0}}catch(e){return{success:!1,errMsg:e.message}}finally{delete signAndInstallTask[l]}}async function signAndInstallOrExport(e,i,n,t,s,r){const{recorder:a}=r,{install:p,deviceId:o,output:l,entitlements:c,bundleId:d}=s,u=await(0,generateIpa_1.generateIpa)(i,a);try{null==a||a.progress("signing the app...");const{signType:i}=t;let s=null;if(s=i===exports.miniappSinTypes.appleId.type?await doAppleIdSignAndInstallOrExport({bundleId:d,projectPath:e,ipaPath:u,entitlements:c,install:p,output:l,deviceId:o},r):await doCertificateSignAndInstallOrExport({projectPath:e,ipaPath:u,miniappCacheDirPath:n,entitlements:c,install:p,output:l,deviceId:o},r),!s.success)throw new Error("Sign the app fail:"+s.errMsg)}finally{fse.existsSync(u)&&fse.removeSync(u)}}function genInterceptRecorder(e){if(e){const i=new progressRecorder_1.Recorder((i,n,t)=>{(t.indexOf('["MiniAppBuilder could not find this device."]')>-1||t.indexOf("no connected device")>-1)&&e.message("fail","无法找到手机设备,请检查手机是否正确链接电脑(can not find device)"),e.message(n,t)});return i.run("!inner",()=>{}),i}}exports.getIOSDevices=getIOSDevices,exports.clearCache=clearCache,exports.doAppleIdSignAndInstallOrExport=doAppleIdSignAndInstallOrExport,exports.doCertificateSignAndInstallOrExport=doCertificateSignAndInstallOrExport,exports.signAndInstallOrExport=signAndInstallOrExport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getTargetMiniprogramArg=exports.getMiniprogramRoot=exports.getRawAppJSON=exports.iOSAppJsonIsUsingIPadResizable=exports.iOSMiniAppJsonIsUsingGDT=exports.iOSMiniAppJsonIsUsingTpush=exports.writeMiniAppJson=exports.isNewMiniAppProject=exports.isMiniAppProject=exports.tryGetPluginMiniappJson=exports.tryGetIOSMiniappJson=exports.tryGetAndroidMiniappJson=exports.getMiniappJson=exports.getRawMiniappJson=exports.identityServiceConfigToMiniAppJSON=exports.PLATFORM=exports.miniAppPlatformMap=void 0;const tools_1=require("./tools"),each=require("licia/each"),safeSet=require("licia/safeSet"),path=require("path"),fse=require("fs-extra"),_=require("lodash");var PLATFORM;function identityServiceConfigToMiniAppJSON(i,n={}){return n.identityServiceConfig={authorizeMiniprogramType:1,miniprogramLoginPath:i},n}function getRawMiniappJson(i){var n,o,t,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.iosPrivacyDescObj=exports.getTargetMiniprogramArg=exports.getMiniprogramRoot=exports.getRawAppJSON=exports.iOSAppJsonIsUsingIPadResizable=exports.iOSMiniAppJsonIsUsingGDT=exports.iOSMiniAppJsonIsUsingTpush=exports.writeMiniAppJson=exports.isNewMiniAppProject=exports.isMiniAppProject=exports.tryGetPluginMiniappJson=exports.tryGetIOSMiniappJson=exports.tryGetAndroidMiniappJson=exports.getMiniappJson=exports.getRawMiniappJson=exports.identityServiceConfigToMiniAppJSON=exports.PLATFORM=exports.miniAppPlatformMap=void 0;const tools_1=require("./tools"),each=require("licia/each"),safeSet=require("licia/safeSet"),path=require("path"),fse=require("fs-extra"),_=require("lodash");var PLATFORM;function identityServiceConfigToMiniAppJSON(i,n={}){return n.identityServiceConfig={authorizeMiniprogramType:1,miniprogramLoginPath:i},n}function getRawMiniappJson(i){var n,o,e,t,p,s;i=(0,tools_1.unifyPath)(i);const r=path.posix.join(i,"project.miniapp.json");if(!fse.existsSync(r))return{};let a={};try{a=fse.readJsonSync(r)}catch(i){console.error(i)}return a.miniVersion&&"v1"!==a.miniVersion||((null===(n=a["mini-android"])||void 0===n?void 0:n.projectPath)&&!path.isAbsolute(null===(o=a["mini-android"])||void 0===o?void 0:o.projectPath)&&(a["mini-android"].projectPath=path.posix.join(i,null===(e=a["mini-android"])||void 0===e?void 0:e.projectPath)),(null===(t=a["mini-ios"])||void 0===t?void 0:t.projectPath)&&!path.isAbsolute(null===(p=a["mini-ios"])||void 0===p?void 0:p.projectPath)&&(a["mini-ios"].projectPath=path.posix.join(i,null===(s=a["mini-ios"])||void 0===s?void 0:s.projectPath))),a}function getMiniappJson(i,n="mini-weixin"){const o=Object.values(exports.miniAppPlatformMap),e=getRawMiniappJson(i),t=_.omit(e,o);return _.merge(t,e[n]||("mini-weixin"===n?e["mini-wechat"]:{}))}function tryGetAndroidMiniappJson(i){let n={};try{n=getMiniappJson(i,PLATFORM.ANDROID)}catch(i){}return n}function tryGetIOSMiniappJson(i){let n={};try{n=getMiniappJson(i,PLATFORM.IOS)}catch(i){}return n}function tryGetPluginMiniappJson(i){let n={};try{n=getMiniappJson(i,PLATFORM.PLUGIN)}catch(i){}return n}function isMiniAppProject(i){const n=path.posix.join(i,"project.miniapp.json");return"multiPlatform"===fse.readJsonSync(n).projectArchitecture}function isNewMiniAppProject(i){const n=getRawMiniappJson(i);return isMiniAppProject(i)&&"v2"===n.miniVersion}function writeMiniAppJson(i,n){const o=path.posix.join(i,"project.miniapp.json");let e={};try{e=fse.readJsonSync(o)}catch(i){return}each(n,(i,n)=>{safeSet(e,n,i)}),fse.writeJSONSync(o,e,{spaces:2})}function iOSMiniAppJsonIsUsingTpush(i){const n=i.tpush&&!0===i.tpush.useExtendedLib_WeAppTPNS&&"number"==typeof i.tpush.accessID&&"string"==typeof i.tpush.accessKey&&"string"==typeof i.tpush.serviceBundleId;if(n&&(0,tools_1.compareVersion)(i.sdkVersion,"1.0.7")<=0)throw new Error(`can not use TPNS(消息推送) extendsdk in sdk version ${i.sdkVersion}, TPNS is supported in 1.0.8.`);return n}function iOSMiniAppJsonIsUsingGDT(i){const n=i.gdt&&!0===i.gdt.useExtendedLib_WeAppGDT&&"string"==typeof i.gdt.appid&&"string"==typeof i.gdt.splashAd_placementId;if(n&&(0,tools_1.compareVersion)(i.sdkVersion,"1.0.19")<=0)throw new Error(`can not use GDT(广告) extendsdk in sdk version ${i.sdkVersion}, GDT is supported in 1.0.20.`);return n}function iOSAppJsonIsUsingIPadResizable(i){return!0===getRawAppJSON(i).resizable}function getRawAppJSON(i){let n,o;const e=getMiniprogramRoot(i);n=e?path.posix.join(i,e,"app.json"):path.posix.join(i,"app.json");try{o=fse.readJsonSync(n)}catch(i){throw console.error(i),i}return o}function getMiniprogramRoot(i){const n=(0,tools_1.normalizePath)(path.posix.join(i,"project.config.json"));let o;try{o=fse.readJsonSync(n)}catch(i){throw console.error(i),i}return o.miniprogramRoot?o.miniprogramRoot:""}function getTargetMiniprogramArg(i,n){const o=(0,tools_1.normalizePath)(path.posix.join(i,"project.config.json"));let e;try{e=fse.readJsonSync(o)}catch(i){throw console.error(i),i}return e[n]||""}exports.miniAppPlatformMap={"mini-android":"mini-android","mini-ios":"mini-ios","mini-weixin":"mini-weixin"},function(i){i.ANDROID="mini-android",i.IOS="mini-ios",i.PLUGIN="mini-plugin"}(PLATFORM=exports.PLATFORM||(exports.PLATFORM={})),exports.identityServiceConfigToMiniAppJSON=identityServiceConfigToMiniAppJSON,exports.getRawMiniappJson=getRawMiniappJson,exports.getMiniappJson=getMiniappJson,exports.tryGetAndroidMiniappJson=tryGetAndroidMiniappJson,exports.tryGetIOSMiniappJson=tryGetIOSMiniappJson,exports.tryGetPluginMiniappJson=tryGetPluginMiniappJson,exports.isMiniAppProject=isMiniAppProject,exports.isNewMiniAppProject=isNewMiniAppProject,exports.writeMiniAppJson=writeMiniAppJson,exports.iOSMiniAppJsonIsUsingTpush=iOSMiniAppJsonIsUsingTpush,exports.iOSMiniAppJsonIsUsingGDT=iOSMiniAppJsonIsUsingGDT,exports.iOSAppJsonIsUsingIPadResizable=iOSAppJsonIsUsingIPadResizable,exports.getRawAppJSON=getRawAppJSON,exports.getMiniprogramRoot=getMiniprogramRoot,exports.getTargetMiniprogramArg=getTargetMiniprogramArg,exports.iosPrivacyDescObj={NSPhotoLibraryUsageDescription:"当前应用程序需要访问用户的相册,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NSCameraUsageDescription:"当前应用程序需要访问用户的相机,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NSMicrophoneUsageDescription:"当前应用程序需要访问用户的麦克风,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NSLocationWhenInUseUsageDescription:"当前应用程序需要在使用时访问用户的位置,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NSLocationAlwaysUsageDescription:"当前应用程序需要始终访问用户的位置,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NSLocationAlwaysAndWhenInUseUsageDescription:"当前应用程序需要始终和在使用时访问用户的位置,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NSContactsUsageDescription:"当前应用程序需要访问用户的联系人,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NSCalendarsUsageDescription:"当前应用程序需要访问用户的日历,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NSRemindersUsageDescription:"当前应用程序需要访问用户的提醒事项,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NSHealthShareUsageDescription:"当前应用程序需要共享用户的健康数据,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NSHealthUpdateUsageDescription:"当前应用程序需要更新用户的健康数据,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NSBluetoothPeripheralUsageDescription:"当前应用程序需要访问用户的蓝牙,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NSBluetoothAlwaysUsageDescription:"当前应用程序需要始终访问用户的蓝牙,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NSMotionUsageDescription:"",NSHomeKitUsageDescription:"",NSSiriUsageDescription:"",NSSpeechRecognitionUsageDescription:"当前应用程序需要使用语音识别,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NSVideoSubscriberAccountUsageDescription:"",NSAppleMusicUsageDescription:"",NSFaceIDUsageDescription:"",NSNFCReaderUsageDescription:"",NSUserTrackingUsageDescription:"",NSLocalNetworkUsageDescription:"当前应用程序需要访问本地网络,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NSSystemAdministrationUsageDescription:"当前应用程序需要进行系统管理操作,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可」",NFCReaderUsageDescription:"",NSHealthClinicalHealthRecordsShareUsageDescription:"",NSPhotoLibraryAddUsageDescription:"应用程序在请求访问照片库,如需修改描述请前往「project.miniapp.json - 隐私信息访问许可描述」修改,并且关闭「自动使用默认描述补全默认隐私信息访问许可"};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const tslib_1=require("tslib"),filerules_1=tslib_1.__importDefault(require("../utils/filerules"));class PackOptionsHelper{constructor(){this.packOptionIgnores=[],this.packOptionIncludes=[]}updateState(e){var i,s;this.packOptionIgnores=(null===(i=e.packOptions)||void 0===i?void 0:i.ignore)||[],this.packOptionIncludes=(null===(s=e.packOptions)||void 0===s?void 0:s.include)||[]}isUnuserFilesEnable(){return
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const tslib_1=require("tslib"),path=tslib_1.__importStar(require("path")),filerules_1=tslib_1.__importDefault(require("../utils/filerules")),tools_1=require("./tools"),config_1=require("../config/config");class PackOptionsHelper{constructor(){this.packOptionIgnores=[],this.packOptionIncludes=[],this.ignoreUploadUnusedFiles=!1,this.ignoreDevUnusedFiles=!1,this.unusedFiles=new Set,this.extOpts={include:[],ignore:[]}}setExtOpts(e={}){this.extOpts.include=e.include||[],this.extOpts.ignore=e.ignore||[]}updateState(e){var i,s;this.packOptionIgnores=(null===(i=e.packOptions)||void 0===i?void 0:i.ignore)||[],this.packOptionIncludes=(null===(s=e.packOptions)||void 0===s?void 0:s.include)||[],e.type!==config_1.COMPILE_TYPE.miniProgram?(this.ignoreUploadUnusedFiles=!1,this.ignoreDevUnusedFiles=!1):(this.ignoreUploadUnusedFiles=!!e.setting.ignoreUploadUnusedFiles,this.ignoreDevUnusedFiles=!!e.setting.ignoreDevUnusedFiles)}isUnuserFilesEnable(e=!1){return e?!1!==this.ignoreUploadUnusedFiles:!0===this.ignoreDevUnusedFiles||!1!==this.ignoreDevUnusedFiles}filter(e,i=!1){return e.filter(e=>this.isNotIgnored(e,i))}isIgnored(e,i=!1){return this.isIgnoredByRules(e)||this.isIgnoreByUnusedFiles(e,i)}isNotIgnored(e,i=!1){return!this.isIgnored(e,i)}isIgnoredByRules(e,i={}){return!this.isFileIncluded(e,i.include)&&this.isFileIgnored(e,i.ignore)}isFileIgnored(e,i){return i||(i=[...this.packOptionIgnores,...this.extOpts.ignore]),filerules_1.default.isFileIgnored(e,i)}isFileIncluded(e,i){return i||(i=[...this.packOptionIncludes,...this.extOpts.include]),filerules_1.default.isFileIncluded(e,i)}isIgnoreByUnusedFiles(e,i=!1){return!!this.isUnuserFilesEnable(i)&&(!this.isFileIncluded(e)&&this.unusedFiles.has((0,tools_1.sourcePathToTargetPath)(e)))}getUnusedFiles(){return this.unusedFiles}async initUnusedFiles(e,i,s=!1){if(this.updateState(e),this.isUnuserFilesEnable(s))try{await i.analyse();const s=i.fileHelper.getFileList("").filter(e=>(0,tools_1.isCodeFile)(path.posix.extname(e))),t=new Set;i.graph.modules.forEach(e=>{const i=s.find(i=>i===e.path);i&&t.add((0,tools_1.sourcePathToTargetPath)(i))});const n=new Set;s.forEach(i=>{const s=(0,tools_1.sourcePathToTargetPath)(i);t.has(s)||n.add(path.posix.join(e.miniprogramRoot,s))}),this.unusedFiles=n,console.error(this.unusedFiles)}catch(e){console.error("initUnusedFiles error",e)}}}exports.default=new PackOptionsHelper;
|