Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions NativeAppTemplate.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@
01D85B462E07F15400A95798 /* PasswordEditViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D85B452E07F15400A95798 /* PasswordEditViewModel.swift */; };
01D85B482E07F16100A95798 /* SettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D85B472E07F16100A95798 /* SettingsViewModel.swift */; };
01D85B4A2E07F16900A95798 /* ShopkeeperEditViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D85B492E07F16900A95798 /* ShopkeeperEditViewModel.swift */; };
01D85BA72E081C6D00A95798 /* ScanViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D85BA62E081C6D00A95798 /* ScanViewModel.swift */; };
01D8AE8B2AB453C1009AFFBA /* ShopBasicSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D8AE8A2AB453C1009AFFBA /* ShopBasicSettingsView.swift */; };
01DCE23F298FA3B300BA311D /* ShopListCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01DCE23E298FA3B300BA311D /* ShopListCardView.swift */; };
01E0A59C25BD088600298D35 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E0A59125BD087E00298D35 /* SettingsView.swift */; };
Expand Down Expand Up @@ -312,6 +313,7 @@
01D85B452E07F15400A95798 /* PasswordEditViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordEditViewModel.swift; sourceTree = "<group>"; };
01D85B472E07F16100A95798 /* SettingsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewModel.swift; sourceTree = "<group>"; };
01D85B492E07F16900A95798 /* ShopkeeperEditViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopkeeperEditViewModel.swift; sourceTree = "<group>"; };
01D85BA62E081C6D00A95798 /* ScanViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanViewModel.swift; sourceTree = "<group>"; };
01D8AE8A2AB453C1009AFFBA /* ShopBasicSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopBasicSettingsView.swift; sourceTree = "<group>"; };
01DCE23E298FA3B300BA311D /* ShopListCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopListCardView.swift; sourceTree = "<group>"; };
01E0A59125BD087E00298D35 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -437,6 +439,7 @@
children = (
0135E7152D7E33F9004AD8FA /* CompleteScanResultView.swift */,
0135E7162D7E33F9004AD8FA /* ScanView.swift */,
01D85BA62E081C6D00A95798 /* ScanViewModel.swift */,
0135E7172D7E33F9004AD8FA /* ShowTagInfoScanResultView.swift */,
);
path = Scan;
Expand Down Expand Up @@ -958,6 +961,7 @@
"",
"",
"",
"",
);
};
/* End PBXShellScriptBuildPhase section */
Expand Down Expand Up @@ -1033,6 +1037,7 @@
0182D39A25B4424B001E881D /* LoggedInShopkeeperKeychainStore.swift in Sources */,
01ED197B2A037B9E00CD4735 /* AppTabView.swift in Sources */,
0110A1612AC81978003EDCBA /* ResendConfirmationInstructionsView.swift in Sources */,
01D85BA72E081C6D00A95798 /* ScanViewModel.swift in Sources */,
01E0A62225BD4A7800298D35 /* Shopkeeper+Backdoor.swift in Sources */,
0106413C29A9EDFF00B46FED /* AccountPasswordRequest.swift in Sources */,
0172035625A9642E008FD63B /* ShopAdapter.swift in Sources */,
Expand Down
34 changes: 17 additions & 17 deletions NativeAppTemplate/NFCManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
import Foundation
import CoreNFC

