Skip to content
This repository was archived by the owner on Mar 7, 2026. It is now read-only.

Commit 6145210

Browse files
authored
Fix bug
1 parent ae5370b commit 6145210

File tree

2 files changed

+28
-42
lines changed

2 files changed

+28
-42
lines changed

Sources/prostore/UIComponents.swift

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,14 @@ struct CertificateDocumentPicker: UIViewControllerRepresentable {
3535
let onPick: (URL) -> Void
3636

3737
func makeUIViewController(context: Context) -> UIDocumentPickerViewController {
38-
let supportedTypes: [UTType]
39-
38+
let types: [UTType]
4039
switch kind {
4140
case .p12:
42-
supportedTypes = [UTType(filenameExtension: "p12")!]
41+
types = [.pkcs12]
4342
case .prov:
44-
supportedTypes = [UTType(filenameExtension: "mobileprovision")!]
43+
types = [UTType(filenameExtension: "mobileprovision")!] // Custom UTType for .mobileprovision
4544
}
46-
47-
let picker = UIDocumentPickerViewController(forOpeningContentTypes: supportedTypes, asCopy: true)
45+
let picker = UIDocumentPickerViewController(forOpeningContentTypes: types, asCopy: true) // Import mode: copies file, no scope needed
4846
picker.delegate = context.coordinator
4947
return picker
5048
}
@@ -57,14 +55,13 @@ struct CertificateDocumentPicker: UIViewControllerRepresentable {
5755

5856
class Coordinator: NSObject, UIDocumentPickerDelegate {
5957
let onPick: (URL) -> Void
60-
6158
init(onPick: @escaping (URL) -> Void) {
6259
self.onPick = onPick
6360
}
64-
6561
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
66-
guard let url = urls.first else { return }
67-
onPick(url)
62+
if let url = urls.first {
63+
onPick(url)
64+
}
6865
}
6966
}
7067
}
@@ -96,11 +93,5 @@ enum PickerKind: Identifiable {
9693

9794
enum CertificatePickerKind: Identifiable {
9895
case p12, prov
99-
100-
var id: Int {
101-
switch self {
102-
case .p12: return 0
103-
case .prov: return 1
104-
}
105-
}
96+
var id: Self { self }
10697
}

Sources/prostore/views/CertificateView.swift

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -443,43 +443,38 @@ struct AddCertificateView: View {
443443

444444
private func saveCertificate() {
445445
guard let p12URL = p12File?.url, let provURL = provFile?.url else { return }
446-
446+
447447
isChecking = true
448448
errorMessage = ""
449-
449+
450450
let workItem: DispatchWorkItem = DispatchWorkItem {
451451
do {
452452
var p12Data: Data
453453
var provData: Data
454-
if editingCertificate != nil {
454+
if self.editingCertificate != nil {
455455
p12Data = try Data(contentsOf: p12URL)
456456
provData = try Data(contentsOf: provURL)
457457
} else {
458-
guard p12URL.startAccessingSecurityScopedResource(),
459-
provURL.startAccessingSecurityScopedResource() else {
460-
DispatchQueue.main.async {
461-
isChecking = false
462-
errorMessage = "Security-scoped resource access failed."
463-
}
464-
return
465-
}
458+
// Call start, but don't guard—proceed to read anyway
459+
let p12Scoped = p12URL.startAccessingSecurityScopedResource()
460+
let provScoped = provURL.startAccessingSecurityScopedResource()
466461
defer {
467-
p12URL.stopAccessingSecurityScopedResource()
468-
provURL.stopAccessingSecurityScopedResource()
462+
if p12Scoped { p12URL.stopAccessingSecurityScopedResource() }
463+
if provScoped { provURL.stopAccessingSecurityScopedResource() }
469464
}
470465
p12Data = try Data(contentsOf: p12URL)
471466
provData = try Data(contentsOf: provURL)
472467
}
473-
474-
let checkResult = CertificatesManager.check(p12Data: p12Data, password: password, mobileProvisionData: provData)
468+
469+
let checkResult = CertificatesManager.check(p12Data: p12Data, password: self.password, mobileProvisionData: provData)
475470
var dispatchError: String?
476-
471+
477472
switch checkResult {
478473
case .success(.success):
479-
if let folder = editingCertificate?.folderName {
480-
try CertificateFileManager.shared.updateCertificate(folderName: folder, p12Data: p12Data, provData: provData, password: password, displayName: displayName)
474+
if let folder = self.editingCertificate?.folderName {
475+
try CertificateFileManager.shared.updateCertificate(folderName: folder, p12Data: p12Data, provData: provData, password: self.password, displayName: self.displayName)
481476
} else {
482-
_ = try CertificateFileManager.shared.saveCertificate(p12Data: p12Data, provData: provData, password: password, displayName: displayName)
477+
_ = try CertificateFileManager.shared.saveCertificate(p12Data: p12Data, provData: provData, password: self.password, displayName: self.displayName)
483478
}
484479
case .success(.incorrectPassword):
485480
dispatchError = "Incorrect Password"
@@ -488,19 +483,19 @@ struct AddCertificateView: View {
488483
case .failure(let error):
489484
dispatchError = "Error: \(error.localizedDescription)"
490485
}
491-
486+
492487
DispatchQueue.main.async {
493-
isChecking = false
488+
self.isChecking = false
494489
if let err = dispatchError {
495-
errorMessage = err
490+
self.errorMessage = err
496491
} else {
497-
dismiss()
492+
self.dismiss()
498493
}
499494
}
500495
} catch {
501496
DispatchQueue.main.async {
502-
isChecking = false
503-
errorMessage = "Failed to read files or save: \(error.localizedDescription)"
497+
self.isChecking = false
498+
self.errorMessage = "Failed to read files or save: \(error.localizedDescription)"
504499
}
505500
}
506501
}

0 commit comments

Comments
 (0)