| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- "use strict";
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() { return m[k]; } };
- }
- Object.defineProperty(o, k2, desc);
- }) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
- }));
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- }) : function(o, v) {
- o["default"] = v;
- });
- var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
- };
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.checkIOSVersionTips = exports.resolveIOSDepFiles = exports.compile = exports.runSwiftDev = exports.runSwiftProd = void 0;
- const fs_extra_1 = __importDefault(require("fs-extra"));
- const path_1 = __importStar(require("path"));
- const utils_1 = require("./utils");
- const shared_1 = require("./shared");
- const stacktrace_1 = require("./stacktrace");
- function parseSwiftPackage(filename) {
- const res = (0, utils_1.resolvePackage)(filename);
- if (!res) {
- return {
- id: '',
- namespace: '',
- };
- }
- const namespace = (0, utils_1.parseSwiftPackageWithPluginId)(res.name, res.is_uni_modules);
- return {
- id: res.id,
- namespace,
- };
- }
- async function runSwiftProd(filename, components, { isPlugin, isX, extApis, }) {
- // 文件有可能是 app-android 里边的,因为编译到 ios 时,为了保证不报错,可能会去读取 android 下的 uts
- if (filename.includes('app-android')) {
- return;
- }
- const inputDir = process.env.UNI_INPUT_DIR;
- const outputDir = process.env.UNI_OUTPUT_DIR;
- const result = await compile(filename, {
- inputDir,
- outputDir,
- sourceMap: true,
- components,
- isX,
- isPlugin,
- extApis,
- });
- if (!result) {
- return;
- }
- if (result.error) {
- throw (0, stacktrace_1.parseUTSSyntaxError)(result.error, inputDir);
- }
- (0, utils_1.genUTSPlatformResource)(filename, {
- inputDir,
- outputDir,
- platform: 'app-ios',
- extname: '.swift',
- components,
- package: parseSwiftPackage(filename).namespace,
- });
- }
- exports.runSwiftProd = runSwiftProd;
- let isEnvReady = true;
- async function runSwiftDev(filename, { components, isX, isPlugin, extApis }) {
- // 文件有可能是 app-android 里边的,因为编译到 ios 时,为了保证不报错,可能会去读取 android 下的 uts
- if (filename.includes('app-android')) {
- return;
- }
- if (!isEnvReady) {
- console.error(`已跳过uts插件[${(0, utils_1.resolvePackage)(filename)?.id}]的编译`);
- return;
- }
- const compilerServer = (0, utils_1.getCompilerServer)('uts-development-ios');
- if (!compilerServer) {
- throw `项目使用了uts插件,正在安装 uts iOS 运行扩展...`;
- }
- if (compilerServer.checkEnv) {
- const { code, msg } = compilerServer.checkEnv();
- if (code) {
- isEnvReady = false;
- console.error(msg);
- return;
- }
- }
- const inputDir = process.env.UNI_INPUT_DIR;
- const outputDir = process.env.UNI_OUTPUT_DIR;
- const result = (await compile(filename, {
- inputDir,
- outputDir,
- sourceMap: true,
- components,
- isX,
- isPlugin,
- extApis,
- }));
- if (!result) {
- return;
- }
- if (result.error) {
- throw (0, stacktrace_1.parseUTSSyntaxError)(result.error, inputDir);
- }
- result.type = 'swift';
- const swiftFile = (0, utils_1.resolveUTSPlatformFile)(filename, {
- inputDir,
- outputDir,
- platform: 'app-ios',
- extname: '.swift',
- components,
- package: '',
- });
- result.changed = [];
- // 开发模式下,需要生成 framework
- if (fs_extra_1.default.existsSync(swiftFile)) {
- let projectPath = inputDir;
- const isCli = isCliProject(projectPath);
- if (isCli) {
- projectPath = path_1.default.resolve(projectPath, '..');
- }
- const { id, is_uni_modules } = (0, utils_1.resolvePackage)(filename);
- const { code, msg } = await compilerServer.compile({
- projectPath,
- isCli,
- type: is_uni_modules ? 1 : 2,
- pluginName: id,
- utsPath: resolveCompilerUTSPath(inputDir, is_uni_modules),
- swiftPath: resolveCompilerSwiftPath(outputDir, is_uni_modules),
- });
- result.code = code;
- result.msg = msg;
- result.changed = [swiftFile];
- }
- return result;
- }
- exports.runSwiftDev = runSwiftDev;
- function resolveCompilerUTSPath(projectPath, is_uni_modules) {
- return path_1.default.resolve(projectPath, is_uni_modules ? 'uni_modules' : 'utssdk');
- }
- function resolveCompilerSwiftPath(outputDir, is_uni_modules) {
- return path_1.default.resolve(outputDir, is_uni_modules ? 'uni_modules' : 'utssdk');
- }
- function isCliProject(projectPath) {
- if (projectPath.endsWith('src')) {
- return true;
- }
- return false;
- }
- async function compile(filename, { inputDir, outputDir, sourceMap, components, isX, isPlugin, extApis, }) {
- const { bundle, UTSTarget } = (0, utils_1.getUTSCompiler)();
- // let time = Date.now()
- const componentsCode = (0, utils_1.genComponentsCode)(filename, components, isX);
- const { namespace, id: pluginId } = parseSwiftPackage(filename);
- const input = {
- root: inputDir,
- filename,
- pluginId,
- paths: {},
- };
- const isUTSFileExists = fs_extra_1.default.existsSync(filename);
- if (componentsCode) {
- if (!isUTSFileExists) {
- input.fileContent = componentsCode;
- }
- else {
- input.fileContent =
- fs_extra_1.default.readFileSync(filename, 'utf8') + `\n` + componentsCode;
- }
- }
- else {
- // uts文件不存在,且也无组件
- if (!isUTSFileExists) {
- return;
- }
- }
- const options = {
- input,
- output: {
- isX,
- isPlugin,
- outDir: outputDir,
- package: namespace,
- sourceMap: sourceMap ? (0, utils_1.resolveUTSSourceMapPath)() : false,
- extname: 'swift',
- imports: ['DCloudUTSFoundation'],
- logFilename: true,
- noColor: !(0, utils_1.isColorSupported)(),
- transform: {
- uniExtApiDefaultNamespace: 'DCloudUTSExtAPI',
- uniExtApiNamespaces: extApis,
- },
- },
- };
- const result = await bundle(UTSTarget.SWIFT, options);
- sourceMap &&
- (0, utils_1.moveRootIndexSourceMap)(filename, {
- inputDir,
- outputDir,
- platform: 'app-ios',
- extname: '.swift',
- components,
- package: '',
- });
- return result;
- }
- exports.compile = compile;
- const deps = ['Info.plist', 'config.json'];
- function resolveIOSDepFiles(filename) {
- const dir = (0, utils_1.resolveIOSDir)(filename);
- return deps.map((dep) => path_1.default.resolve(dir, dep));
- }
- exports.resolveIOSDepFiles = resolveIOSDepFiles;
- function checkIOSVersionTips(pluginId, pluginDir, is_uni_modules) {
- const configJsonFile = (0, path_1.join)(pluginDir, is_uni_modules ? 'utssdk' : '', 'app-ios', 'config.json');
- if (configJsonFile && fs_extra_1.default.existsSync(configJsonFile)) {
- try {
- const configJson = (0, shared_1.parseJson)(fs_extra_1.default.readFileSync(configJsonFile, 'utf8'));
- if (configJson.deploymentTarget) {
- return `uts插件[${pluginId}]需在 iOS ${configJson.deploymentTarget} 版本及以上方可正常使用`;
- }
- }
- catch (e) { }
- }
- }
- exports.checkIOSVersionTips = checkIOSVersionTips;
|