{"record":{"id":"fe18ddf9c4085f9d","repo":"quasarframework/quasar","slug":"appdelegate-m-not-found-your-app-will-revoke-the","errorCode":null,"errorMessage":"AppDelegate.m not found. Your App will revoke the devserver's SSL certificate.","messagePattern":"AppDelegate\\.m not found\\. Your App will revoke the devserver's SSL certificate\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"app-vite/lib/modes/cordova/config-file.js","lineNumber":130,"sourceCode":"    log('Updated Cordova config.xml')\n\n    this.#tamperedFiles.forEach(file => {\n      fs.writeFileSync(file.path, file.content, 'utf8')\n      log(`Updated ${file.name}`)\n    })\n  }\n\n  #prepareAppDelegate(node) {\n    const appDelegatePath = this.#ctx.appPaths.resolve.cordova(\n      `platforms/ios/${node.text}/Classes/AppDelegate.m`\n    )\n\n    if (!fs.existsSync(appDelegatePath)) {\n      warn()\n      warn()\n      warn()\n      warn()\n      warn(\n        \"AppDelegate.m not found. Your App will revoke the devserver's SSL certificate.\"\n      )\n      warn(\n        'Please report the cordova CLI version and cordova-ios package that you are using.'\n      )\n      warn(\n        \"Also, disable HTTPS from quasar.config file > devServer > server > type: 'https'\"\n      )\n      warn()\n      warn()\n      warn()\n      warn()\n    } else {\n      const tamperedFile = {\n        name: 'AppDelegate.m',\n        path: appDelegatePath,\n        originalContent: fs.readFileSync(appDelegatePath, 'utf8')\n      }","sourceCodeStart":112,"sourceCodeEnd":148,"githubUrl":"https://github.com/quasarframework/quasar/blob/4841521b5f635a971eb9e2710e5542efd194691b/app-vite/lib/modes/cordova/config-file.js#L112-L148","documentation":"During `quasar dev -m cordova` with HTTPS, Quasar patches the iOS AppDelegate.m to allow the dev server's self-signed SSL certificate. If that file can't be found in the iOS project, this warning is emitted and the patch is skipped, meaning the app will reject the devserver certificate and fail to load the app.","triggerScenarios":"prepare() → #prepareAppDelegate (cordova/config-file.js) running when appPaths.resolve.cordova('ios/App/App/AppDelegate.m') (or equivalent path for older cordova-ios layouts) does not exist on disk while HTTPS devServer is configured.","commonSituations":"cordova-ios version change that moved AppDelegate.m (e.g. path changed from platforms/ios/ProjectName/ to platforms/ios/App/); incomplete or partial `cordova platform add ios`; custom project layout.","solutions":["Re-add the iOS platform: rm -rf src-cordova/platforms/ios && cd src-cordova && cordova platform add ios to restore the standard file layout.","Check installed versions (cordova -v; npm ls cordova-ios in src-cordova) and report them as the warning requests; pin a cordova-ios version with the standard App/ layout.","If you don't need HTTPS during development, remove devServer.server.type:'https' from quasar.config — the patch is then unnecessary."],"exampleFix":"// quasar.config.js — before\ndevServer: { server: { type: 'https' } }\n// after (workaround)\ndevServer: { server: { type: 'http' } }","handlingStrategy":"validation","validationCode":"const fs = require('fs');\nconst candidates = ['src-cordova/platforms/ios/App/App/AppDelegate.m', 'src-cordova/platforms/ios/HelloCordova/AppDelegate.m'];\nif (!candidates.some(p => fs.existsSync(p))) {\n  console.warn('AppDelegate.m missing — HTTPS dev server patch will be skipped; use http or re-add the ios platform');\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["After updating cordova CLI or cordova-ios, always remove and re-add the ios platform so the template layout matches.","Pin cordova-ios to a stable release with the App/ layout in src-cordova/package.json.","Prefer http for local dev unless you specifically need HTTPS service-worker testing."],"tags":["cordova","ios","https","ssl"],"backgroundTag":"appdelegate-missing","analyzedSha":"4841521b5f635a971eb9e2710e5542efd194691b","analyzedAt":"2026-08-30T01:13:14.944Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}