@simplysm/capacitor-plugin-auto-update 14.0.51 → 14.0.53

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.
@@ -44,7 +44,7 @@ class ApkInstallerPlugin : Plugin() {
44
44
  }
45
45
 
46
46
  @PluginMethod
47
- fun checkPermissions(call: PluginCall) {
47
+ override fun checkPermissions(call: PluginCall) {
48
48
  // Check granted
49
49
  val granted = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
50
50
  context.packageManager.canRequestPackageInstalls()
@@ -78,7 +78,7 @@ class ApkInstallerPlugin : Plugin() {
78
78
  }
79
79
 
80
80
  @PluginMethod
81
- fun requestPermissions(call: PluginCall) {
81
+ override fun requestPermissions(call: PluginCall) {
82
82
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
83
83
  val intent = Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES)
84
84
  intent.data = Uri.parse("package:" + context.packageName)
@@ -99,7 +99,7 @@ export class AutoUpdate {
99
99
  try {
100
100
  opt.log(`최신 버전 확인 중...`);
101
101
  // 서버에서 버전 및 다운로드 링크 조회
102
- const autoUpdateServiceClient = opt.serviceClient.getService("AutoUpdateService");
102
+ const autoUpdateServiceClient = opt.serviceClient.getService("AutoUpdate");
103
103
  const serverVersionInfo = await autoUpdateServiceClient.getLastVersion("android");
104
104
  if (!serverVersionInfo) {
105
105
  // eslint-disable-next-line no-console
@@ -1 +1 @@
1
- {"version":3,"file":"AutoUpdate.js","sourceRoot":"","sources":["../src/AutoUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,OAAgB,UAAU;IACtB,MAAM,CAAU,WAAW,GAAG;;;;;;;;;;;GAWrC,CAAC;IAEM,MAAM,CAAU,kBAAkB,GAAG;;GAE5C,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,IAAY,EAAE,UAAmB;QACnE,MAAM,YAAY,GAChB,UAAU,IAAI,IAAI;YAChB,CAAC,CAAC,IAAI,CAAA;;2BAEa,IAAI,CAAC,WAAW;kCACT,IAAI,CAAC,kBAAkB;;;;+BAI1B,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;;;;WAI1D;YACH,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,IAAI,KAAK,CAAC,IAAI,CAAA;mCACW,IAAI,MAAM,YAAY;KACpD,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAkC,EAAE,UAAmB;QAC3F,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAC;YACpE,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YACzC,OAAO,CAAC,0CAA0C;QACpD,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAA;;;qBAGO,IAAI,CAAC,WAAW;4BACT,IAAI,CAAC,kBAAkB;;;OAG5C,CAAC,CAAC;YACH,MAAM,YAAY,CAAC,kBAAkB,EAAE,CAAC;YACxC,wCAAwC;YACxC,MAAM,IAAI,CAAC,KAAK,CACd,KAAK,IAAI,EAAE;gBACT,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;gBACrD,OAAO,MAAM,CAAC,OAAO,CAAC;YACxB,CAAC,EACD,IAAI,EACJ,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,WAAW,CAC9B,GAAkC,EAClC,WAAmB;QAEnB,GAAG,CAAC,IAAI,CAAA;;;mBAGO,IAAI,CAAC,WAAW;0BACT,IAAI,CAAC,kBAAkB;;;KAG5C,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,GAAY;QAC1C,OAAO,IAAI,CAAA;;;QAGP,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;KACnD,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,UAAU;QAC7B,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,QAAQ;IACvC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAyE;QACxF,IAAI,CAAC;YACH,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAEzB,uBAAuB;YACvB,MAAM,uBAAuB,GAC3B,GAAG,CAAC,aAAa,CAAC,UAAU,CAAoB,mBAAmB,CAAC,CAAC;YAEvE,MAAM,iBAAiB,GAAG,MAAM,uBAAuB,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAClF,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvB,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YAED,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACtB,MAAM,IAAI,CAAC,gBAAgB,CACzB,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,aAAa,CAAC,OAAO,GAAG,iBAAiB,CAAC,YAAY,CAC3D,CAAC;YAEF,aAAa;YACb,MAAM,kBAAkB,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,CAAC;YAE/D,yBAAyB;YACzB,IACE,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,IAAI;gBACpD,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAI,EAC/C,CAAC;gBACD,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC1E,OAAO;YACT,CAAC;YAED,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,GAAG,CAAC,aAAa,CAAC,OAAO,GAAG,iBAAiB,CAAC,YAAY,EAC1D;gBACE,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;oBACvB,MAAM,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,cAAc,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,OAAO,CACrF,CAAC,CACF,CAAC;oBACF,GAAG,CAAC,GAAG,CAAC,sBAAsB,YAAY,IAAI,CAAC,CAAC;gBAClD,CAAC;aACF,CACF,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAChE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YACzD,MAAM,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAEhD,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAC7C,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAA4D;QAC5F,IAAI,CAAC;YACH,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACtB,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAErC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAEzB,WAAW;YACX,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YACjE,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAEjF,MAAM,QAAQ,GAAG,SAAS;iBACvB,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;iBAC3C,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClB,QAAQ,EAAE,QAAQ,CAAC,IAAI;gBACvB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAClE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;aACrC,CAAC,CAAC;iBACF,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;gBACf,OAAO,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;YAEL,gBAAgB;YAChB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAElC,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CACxC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EACpC,GAAG,CACJ,CAAC;YAEF,wBAAwB;YACxB,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;gBAC1B,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;YAED,aAAa;YACb,MAAM,kBAAkB,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,CAAC;YAE/D,6BAA6B;YAC7B,IACE,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,IAAI;gBACpD,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,EACnC,CAAC;gBACD,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9D,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC,CAAC;YACjF,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAC7C,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC"}
1
+ {"version":3,"file":"AutoUpdate.js","sourceRoot":"","sources":["../src/AutoUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,OAAgB,UAAU;IACtB,MAAM,CAAU,WAAW,GAAG;;;;;;;;;;;GAWrC,CAAC;IAEM,MAAM,CAAU,kBAAkB,GAAG;;GAE5C,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,IAAY,EAAE,UAAmB;QACnE,MAAM,YAAY,GAChB,UAAU,IAAI,IAAI;YAChB,CAAC,CAAC,IAAI,CAAA;;2BAEa,IAAI,CAAC,WAAW;kCACT,IAAI,CAAC,kBAAkB;;;;+BAI1B,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;;;;WAI1D;YACH,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,IAAI,KAAK,CAAC,IAAI,CAAA;mCACW,IAAI,MAAM,YAAY;KACpD,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAkC,EAAE,UAAmB;QAC3F,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAC;YACpE,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YACzC,OAAO,CAAC,0CAA0C;QACpD,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAA;;;qBAGO,IAAI,CAAC,WAAW;4BACT,IAAI,CAAC,kBAAkB;;;OAG5C,CAAC,CAAC;YACH,MAAM,YAAY,CAAC,kBAAkB,EAAE,CAAC;YACxC,wCAAwC;YACxC,MAAM,IAAI,CAAC,KAAK,CACd,KAAK,IAAI,EAAE;gBACT,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;gBACrD,OAAO,MAAM,CAAC,OAAO,CAAC;YACxB,CAAC,EACD,IAAI,EACJ,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,WAAW,CAC9B,GAAkC,EAClC,WAAmB;QAEnB,GAAG,CAAC,IAAI,CAAA;;;mBAGO,IAAI,CAAC,WAAW;0BACT,IAAI,CAAC,kBAAkB;;;KAG5C,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,GAAY;QAC1C,OAAO,IAAI,CAAA;;;QAGP,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;KACnD,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,UAAU;QAC7B,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,QAAQ;IACvC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAyE;QACxF,IAAI,CAAC;YACH,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAEzB,uBAAuB;YACvB,MAAM,uBAAuB,GAC3B,GAAG,CAAC,aAAa,CAAC,UAAU,CAAoB,YAAY,CAAC,CAAC;YAEhE,MAAM,iBAAiB,GAAG,MAAM,uBAAuB,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAClF,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvB,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YAED,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACtB,MAAM,IAAI,CAAC,gBAAgB,CACzB,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,aAAa,CAAC,OAAO,GAAG,iBAAiB,CAAC,YAAY,CAC3D,CAAC;YAEF,aAAa;YACb,MAAM,kBAAkB,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,CAAC;YAE/D,yBAAyB;YACzB,IACE,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,IAAI;gBACpD,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAI,EAC/C,CAAC;gBACD,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC1E,OAAO;YACT,CAAC;YAED,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,GAAG,CAAC,aAAa,CAAC,OAAO,GAAG,iBAAiB,CAAC,YAAY,EAC1D;gBACE,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;oBACvB,MAAM,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,cAAc,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,OAAO,CACrF,CAAC,CACF,CAAC;oBACF,GAAG,CAAC,GAAG,CAAC,sBAAsB,YAAY,IAAI,CAAC,CAAC;gBAClD,CAAC;aACF,CACF,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAChE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YACzD,MAAM,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAEhD,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAC7C,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAA4D;QAC5F,IAAI,CAAC;YACH,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACtB,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAErC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAEzB,WAAW;YACX,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YACjE,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAEjF,MAAM,QAAQ,GAAG,SAAS;iBACvB,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;iBAC3C,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClB,QAAQ,EAAE,QAAQ,CAAC,IAAI;gBACvB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAClE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;aACrC,CAAC,CAAC;iBACF,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;gBACf,OAAO,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;YAEL,gBAAgB;YAChB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAElC,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CACxC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EACpC,GAAG,CACJ,CAAC;YAEF,wBAAwB;YACxB,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;gBAC1B,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;YAED,aAAa;YACb,MAAM,kBAAkB,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,CAAC;YAE/D,6BAA6B;YAC7B,IACE,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,IAAI;gBACpD,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,EACnC,CAAC;gBACD,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9D,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC,CAAC;YACjF,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAC7C,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/capacitor-plugin-auto-update",
3
- "version": "14.0.51",
3
+ "version": "14.0.53",
4
4
  "description": "심플리즘 패키지 - Capacitor 자동 업데이트 플러그인",
5
5
  "author": "심플리즘",
6
6
  "license": "Apache-2.0",
@@ -15,16 +15,15 @@
15
15
  "files": [
16
16
  "dist",
17
17
  "src",
18
- "android",
19
- "docs"
18
+ "android"
20
19
  ],
21
20
  "dependencies": {
22
21
  "semver": "^7.7.4",
23
- "@simplysm/capacitor-plugin-file-system": "14.0.51",
24
- "@simplysm/core-browser": "14.0.51",
25
- "@simplysm/service-client": "14.0.51",
26
- "@simplysm/core-common": "14.0.51",
27
- "@simplysm/service-common": "14.0.51"
22
+ "@simplysm/capacitor-plugin-file-system": "14.0.53",
23
+ "@simplysm/core-common": "14.0.53",
24
+ "@simplysm/core-browser": "14.0.53",
25
+ "@simplysm/service-common": "14.0.53",
26
+ "@simplysm/service-client": "14.0.53"
28
27
  },
29
28
  "devDependencies": {
30
29
  "@capacitor/core": "^7.6.2",
package/src/AutoUpdate.ts CHANGED
@@ -121,7 +121,7 @@ export abstract class AutoUpdate {
121
121
 
122
122
  // 서버에서 버전 및 다운로드 링크 조회
123
123
  const autoUpdateServiceClient =
124
- opt.serviceClient.getService<AutoUpdateService>("AutoUpdateService");
124
+ opt.serviceClient.getService<AutoUpdateService>("AutoUpdate");
125
125
 
126
126
  const serverVersionInfo = await autoUpdateServiceClient.getLastVersion("android");
127
127
  if (!serverVersionInfo) {
package/README.md DELETED
@@ -1,82 +0,0 @@
1
- # @simplysm/capacitor-plugin-auto-update
2
-
3
- 심플리즘 패키지 - Capacitor 자동 업데이트 플러그인. 서버 버전 비교 후 APK 다운로드·설치를 처리하며, 외부 저장소(USB 등)에서도 업데이트할 수 있다.
4
-
5
- ## Installation
6
-
7
- ```bash
8
- npm install @simplysm/capacitor-plugin-auto-update
9
- ```
10
-
11
- 피어 의존성으로 `@capacitor/core ^7`이 필요하다. Android 네이티브 플러그인이 포함되어 있으므로 `npx cap sync` 후 사용한다.
12
-
13
- ## API Overview
14
-
15
- ### APK 설치
16
-
17
- | Entry | Kind | Description |
18
- |-------|------|-------------|
19
- | [`ApkInstaller`](./docs/apk-installer/apk-installer.md) | abstract class | APK 설치 플러그인 정적 파사드 — 권한 확인/요청, 설치, 버전 조회. `VersionInfo`, `ApkInstallerPlugin` 타입 포함. |
20
-
21
- ### 자동 업데이트
22
-
23
- | Entry | Kind | Description |
24
- |-------|------|-------------|
25
- | [`AutoUpdate`](./docs/auto-update/auto-update.md) | abstract class | 자동 업데이트 오케스트레이터 — 서버 또는 외부 저장소에서 최신 APK를 확인하고 설치 |
26
-
27
- ## Usage Examples
28
-
29
- ### 서버 기반 자동 업데이트
30
-
31
- 앱 부트스트랩 시 `AutoUpdate.run()`을 호출한다. `AutoUpdateService`는 `@simplysm/service-common`의 서비스 인터페이스다.
32
-
33
- ```typescript
34
- import { AutoUpdate } from "@simplysm/capacitor-plugin-auto-update";
35
- import type { ServiceClient } from "@simplysm/service-client";
36
-
37
- async function checkForUpdate(serviceClient: ServiceClient) {
38
- const statusEl = document.getElementById("status")!;
39
-
40
- await AutoUpdate.run({
41
- log: (messageHtml) => {
42
- statusEl.innerHTML = messageHtml;
43
- },
44
- serviceClient,
45
- });
46
-
47
- // 업데이트가 없을 때만 이 줄에 도달한다.
48
- // 업데이트가 실행되면 _freezeApp()으로 무한 대기 전환되므로 이 줄에 도달하지 않는다.
49
- statusEl.innerHTML = "";
50
- }
51
- ```
52
-
53
- ### 외부 저장소(USB) 기반 업데이트
54
-
55
- `opt.dirPath`는 외부 저장소 루트 기준 상대 경로다. 해당 경로에 `1.2.3.apk` 형식 파일이 있어야 한다.
56
-
57
- ```typescript
58
- import { AutoUpdate } from "@simplysm/capacitor-plugin-auto-update";
59
-
60
- await AutoUpdate.runByExternalStorage({
61
- log: (messageHtml) => {
62
- document.getElementById("status")!.innerHTML = messageHtml;
63
- },
64
- dirPath: "updates/my-app",
65
- });
66
- ```
67
-
68
- ### APK 설치 직접 제어
69
-
70
- `AutoUpdate`를 사용하지 않고 `ApkInstaller`를 직접 제어하는 경우:
71
-
72
- ```typescript
73
- import { ApkInstaller } from "@simplysm/capacitor-plugin-auto-update";
74
- import { FileSystem } from "@simplysm/capacitor-plugin-file-system";
75
-
76
- const { granted, manifest } = await ApkInstaller.checkPermissions();
77
- if (!manifest) throw new Error("앱을 재설치해야 합니다.");
78
- if (!granted) await ApkInstaller.requestPermissions();
79
-
80
- const apkUri = await FileSystem.getUri("/path/to/latest.apk");
81
- await ApkInstaller.install(apkUri);
82
- ```
@@ -1,114 +0,0 @@
1
- package kr.co.simplysm.capacitor.apkinstaller
2
-
3
- import android.content.Intent
4
- import android.content.pm.PackageManager
5
- import android.net.Uri
6
- import android.os.Build
7
- import android.provider.Settings
8
- import android.util.Log
9
-
10
- import com.getcapacitor.JSObject
11
- import com.getcapacitor.Plugin
12
- import com.getcapacitor.PluginCall
13
- import com.getcapacitor.PluginMethod
14
- import com.getcapacitor.annotation.CapacitorPlugin
15
-
16
- @CapacitorPlugin(name = "ApkInstaller")
17
- class ApkInstallerPlugin : Plugin() {
18
-
19
- companion object {
20
- private const val TAG = "ApkInstallerPlugin"
21
- }
22
-
23
- @PluginMethod
24
- fun install(call: PluginCall) {
25
- val uriStr = call.getString("uri")
26
- if (uriStr == null) {
27
- call.reject("uri is required")
28
- return
29
- }
30
-
31
- try {
32
- val apkUri = Uri.parse(uriStr)
33
-
34
- val intent = Intent(Intent.ACTION_VIEW)
35
- intent.setDataAndType(apkUri, "application/vnd.android.package-archive")
36
- intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION
37
-
38
- context.startActivity(intent)
39
- call.resolve()
40
- } catch (e: Exception) {
41
- Log.e(TAG, "install failed", e)
42
- call.reject("Install failed: " + e.message)
43
- }
44
- }
45
-
46
- @PluginMethod
47
- fun checkPermissions(call: PluginCall) {
48
- // Check granted
49
- val granted = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
50
- context.packageManager.canRequestPackageInstalls()
51
- } else {
52
- true
53
- }
54
-
55
- // Check manifest
56
- var manifest = false
57
- try {
58
- val targetPermission = "android.permission.REQUEST_INSTALL_PACKAGES"
59
- val requestedPermissions = context.packageManager
60
- .getPackageInfo(context.packageName, PackageManager.GET_PERMISSIONS)
61
- .requestedPermissions
62
- if (requestedPermissions != null) {
63
- for (perm in requestedPermissions) {
64
- if (targetPermission == perm) {
65
- manifest = true
66
- break
67
- }
68
- }
69
- }
70
- } catch (e: Exception) {
71
- Log.e(TAG, "checkPermissions manifest check failed", e)
72
- }
73
-
74
- val ret = JSObject()
75
- ret.put("granted", granted)
76
- ret.put("manifest", manifest)
77
- call.resolve(ret)
78
- }
79
-
80
- @PluginMethod
81
- fun requestPermissions(call: PluginCall) {
82
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
83
- val intent = Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES)
84
- intent.data = Uri.parse("package:" + context.packageName)
85
- intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
86
- context.startActivity(intent)
87
- }
88
- call.resolve()
89
- }
90
-
91
- @PluginMethod
92
- fun getVersionInfo(call: PluginCall) {
93
- try {
94
- val pm = context.packageManager
95
- val info = pm.getPackageInfo(context.packageName, 0)
96
-
97
- val versionName = info.versionName
98
- val versionCode = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
99
- info.longVersionCode
100
- } else {
101
- @Suppress("DEPRECATION")
102
- info.versionCode.toLong()
103
- }
104
-
105
- val ret = JSObject()
106
- ret.put("versionName", versionName)
107
- ret.put("versionCode", versionCode.toString())
108
- call.resolve(ret)
109
- } catch (e: Exception) {
110
- Log.e(TAG, "getVersionInfo failed", e)
111
- call.reject("getVersionInfo failed: " + e.message)
112
- }
113
- }
114
- }
@@ -1,91 +0,0 @@
1
- # ApkInstaller
2
-
3
- APK 설치 플러그인 정적 파사드 클래스. Android에서는 네이티브 플러그인을 실행하고, 브라우저 환경에서는 `ApkInstallerWeb`으로 폴백한다.
4
-
5
- ```typescript
6
- export abstract class ApkInstaller {
7
- static async checkPermissions(): Promise<{ granted: boolean; manifest: boolean }>;
8
- static async requestPermissions(): Promise<void>;
9
- static async install(apkUri: string): Promise<void>;
10
- static async getVersionInfo(): Promise<VersionInfo>;
11
- }
12
- ```
13
-
14
- ## Members
15
-
16
- | Member | Kind | Parameters | Return | Description |
17
- |--------|------|-----------|--------|-------------|
18
- | `checkPermissions` | static method | 없음 | `Promise<{ granted: boolean; manifest: boolean }>` | 설치 권한 승인 여부(`granted`)와 AndroidManifest 선언 여부(`manifest`) 동시 확인. `manifest: false`이면 APK를 재설치해야 한다. |
19
- | `requestPermissions` | static method | 없음 | `Promise<void>` | `REQUEST_INSTALL_PACKAGES` 권한 요청. 시스템 설정 화면으로 이동하므로 이후 `checkPermissions`로 결과를 폴링해야 한다. |
20
- | `install` | static method | `apkUri: string` | `Promise<void>` | `content://` URI(FileProvider URI)로 APK 설치 인텐트 실행. `FileSystem.getUri(filePath)`로 URI를 얻는다. |
21
- | `getVersionInfo` | static method | 없음 | `Promise<VersionInfo>` | 현재 설치된 앱의 버전 정보 조회. 브라우저 환경에서는 `env("__VER__") ?? "0.0.0"`을 `versionName`으로 반환한다. |
22
-
23
- **브라우저 폴백 동작:**
24
- - `install()` — `alert()` 메시지 표시 후 반환
25
- - `checkPermissions()` — 항상 `{ granted: true, manifest: true }` 반환
26
- - `requestPermissions()` — 무동작
27
- - `getVersionInfo()` — `versionName: env("__VER__") ?? "0.0.0"`, `versionCode: "0"` 반환
28
-
29
- ## Related Types
30
-
31
- ### `ApkInstallerPlugin`
32
-
33
- Capacitor 네이티브 플러그인 인터페이스. 직접 사용하지 않고 `ApkInstaller` 파사드를 통해 접근한다. 타입 참조 목적으로만 export된다.
34
-
35
- ```typescript
36
- export interface ApkInstallerPlugin {
37
- install(options: { uri: string }): Promise<void>;
38
- checkPermissions(): Promise<{ granted: boolean; manifest: boolean }>;
39
- requestPermissions(): Promise<void>;
40
- getVersionInfo(): Promise<VersionInfo>;
41
- }
42
- ```
43
-
44
- | Method | Return | Description |
45
- |--------|--------|-------------|
46
- | `install(options: { uri: string })` | `Promise<void>` | `content://` URI(FileProvider URI)로 APK 설치 인텐트 실행 |
47
- | `checkPermissions()` | `Promise<{ granted: boolean; manifest: boolean }>` | 설치 권한 승인 여부(`granted`)와 AndroidManifest 선언 여부(`manifest`) 동시 확인 |
48
- | `requestPermissions()` | `Promise<void>` | `REQUEST_INSTALL_PACKAGES` 권한 요청 — 시스템 설정 화면으로 이동 |
49
- | `getVersionInfo()` | `Promise<VersionInfo>` | PackageManager에서 현재 앱 버전 정보 조회 |
50
-
51
- ### `VersionInfo`
52
-
53
- 앱 버전 정보를 나타내는 인터페이스.
54
-
55
- ```typescript
56
- export interface VersionInfo {
57
- versionName: string;
58
- versionCode: string;
59
- }
60
- ```
61
-
62
- | Field | Type | Description |
63
- |-------|------|-------------|
64
- | `versionName` | `string` | 앱 버전 이름. semver 형식 (예: `"1.2.3"`). `AutoUpdate`의 버전 비교에 사용된다. |
65
- | `versionCode` | `string` | 앱 버전 코드. 정수를 문자열로 표현 (예: `"42"`). |
66
-
67
- ## Usage
68
-
69
- ```typescript
70
- import { ApkInstaller } from "@simplysm/capacitor-plugin-auto-update";
71
- import { FileSystem } from "@simplysm/capacitor-plugin-file-system";
72
-
73
- // 권한 확인
74
- const { granted, manifest } = await ApkInstaller.checkPermissions();
75
- if (!manifest) {
76
- // AndroidManifest.xml에 REQUEST_INSTALL_PACKAGES 미선언 → APK 재설치 필요
77
- throw new Error("앱을 재설치해야 합니다.");
78
- }
79
- if (!granted) {
80
- await ApkInstaller.requestPermissions();
81
- }
82
-
83
- // 현재 버전 확인
84
- const versionInfo = await ApkInstaller.getVersionInfo();
85
- // versionInfo.versionName → "1.2.3"
86
- // versionInfo.versionCode → "42"
87
-
88
- // APK 설치 (filePath는 FileSystem으로 저장한 경로)
89
- const apkUri = await FileSystem.getUri("/path/to/latest.apk");
90
- await ApkInstaller.install(apkUri);
91
- ```
@@ -1,95 +0,0 @@
1
- # AutoUpdate
2
-
3
- 자동 업데이트 오케스트레이터. 서버 또는 외부 저장소에서 최신 APK를 확인하고 설치한다. 모든 메서드가 `static`이며 인스턴스화하지 않는다. Android 환경 전용이며, 비-Android에서 호출하면 에러를 표시하고 앱을 무한 대기 상태로 전환한다.
4
-
5
- ```typescript
6
- export abstract class AutoUpdate {
7
- static async run(opt: {
8
- log: (messageHtml: string) => void;
9
- serviceClient: ServiceClient;
10
- }): Promise<void>;
11
-
12
- static async runByExternalStorage(opt: {
13
- log: (messageHtml: string) => void;
14
- dirPath: string;
15
- }): Promise<void>;
16
- }
17
- ```
18
-
19
- ## Members
20
-
21
- | Member | Kind | Parameters | Description |
22
- |--------|------|-----------|-------------|
23
- | `run` | static method | `opt.log`, `opt.serviceClient` | `AutoUpdateService.getLastVersion("android")`로 서버에서 최신 버전 정보를 조회한 뒤, 현재 버전보다 높으면 APK를 다운로드하여 설치한다. 업데이트 후 앱을 무한 대기 상태로 전환한다. |
24
- | `runByExternalStorage` | static method | `opt.log`, `opt.dirPath` | 외부 저장소의 `opt.dirPath` 디렉토리에서 숫자와 점으로만 구성된 이름의 `.apk` 파일(예: `1.2.3.apk`) 중 최신 semver 버전을 찾아 설치한다. 현재 버전보다 높은 경우에만 업데이트한다. |
25
-
26
- ## Parameters
27
-
28
- ### `run` opt
29
-
30
- | Param | Type | Description |
31
- |-------|------|-------------|
32
- | `log` | `(messageHtml: string) => void` | 진행 상황 HTML을 받아 사용자에게 표시하는 콜백. 버튼 등 인터랙티브 HTML이 포함될 수 있다. |
33
- | `serviceClient` | `ServiceClient` | `@simplysm/service-client`의 `ServiceClient` 인스턴스. 서버에서 버전 정보를 조회하는 데 사용된다. |
34
-
35
- ### `runByExternalStorage` opt
36
-
37
- | Param | Type | Description |
38
- |-------|------|-------------|
39
- | `log` | `(messageHtml: string) => void` | 진행 상황 HTML을 받아 사용자에게 표시하는 콜백. |
40
- | `dirPath` | `string` | 외부 저장소 루트(`FileSystem.getStoragePath("external")`) 기준 상대 경로. 해당 경로에 `1.2.3.apk` 형식 파일이 있어야 한다. |
41
-
42
- ## 동작 설명
43
-
44
- **권한 처리**: 두 메서드 모두 내부적으로 권한 확인을 수행한다.
45
- - `manifest: false` → 재설치 에러를 throw하고 앱을 무한 대기로 전환한다.
46
- - `granted: false` → 권한 요청 후 최대 300초(1초 간격)간 승인을 폴링한다.
47
-
48
- **버전 비교**: `semver` 라이브러리를 사용한다. `versionName`이 유효한 semver 형식이 아니면 업데이트 확인을 건너뛴다.
49
-
50
- **업데이트 후 동작**: 업데이트가 실행되면 `new Promise(() => {})` 무한 대기로 전환된다. 사용자가 앱을 재시작해야 새 버전이 적용된다. 업데이트가 필요 없을 때는 정상 반환한다.
51
-
52
- **에러 처리**: `try/catch`로 전체를 감싸며, 에러 발생 시 `opt.log()`로 HTML 에러 메시지를 표시한 뒤 무한 대기로 전환한다.
53
-
54
- **`run` APK 저장 경로**: `FileSystem.getStoragePath("appCache")`에 `latest.apk`로 저장한다.
55
-
56
- ## Usage
57
-
58
- ### 서버 기반 자동 업데이트
59
-
60
- 앱 부트스트랩 시 `AutoUpdate.run()`을 호출한다. `AutoUpdateService`는 `@simplysm/service-common`의 서비스 인터페이스다.
61
-
62
- ```typescript
63
- import { AutoUpdate } from "@simplysm/capacitor-plugin-auto-update";
64
- import type { ServiceClient } from "@simplysm/service-client";
65
-
66
- async function checkForUpdate(serviceClient: ServiceClient) {
67
- const statusEl = document.getElementById("status")!;
68
-
69
- await AutoUpdate.run({
70
- log: (messageHtml) => {
71
- statusEl.innerHTML = messageHtml;
72
- },
73
- serviceClient,
74
- });
75
-
76
- // 업데이트가 없을 때만 이 줄에 도달한다.
77
- // 업데이트가 실행되면 무한 대기 전환되므로 이 줄에 도달하지 않는다.
78
- statusEl.innerHTML = "";
79
- }
80
- ```
81
-
82
- ### 외부 저장소(USB) 기반 업데이트
83
-
84
- `opt.dirPath`는 외부 저장소 루트 기준 상대 경로다. 해당 경로에 `1.2.3.apk` 형식 파일이 있어야 한다.
85
-
86
- ```typescript
87
- import { AutoUpdate } from "@simplysm/capacitor-plugin-auto-update";
88
-
89
- await AutoUpdate.runByExternalStorage({
90
- log: (messageHtml) => {
91
- document.getElementById("status")!.innerHTML = messageHtml;
92
- },
93
- dirPath: "updates/my-app",
94
- });
95
- ```