{"record":{"id":"da44ed53fba2519b","repo":"Wei-Shaw/sub2api","slug":"live-attestation-currently-requires-apple-silicon","errorCode":null,"errorMessage":"live attestation currently requires Apple Silicon; Intel macOS is not supported","messagePattern":"live attestation currently requires Apple Silicon; Intel macOS is not supported","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/internal/platform/liveattestation/attestation_darwin.go","lineNumber":70,"sourceCode":"\tif home, err := os.UserHomeDir(); err == nil && strings.TrimSpace(home) != \"\" {\n\t\tpaths = append(paths, filepath.Join(home, \"Applications\", \"ChatGPT.app\"))\n\t}\n\treturn &darwinProvider{\n\t\tappSessionID: uuid.NewString(),\n\t\tappPaths:     paths,\n\t}\n}\n\nfunc (p *darwinProvider) Check(ctx context.Context) error {\n\tcheckCtx, cancel := context.WithTimeout(ctx, attestationTimeout)\n\tdefer cancel()\n\t_, _, _, err := p.resolveRuntime(checkCtx)\n\treturn err\n}\n\nfunc (p *darwinProvider) resolveRuntime(ctx context.Context) (string, string, string, error) {\n\tif runtime.GOARCH != \"arm64\" {\n\t\treturn \"\", \"\", \"\", errors.New(\"live attestation currently requires Apple Silicon; Intel macOS is not supported\")\n\t}\n\tappPath, err := p.findApplication()\n\tif err != nil {\n\t\treturn \"\", \"\", \"\", err\n\t}\n\tresourcesPath := filepath.Join(appPath, \"Contents\", \"Resources\")\n\tnodePath := filepath.Join(resourcesPath, \"cua_node\", \"bin\", \"node\")\n\tmodulePath := filepath.Join(resourcesPath, \"native\", \"devicecheck.node\")\n\tfor filePath, label := range map[string]string{\n\t\tnodePath:   \"bundled Node.js runtime\",\n\t\tmodulePath: \"DeviceCheck native module\",\n\t} {\n\t\tif info, statErr := os.Stat(filePath); statErr != nil || info.IsDir() {\n\t\t\treturn \"\", \"\", \"\", fmt.Errorf(\"%w: ChatGPT app is missing its %s\", ErrChatGPTAppMissing, label)\n\t\t}\n\t}\n\tbundleID, err := readBundleIdentifier(ctx, appPath)\n\tif err != nil {","sourceCodeStart":52,"sourceCodeEnd":88,"githubUrl":"https://github.com/Wei-Shaw/sub2api/blob/073e92d17178a1ccdb0a27017f572f10c9c7ab62/backend/internal/platform/liveattestation/attestation_darwin.go#L52-L88","documentation":"The darwin attestation provider's resolveRuntime refuses to run when runtime.GOARCH != 'arm64'. DeviceCheck attestation in this codepath depends on the ChatGPT app's bundled Apple-Silicon native module, so Intel Macs (amd64) are explicitly unsupported even though the OS is macOS.","triggerScenarios":"Running the binary on an Intel Mac (or under Rosetta forcing GOARCH=amd64) and invoking Check or Generate on the live provider; the first line of resolveRuntime returns this error before any filesystem probing.","commonSituations":"Older Intel MacBook deployments; universal binaries launched under Rosetta; CI on Intel macOS runners; team members with mixed Mac hardware.","solutions":["Move Live serving to an Apple Silicon Mac (M1/M2/M3/M4).","If on Apple Silicon but still failing, ensure the Go toolchain targets arm64 natively (check `go env GOARCH`; avoid Rosetta terminals).","Disable Live accounts on Intel hosts and route that traffic to a supported deployment.","Surface errors.Is on this string early (startup Check) rather than at request time."],"exampleFix":"# before: running under Rosetta (GOARCH=amd64 on an M-series Mac)\narch -x86_64 ./sub2api\n\n# after: run natively\n./sub2api   # GOARCH=arm64","handlingStrategy":"validation","validationCode":"if runtime.GOOS == \"darwin\" && runtime.GOARCH != \"arm64\" {\n    return errors.New(\"live attestation requires Apple Silicon; this host is \" + runtime.GOARCH)\n}","typeGuard":null,"tryCatchPattern":"if err := provider.Check(ctx); err != nil {\n    if strings.Contains(err.Error(), \"Apple Silicon\") {\n        return configError(\"migrate Live traffic to an M-series Mac\")\n    }\n    return err\n}","preventionTips":["Run natively (arm64), not under Rosetta","Check `go env GOARCH` in deploy scripts","Standardize Live hosts on Apple Silicon"],"tags":["platform","apple-silicon","macos","live","attestation"],"backgroundTag":null,"analyzedSha":"073e92d17178a1ccdb0a27017f572f10c9c7ab62","analyzedAt":"2026-08-15T14:33:00.750Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}