Initial commit

This commit is contained in:
Wira Basalamah
2026-04-24 04:55:24 +07:00
commit 8f0b001501
128 changed files with 9366 additions and 0 deletions

View File

@ -0,0 +1,38 @@
//
// ApduResponse.swift
// Emoney Info
//
// Created by Wira Irawan on 24/07/24.
//
import Foundation
class ApduResponse {
var data : Data?
var sw1 : UInt8?
var sw2 : UInt8?
func setData(_data : Data){
self.data = _data
}
func setSw1(_sw1 : UInt8){
self.sw1 = _sw1
}
func setSw2(_sw2 : UInt8){
self.sw2 = _sw2
}
func getSw1() -> UInt8{
return sw1!
}
func getSw2() -> UInt8{
return sw2!
}
func getData() -> Data{
return data!
}
}

View File

@ -0,0 +1,126 @@
import Foundation
import CoreNFC
@available(iOS 13.0, *)
extension NFCISO7816APDU {
func toHexString() -> String {
let dataFieldInHex = (self.data ?? Data(_ : [])).hexEncodedString()
return String(format:"%02X %02X %02X %02X", self.instructionClass, self.instructionCode, self.p1Parameter, self.p2Parameter) + " " + dataFieldInHex + String(format:"%02X", self.expectedResponseLength) + " "
}
}
typealias CompletionHandler = (_ response:ApduResponse) -> Void
@available(iOS 13.0, *)
public class ApduRunner: NSObject, NFCTagReaderSessionDelegate {
public static let NFC_TAG_CONNECTED_EVENT:String = "nfcTagConnected"
var sessionEx: NFCTagReaderSession?
var callback: ApduCallback?
var nfcApi : UnifiedNfcApi?
func setApduCallback(callback : ApduCallback) {
self.callback = callback
}
func setUnifiedNfcApi(nfcApi : UnifiedNfcApi) {
self.nfcApi = nfcApi
}
func startScan() {
let langCode = Locale.current.languageCode
self.sessionEx = NFCTagReaderSession(pollingOption: [.iso14443, .iso18092], delegate: self)
self.sessionEx?.alertMessage = "scanMessage".localizeString(string: langCode!)
self.sessionEx?.begin()
}
public func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag]) {
guard self.callback != nil else {
debugLog("NfcCallback is empty.")
return
}
guard self.sessionEx != nil else {
return
}
guard tags.count > 0 else {
debugLog("Nfc Tag???.")
return
}
if case NFCTag.iso7816(_) = tags.first! {
sessionEx?.connect(to: tags.first!) { [self] (error: Error?) in
if let err = error {
debugLog("Error connecting to Nfc Tag" + err.localizedDescription)
return
}
debugLog("Nfc Tag is connected.")
if (self.callback != nil){
self.callback!.connected(unifiedNfcApi: self.nfcApi!)
}
}
} else if case .feliCa(let feliCaTag) = tags.first! {
sessionEx?.connect(to: tags.first!) { [self] (error: Error?) in
if let err = error {
debugLog("Error connecting to Nfc Tag" + err.localizedDescription)
return
}
// felicaTag = feliCaTag
debugLog("Felica is connected.")
if (self.callback != nil){
debugLog("Felica is connected 2.")
self.callback!.felicaConnected(unifiedNfcApi: self.nfcApi!, tag: feliCaTag)
}
// self.sendFelicaCommand(tag: feliCaTag, session: sessionEx!)
// let idm = feliCaTag.currentIDm.map { String(format: "%.2hhx", $0) }.joined()
// let hexString = "0F06" + idm + "010B30018000"
// print("hex: \(hexString)")
// if let apduData = hexString.hexToData() {
// feliCaTag.sendFeliCaCommand(commandPacket: apduData)
// }
// if (self.callback != nil){
// self.callback!.connected(felicaNfcApi: self.felicaNfcApi!)
// }
}
}
}
func exchangeApdu(apduCommand: NFCISO7816APDU, completionHandler: @escaping CompletionHandler) {
if case let NFCTag.iso7816(nfcTag) = self.sessionEx!.connectedTag! {
nfcTag.sendCommand(apdu: apduCommand) { (response: Data, sw1: UInt8, sw2: UInt8, error: Error?)
in
let resp = ApduResponse()
debugLog("SW1-SW2: " + String(format: "%02X, %02X", sw1, sw2))
resp.setSw1(_sw1: sw1)
resp.setSw2(_sw2: sw2)
resp.setData(_data: response)
completionHandler(resp)
}
}
}
func invalidateSession() {
sessionEx?.invalidate()
}
func invalidateSession(msg : String) {
sessionEx?.invalidate(errorMessage: msg)
}
public func tagReaderSessionDidBecomeActive(_ session: NFCTagReaderSession) {
debugLog("Nfc session is active")
}
public func tagReaderSession(_ session: NFCTagReaderSession, didInvalidateWithError error: Error) {
debugLog("Error happend: " + error.localizedDescription)
NotificationCenter.default.post(name: Notification.Name("stopTimer"), object: nil)
if ((sessionEx?.isReady) != nil){
self.invalidateSession(msg: error.localizedDescription)
}
}
}