protocol NFCManagerProtocol {
protocol NFCManagerProtocol: Sendable {
@MainActor var scanResult: Result<ItemTagData, Error>? { get }
@MainActor var isScanResultChanged: Bool { get }
@MainActor var isScanResultChangedForTesting: Bool { get }

func startReading() async
func startReadingForTesting() async

Expand All @@ -21,7 +21,7 @@ protocol NFCManagerProtocol {

final class NFCManager: NSObject, ObservableObject, @unchecked Sendable {
@MainActor static let shared = NFCManager()

@MainActor @Published var scanResult: Result<ItemTagData, Error>?
@MainActor @Published var isScanResultChanged = false
@MainActor @Published var isScanResultChangedForTesting = false
Expand Down Expand Up @@ -61,7 +61,7 @@ final class NFCManager: NSObject, ObservableObject, @unchecked Sendable {
case readForTesting
case write
}

var nfcSession: NFCNDEFReaderSession?
var nfcOperation = NFCOperation.read
private var userNdefMessage: NFCNDEFMessage?
Expand All @@ -85,7 +85,7 @@ extension NFCManager: NFCManagerProtocol {
nfcOperation = .readForTesting
startSesstion()
}

func startWriting(ndefMessage: NFCNDEFMessage, isLock: Bool) async {
nfcOperation = .write
userNdefMessage = ndefMessage
Expand All @@ -102,22 +102,22 @@ extension NFCManager: NFCManagerProtocol {
extension NFCManager: NFCNDEFReaderSessionDelegate {
func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
}

func readerSession(_ session: NFCNDEFReaderSession, didDetect tags: [NFCNDEFTag]) {
guard let tag = tags.first else { return }

session.connect(to: tag) { error in
if let error = error {
session.invalidate(errorMessage: "Connection error: \(error.localizedDescription)")
return
}

tag.queryNDEFStatus { status, capacity, error in
if let error = error {
session.invalidate(errorMessage: "Checking NDEF status error: \(error.localizedDescription)")
return
}

switch status {
case .notSupported:
session.invalidate(errorMessage: String.tagIsNotNdefFormatted)
Expand Down Expand Up @@ -145,14 +145,14 @@ extension NFCManager: NFCNDEFReaderSessionDelegate {

self.write(session: session, tag: tag)
}

@unknown default:
session.invalidate(errorMessage: String.unknownNdefStatus)
}
}
}
}

private func read(
session: NFCNDEFReaderSession,
tag: NFCNDEFTag,
Expand All @@ -169,7 +169,7 @@ extension NFCManager: NFCNDEFReaderSessionDelegate {
}
return
}

guard let message else {
session.invalidate(errorMessage: String.noRecrodsFound)
self?.internalScanResult = .failure(ScanResultError.failed(String.tagNotValid))
Expand All @@ -194,10 +194,10 @@ extension NFCManager: NFCNDEFReaderSessionDelegate {
session.invalidate()
}
}

private func write(session: NFCNDEFReaderSession, tag: NFCNDEFTag) {
guard let userNdefMessage = self.userNdefMessage else { return }

write(
session: session,
tag: tag,
Expand All @@ -208,7 +208,7 @@ extension NFCManager: NFCNDEFReaderSessionDelegate {
print(">>> Write: \(userNdefMessage)")
}
}

private func write(
session: NFCNDEFReaderSession,
tag: NFCNDEFTag,
Expand Down Expand Up @@ -243,7 +243,7 @@ extension NFCManager: NFCNDEFReaderSessionDelegate {

private func setResultExtractedFrom(message: NFCNDEFMessage, isReadOnly: Bool, test: Bool) {
let itemTagInfo = Utility.extractItemTagInfoFrom(message: message, test: test)

if itemTagInfo.success {
let itemTagData = ItemTagData(
itemTagId: itemTagInfo.id,
Expand All @@ -258,7 +258,7 @@ extension NFCManager: NFCNDEFReaderSessionDelegate {
}

func readerSessionDidBecomeActive(_ session: NFCNDEFReaderSession) {}

func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
print( "readerSession error: \(error.localizedDescription)")
}
Expand Down
7 changes: 6 additions & 1 deletion NativeAppTemplate/UI/App Root/MainView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,12 @@ private extension MainView {

func scanView() -> ScanView {
.init(
itemTagRepository: dataManager.itemTagRepository
viewModel: ScanViewModel(
itemTagRepository: dataManager.itemTagRepository,
sessionController: dataManager.sessionController,
messageBus: messageBus,
nfcManager: appSingletons.nfcManager
)
)
}

Expand Down
Loading