Skip to content

Audit: surface silent .ipa import copy failure#56

Merged
The-Big-Mini merged 1 commit into
developfrom
ClaudeCode
Jul 2, 2026
Merged

Audit: surface silent .ipa import copy failure#56
The-Big-Mini merged 1 commit into
developfrom
ClaudeCode

Conversation

@The-Big-Mini

Copy link
Copy Markdown
Owner

Summary

Broad bug audit of the app and this session's recently merged work. The codebase is already heavily audited; the sweep confirmed the risk areas are sound and found one real gap, now fixed.

Type of change

  • Bug fix — resolves incorrect behavior without changing existing APIs

Changes

  • Surface .ipa import copy failure — the recently added security-scope copy of a shared .ipa (SceneDelegate) logged copy failures but showed nothing to the user, so a failed import looked like a no-op. It now shows a "Failed to import app." toast with the underlying error, mirroring the pairing-file failure path right beside it. Satisfies the never-swallow-errors rule (log domain+code and set a visible error state).

Audit notes (verified clean, no change needed)

  • Risk patterns swept in AltStore + AltStoreCore: try! / as! / .first! / removeFirst / removeLast / DispatchQueue.main.sync / fatalError — all guarded or unreachable. UpdatesView.updateQueue.removeFirst() is guarded by the updateQueue.first entry check and an isEmpty guard in the async completion; URL+Normalized removeLast/removeFirst(4) are prefix/suffix-guarded; ResignAppOperation's DispatchQueue.main.sync is gated on !Thread.isMainThread.
  • Block-based NotificationCenter observers: none capture self strongly without [weak self].
  • This session's merged work re-checked for logic bugs: expiry countdown (calendar-day text now matches the color thresholds), screenshot uniform-fill + .sheet(item:) preview, AppIconImageView shadow/luminosity override (does not collide with any external background set), cert-serial-mismatch refresh guard, and the Cache Management screen (Swift 6.2 concurrency is sound; the internal-cache delete is a faithful upstream port whose destructive warning is accurate — InstalledApp.fileURL does live under appsDirectoryURL/<bundleID>).
  • BackgroundTaskManager.init uses fatalError on the audio-file catch; left as-is (unreachable for the bundled, valid Silence.m4a, and the audio engine is load-bearing for the keep-alive per regression-watch — restructuring it for a dead path adds more risk than value).

Testing

  • Not built here (no macOS/Xcode); CI Build and upload MiniStore is the compile check. The change reuses the existing ToastView pattern already used for pairing-file failures in the same file.

Checklist

  • This branch targets develop (never main)
  • I read the full file(s) before editing and followed the conventions in CLAUDE.md
  • The project builds and existing behavior is preserved
  • No secrets, signing identities, or personal data are included in this change

🤖 Generated with Claude Code


Generated by Claude Code

Audit follow-up. The recently added security-scope copy of an imported .ipa
logged copy failures but showed nothing to the user, so a failed import looked
like a no-op. Mirror the adjacent pairing-file failure path: show a 'Failed to
import app.' toast with the underlying error. Satisfies the never-swallow-errors
rule (log domain+code AND set a visible error state).

https://claude.ai/code/session_01PT8zpkUrgTRaGeKmbvVyNe
github-actions Bot added a commit that referenced this pull request Jul 2, 2026
@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Download the artifacts for this pull request (nightly.link):

@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Builds for this Pull Request are available at
MiniStore-0.6.5-pr.56.b8d14d5-dSYMs
MiniStore-0.6.5-pr.56.b8d14d5
build-logs-0.6.5-pr.56.b8d14d5
Have a nice day.

@The-Big-Mini The-Big-Mini merged commit 05caa0f into develop Jul 2, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant