chore(ios): add temporary Share Target debug panel (temporary)
Add a dedicated, temporary debug view for the iOS Share Target investigation so native traces can be inspected without attaching Xcode. Kept separate from the Notification/Notiwind test panel so it is easy to remove once the investigation is complete. The panel (src/views/ShareTargetDebugView.vue, route /share-target-debug) has three buttons: - Dump Native Traces: calls SharedImage.getShareExtensionTrace() and getAppLaunchTrace(), logs both in full (untruncated) between EXTENSION TRACE START/END and APP LAUNCH TRACE START/END markers, and shows them in read-only scrollable fields. - Clear Share Extension Trace: clears the native log and the field. - Clear App Launch Trace: clears the native log and the field. Register the route alongside the existing /test debug route and link to the panel from TestView. No share-target behavior changed; Android untouched. All additions marked TEMPORARY SHARE TARGET DIAGNOSTICS.
This commit is contained in:
@@ -290,6 +290,12 @@ const routes: Array<RouteRecordRaw> = [
|
|||||||
name: "test",
|
name: "test",
|
||||||
component: () => import("../views/TestView.vue"),
|
component: () => import("../views/TestView.vue"),
|
||||||
},
|
},
|
||||||
|
// TEMPORARY SHARE TARGET DIAGNOSTICS
|
||||||
|
{
|
||||||
|
path: "/share-target-debug",
|
||||||
|
name: "share-target-debug",
|
||||||
|
component: () => import("../views/ShareTargetDebugView.vue"),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: "/user-profile/:id?",
|
path: "/user-profile/:id?",
|
||||||
name: "user-profile",
|
name: "user-profile",
|
||||||
|
|||||||
187
src/views/ShareTargetDebugView.vue
Normal file
187
src/views/ShareTargetDebugView.vue
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
<!-- TEMPORARY SHARE TARGET DIAGNOSTICS -->
|
||||||
|
<!--
|
||||||
|
ShareTargetDebugView
|
||||||
|
|
||||||
|
Temporary, standalone debug panel for the iOS Share Target investigation.
|
||||||
|
Lets a tester dump and clear the native trace logs (share-extension-trace.log
|
||||||
|
and app-launch-trace.log) from the App Group container without attaching Xcode.
|
||||||
|
|
||||||
|
This entire view is temporary and intended to be deleted once the Share Target
|
||||||
|
investigation is complete. It does not change any share-target behavior.
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<QuickNav />
|
||||||
|
|
||||||
|
<!-- CONTENT -->
|
||||||
|
<section id="Content" class="p-6 pb-24 max-w-3xl mx-auto">
|
||||||
|
<!-- Sub View Heading -->
|
||||||
|
<div id="SubViewHeading" class="flex gap-4 items-start mb-8">
|
||||||
|
<h1 class="grow text-xl text-center font-semibold leading-tight">
|
||||||
|
Share Target Debug
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<!-- Back -->
|
||||||
|
<a
|
||||||
|
class="order-first text-lg text-center leading-none p-1"
|
||||||
|
@click="$router.go(-1)"
|
||||||
|
>
|
||||||
|
<font-awesome icon="chevron-left" class="block text-center w-[1em]" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p class="text-sm text-gray-600 mb-4">
|
||||||
|
Temporary diagnostics for the iOS Share Target investigation. Dumps the
|
||||||
|
native trace logs to the console and to the read-only fields below.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!-- Action buttons -->
|
||||||
|
<div class="flex flex-wrap gap-2 mb-4">
|
||||||
|
<button :class="primaryButtonClasses" @click="dumpNativeTraces()">
|
||||||
|
Dump Native Traces
|
||||||
|
</button>
|
||||||
|
<button :class="warningButtonClasses" @click="clearExtensionTrace()">
|
||||||
|
Clear Share Extension Trace
|
||||||
|
</button>
|
||||||
|
<button :class="warningButtonClasses" @click="clearAppLaunchTrace()">
|
||||||
|
Clear App Launch Trace
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Status message -->
|
||||||
|
<div
|
||||||
|
v-if="statusMessage"
|
||||||
|
class="mb-4 p-2 text-sm rounded-md bg-emerald-50 text-emerald-800 border border-emerald-200"
|
||||||
|
>
|
||||||
|
{{ statusMessage }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Extension trace -->
|
||||||
|
<div class="mb-6">
|
||||||
|
<h2 class="text-lg font-semibold mb-2">Share Extension Trace</h2>
|
||||||
|
<textarea
|
||||||
|
:value="extensionTrace"
|
||||||
|
readonly
|
||||||
|
class="w-full h-64 p-2 border border-gray-300 rounded-md font-mono text-xs whitespace-pre overflow-auto"
|
||||||
|
placeholder="No extension trace loaded. Tap 'Dump Native Traces'."
|
||||||
|
></textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- App launch trace -->
|
||||||
|
<div class="mb-6">
|
||||||
|
<h2 class="text-lg font-semibold mb-2">App Launch Trace</h2>
|
||||||
|
<textarea
|
||||||
|
:value="appLaunchTrace"
|
||||||
|
readonly
|
||||||
|
class="w-full h-64 p-2 border border-gray-300 rounded-md font-mono text-xs whitespace-pre overflow-auto"
|
||||||
|
placeholder="No app launch trace loaded. Tap 'Dump Native Traces'."
|
||||||
|
></textarea>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { Component, Vue } from "vue-facing-decorator";
|
||||||
|
import { Router } from "vue-router";
|
||||||
|
|
||||||
|
import QuickNav from "../components/QuickNav.vue";
|
||||||
|
import { SharedImage } from "../plugins/SharedImagePlugin";
|
||||||
|
import { logger } from "../utils/logger";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TEMPORARY SHARE TARGET DIAGNOSTICS
|
||||||
|
*
|
||||||
|
* Dedicated debug panel for inspecting the iOS Share Target native traces.
|
||||||
|
* Temporary; remove once the Share Target investigation is complete.
|
||||||
|
*/
|
||||||
|
@Component({
|
||||||
|
components: {
|
||||||
|
QuickNav,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
export default class ShareTargetDebugView extends Vue {
|
||||||
|
$router!: Router;
|
||||||
|
|
||||||
|
// TEMPORARY SHARE TARGET DIAGNOSTICS
|
||||||
|
extensionTrace = "";
|
||||||
|
// TEMPORARY SHARE TARGET DIAGNOSTICS
|
||||||
|
appLaunchTrace = "";
|
||||||
|
// TEMPORARY SHARE TARGET DIAGNOSTICS
|
||||||
|
statusMessage = "";
|
||||||
|
|
||||||
|
// TEMPORARY SHARE TARGET DIAGNOSTICS
|
||||||
|
get primaryButtonClasses(): string {
|
||||||
|
return "font-bold capitalize bg-slate-500 text-white px-3 py-2 rounded-md";
|
||||||
|
}
|
||||||
|
|
||||||
|
// TEMPORARY SHARE TARGET DIAGNOSTICS
|
||||||
|
get warningButtonClasses(): string {
|
||||||
|
return "font-bold capitalize bg-amber-600 text-white px-3 py-2 rounded-md";
|
||||||
|
}
|
||||||
|
|
||||||
|
// TEMPORARY SHARE TARGET DIAGNOSTICS
|
||||||
|
/**
|
||||||
|
* Retrieve both native traces, log them in full to the console, and display
|
||||||
|
* them in the read-only fields. Does not truncate either trace.
|
||||||
|
*/
|
||||||
|
async dumpNativeTraces(): Promise<void> {
|
||||||
|
try {
|
||||||
|
const extensionResult = await SharedImage.getShareExtensionTrace();
|
||||||
|
const launchResult = await SharedImage.getAppLaunchTrace();
|
||||||
|
|
||||||
|
this.extensionTrace = extensionResult.trace;
|
||||||
|
this.appLaunchTrace = launchResult.trace;
|
||||||
|
|
||||||
|
// Log full (untruncated) traces to the console.
|
||||||
|
console.info("[ShareTarget] EXTENSION TRACE START");
|
||||||
|
console.info(extensionResult.trace);
|
||||||
|
console.info("[ShareTarget] EXTENSION TRACE END");
|
||||||
|
console.info("");
|
||||||
|
console.info("[ShareTarget] APP LAUNCH TRACE START");
|
||||||
|
console.info(launchResult.trace);
|
||||||
|
console.info("[ShareTarget] APP LAUNCH TRACE END");
|
||||||
|
|
||||||
|
this.statusMessage =
|
||||||
|
"Dumped native traces (see console and fields below).";
|
||||||
|
} catch (error) {
|
||||||
|
logger.error("[ShareTarget] Failed to dump native traces:", error);
|
||||||
|
this.statusMessage = `Failed to dump native traces: ${
|
||||||
|
error instanceof Error ? error.message : String(error)
|
||||||
|
}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TEMPORARY SHARE TARGET DIAGNOSTICS
|
||||||
|
/**
|
||||||
|
* Clear the native Share Extension trace log and the displayed value.
|
||||||
|
*/
|
||||||
|
async clearExtensionTrace(): Promise<void> {
|
||||||
|
try {
|
||||||
|
await SharedImage.clearShareExtensionTrace();
|
||||||
|
this.extensionTrace = "";
|
||||||
|
this.statusMessage = "Share Extension trace cleared.";
|
||||||
|
} catch (error) {
|
||||||
|
logger.error("[ShareTarget] Failed to clear extension trace:", error);
|
||||||
|
this.statusMessage = `Failed to clear Share Extension trace: ${
|
||||||
|
error instanceof Error ? error.message : String(error)
|
||||||
|
}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TEMPORARY SHARE TARGET DIAGNOSTICS
|
||||||
|
/**
|
||||||
|
* Clear the native app launch trace log and the displayed value.
|
||||||
|
*/
|
||||||
|
async clearAppLaunchTrace(): Promise<void> {
|
||||||
|
try {
|
||||||
|
await SharedImage.clearAppLaunchTrace();
|
||||||
|
this.appLaunchTrace = "";
|
||||||
|
this.statusMessage = "App Launch trace cleared.";
|
||||||
|
} catch (error) {
|
||||||
|
logger.error("[ShareTarget] Failed to clear app launch trace:", error);
|
||||||
|
this.statusMessage = `Failed to clear App Launch trace: ${
|
||||||
|
error instanceof Error ? error.message : String(error)
|
||||||
|
}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -112,6 +112,21 @@
|
|||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- TEMPORARY SHARE TARGET DIAGNOSTICS -->
|
||||||
|
<div class="mt-8">
|
||||||
|
<h2 class="text-xl font-bold mb-4">Share Target Diagnostics</h2>
|
||||||
|
<p class="text-sm text-gray-600 mb-3">
|
||||||
|
Temporary debug panel for the iOS Share Target investigation (dump/clear
|
||||||
|
native traces).
|
||||||
|
</p>
|
||||||
|
<router-link
|
||||||
|
:to="{ name: 'share-target-debug' }"
|
||||||
|
class="block w-full text-center text-md bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md"
|
||||||
|
>
|
||||||
|
Open Share Target Debug Panel
|
||||||
|
</router-link>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- URL Flow Testing Section -->
|
<!-- URL Flow Testing Section -->
|
||||||
<div class="mt-8">
|
<div class="mt-8">
|
||||||
<h2 class="text-xl font-bold mb-4">URL Flow Testing</h2>
|
<h2 class="text-xl font-bold mb-4">URL Flow Testing</h2>
|
||||||
|
|||||||
Reference in New Issue
Block a user