View File

@ -0,0 +1,66 @@
//
// Emoney.swift
// Emoney Info
//
// Created by Wira Irawan on 26/07/24.
//
import Foundation
class Emoney {
private var balance: Int = 0
private var cardNumber: String?
private var cardType: String?
private var riwayatList: [RiwayatCard]?
private var tampilRiwayat: Bool = false
private var cardLabel: String?
func getBalance() -> Int {
return self.balance
}
func getCardNumber() -> String {
return self.cardNumber!
}
func getCardType() -> String {
return self.cardType!
}
func getRiwayatList() -> [RiwayatCard] {
return self.riwayatList!
}
func isTampilRiwayat() -> Bool {
return self.tampilRiwayat
}
func setBalance(_ j: Int) {
self.balance = j
}
func setCardNumber(_ str: String) {
self.cardNumber = str
}
func setCardType(_ str: String) {
self.cardType = str
}
func setRiwayatList(_ list: [RiwayatCard]) {
self.riwayatList = list
}
func setTampilRiwayat(_ z: Bool) {
self.tampilRiwayat = z
}
func setCardLabel(_ str: String) {
self.cardLabel = str
}
func getCardLabel() -> String {
return self.cardLabel!
}
}

View File

@ -0,0 +1,124 @@
//
// RiwayatCard.swift
// Emoney Info
//
// Created by Wira Irawan on 25/07/24.
//
import Foundation
class RiwayatCard
//: Comparable
{
// static func < (lhs: RiwayatCard, rhs: RiwayatCard) -> Bool {
// return lhs.valueToCompare > rhs.valueToCompare
// }
//
// static func == (lhs: RiwayatCard, rhs: RiwayatCard) -> Bool {
// return false
// }
private var amount: Int = 0
private var desk: String?
private var jam: String?
private var locationId: String?
private var locationName: String?
private var prosesTipe: Int = 0
private var tanggal: String?
private var title: String?
private var transactionTime : Date?
private var ads : Bool = false
// private var valueToCompare: Date
// init(valueToCompare: Date) {
// self.valueToCompare = valueToCompare
// }
func getAmount() -> Int {
return self.amount
}
func setAmount(_ amount: Int) {
self.amount = amount
}
func getDesk() -> String? {
return self.desk
}
func getJam() -> String? {
return self.jam
}
func setJam(_ str: String) {
self.jam = str
}
func getLocationId() -> String? {
return self.locationId
}
func setLocationId(_ str: String) {
self.locationId = str
}
func getLocationName() -> String? {
return self.locationName
}
func setLocationName(_ str: String) {
self.locationName = str
}
func getProsesTipe() -> Int {
return self.prosesTipe
}
func setProsesTipe(_ proc: Int) {
self.prosesTipe = proc
}
func getTanggal() -> String? {
return self.tanggal
}
func setTanggal(_ str: String) {
self.tanggal = str
}
func getTitle() -> String? {
return self.title
}
func setTitle(_ str: String) {
self.title = str
}
func setTransactionTime(_ date : Date){
self.transactionTime = date
}
func getTransationTime() -> Date?{
return self.transactionTime
}
func setAds(_ ads : Bool){
self.ads = ads
}
func isAds() -> Bool{
return self.ads
}
// func setValueToCompare(_ valueToCompare: Date) {
// self.valueToCompare = valueToCompare
// }
//
// func getValueToCompare() -> Date {
// return self.valueToCompare
// }
}