From 5b908c3c7e59af8272882e5b515cd96b47146a97 Mon Sep 17 00:00:00 2001 From: Jude Ganihu Date: Fri, 4 Apr 2025 10:46:48 +0100 Subject: [PATCH 1/7] (FlutterwavePayViewController.swift): replaced forced unwrapping of textfield.text with optional binding(if let) --- .../FlutterWave+UIPickerView.swift | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift b/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift index 8202730..810ca22 100644 --- a/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift +++ b/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift @@ -29,11 +29,14 @@ extension FlutterwavePayViewController : UITextFieldDelegate,CardSelect,UIPicker item.backgroundColor = .white } - for (index,_) in (textField.text?.enumerated())!{ - pinViewContainer.pins[index].backgroundColor = .gray - } - if ((textField.text?.count)! == 4){ - textField.resignFirstResponder() + if let pinText = textField.text { + + for (index,_) in (textField.text?.enumerated())!{ + pinViewContainer.pins[index].backgroundColor = .gray + } + if ((textField.text?.count)! == 4){ + textField.resignFirstResponder() + } } } From c1f385573ce8bb4a52cdee529a24ed082ac704f5 Mon Sep 17 00:00:00 2001 From: Jude Ganihu Date: Fri, 4 Apr 2025 10:57:27 +0100 Subject: [PATCH 2/7] (FlutterwavePayViewController.swift): replaced forced unwrapping of textfield.text with optional binding --- .../UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift b/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift index 810ca22..c981e31 100644 --- a/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift +++ b/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift @@ -29,12 +29,12 @@ extension FlutterwavePayViewController : UITextFieldDelegate,CardSelect,UIPicker item.backgroundColor = .white } - if let pinText = textField.text { + if let text = textField.text { - for (index,_) in (textField.text?.enumerated())!{ + for (index, _) in text.prefix(pinViewContainer.pins.count).enumerated() { pinViewContainer.pins[index].backgroundColor = .gray } - if ((textField.text?.count)! == 4){ + if text.count == pinViewContainer.pins.count { textField.resignFirstResponder() } } From 90565211f53066b1c99ef8e96c24daddf2d72e28 Mon Sep 17 00:00:00 2001 From: Jude Ganihu Date: Fri, 4 Apr 2025 11:04:53 +0100 Subject: [PATCH 3/7] (FlutterwavePayViewController.swift): added safety check to avoid partial data assignmeny --- .../NewExtraFlutterwave/FlutterWave+UIPickerView.swift | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift b/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift index c981e31..67468a6 100644 --- a/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift +++ b/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift @@ -41,12 +41,9 @@ extension FlutterwavePayViewController : UITextFieldDelegate,CardSelect,UIPicker } if (textField == debitCardView.cardNumberTextField){ - if let count = textField.text?.count { - if count == 6{ - flutterwaveCardClient.amount = self.amount - flutterwaveCardClient.cardfirst6 = textField.text - - } + if let text = textField.text, text.count == 6 { + flutterwaveCardClient.amount = self.amount + flutterwaveCardClient.cardfirst6 = text } } } From c8933665442b54d2fa2bb56bab25a39c300ba4f6 Mon Sep 17 00:00:00 2001 From: Jude Ganihu Date: Fri, 4 Apr 2025 11:08:53 +0100 Subject: [PATCH 4/7] (FlutterwavePayViewController.swift): remove extra spaces --- .../UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift b/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift index 67468a6..462dde0 100644 --- a/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift +++ b/FlutterwaveSDK/Classes/UI/NewExtraFlutterwave/FlutterWave+UIPickerView.swift @@ -30,7 +30,6 @@ extension FlutterwavePayViewController : UITextFieldDelegate,CardSelect,UIPicker } if let text = textField.text { - for (index, _) in text.prefix(pinViewContainer.pins.count).enumerated() { pinViewContainer.pins[index].backgroundColor = .gray } @@ -38,8 +37,8 @@ extension FlutterwavePayViewController : UITextFieldDelegate,CardSelect,UIPicker textField.resignFirstResponder() } } - } + if (textField == debitCardView.cardNumberTextField){ if let text = textField.text, text.count == 6 { flutterwaveCardClient.amount = self.amount From 518771d5a3da209a71696624073fb106061e66d3 Mon Sep 17 00:00:00 2001 From: Cornelius Ashley-Osuzoka <59456456+corneliusyaovi@users.noreply.github.com> Date: Tue, 8 Apr 2025 10:31:03 +0100 Subject: [PATCH 5/7] Bumped version number --- FlutterwaveSDK.podspec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FlutterwaveSDK.podspec b/FlutterwaveSDK.podspec index ff6ddd0..da85667 100644 --- a/FlutterwaveSDK.podspec +++ b/FlutterwaveSDK.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = 'FlutterwaveSDK' - s.version = '1.2.7' + s.version = '1.4.5' s.summary = 'FlutterwaveSDK' # This description is used to generate tags and improve search results. @@ -25,7 +25,7 @@ Pod::Spec.new do |s| s.screenshots = 'https://github.com/Flutterwave/FlutterwaveSDK/blob/master/FlutterwaveSDK/Assets/Assets.xcassets/FlutterwaveScreenshot.imageset/FlutterwaveScreenshot.png' s.license = { :type => 'MIT', :file => 'LICENSE' } s.author = { 'Flutterwave Developers' => 'developers@flutterwavego.com' } - s.source = { :git => 'https://github.com/Flutterwave/FlutterwaveSDK.git', :tag => '1.2.7'} + s.source = { :git => 'https://github.com/Flutterwave/FlutterwaveSDK.git', :tag => '1.4.5'} s.social_media_url = 'https://twitter.com/FlutterwaveEng' s.ios.deployment_target = '11.0' From 0bca27b0658e010510a6963f7e49dd40b341da39 Mon Sep 17 00:00:00 2001 From: Ismail Ibrahim Date: Tue, 16 Sep 2025 09:23:40 +0100 Subject: [PATCH 6/7] fix(mpesaverifymodel): include transaction id payload --- FlutterwaveSDK/Classes/Model/MpesaVerifyModel.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/FlutterwaveSDK/Classes/Model/MpesaVerifyModel.swift b/FlutterwaveSDK/Classes/Model/MpesaVerifyModel.swift index 0d4ad33..ca526ab 100644 --- a/FlutterwaveSDK/Classes/Model/MpesaVerifyModel.swift +++ b/FlutterwaveSDK/Classes/Model/MpesaVerifyModel.swift @@ -24,6 +24,7 @@ struct MpesaVerifyResponse: Codable { // MARK: - MpesaVerifyData struct MpesaVerifyData: Codable { + let id: Int? let txRef, flwRef: String? let amount, chargedAmount: Double? let appFee: Double? @@ -34,6 +35,7 @@ struct MpesaVerifyData: Codable { let customer: Customer? enum CodingKeys: String, CodingKey { + case id case txRef = "tx_ref" case flwRef = "flw_ref" case amount @@ -48,7 +50,7 @@ struct MpesaVerifyData: Codable { extension MpesaVerifyData{ func toFlutterResponse() -> FlutterwaveDataResponse{ - return FlutterwaveDataResponse(txRef: txRef, flwRef: flwRef, deviceFingerprint: nil, amount: amount, chargedAmount: chargedAmount, appFee: appFee, merchantFee: merchantFee, processorResponse: processorResponse, authModel: nil, currency: currency, ip: ip, narration: narration, status: status, authURL:nil, paymentType: nil, fraudStatus: nil, chargeType: nil, createdAt: nil, plan: nil, id: nil, accountID: nil, customer: customer, card: nil) + return FlutterwaveDataResponse(txRef: txRef, flwRef: flwRef, deviceFingerprint: nil, amount: amount, chargedAmount: chargedAmount, appFee: appFee, merchantFee: merchantFee, processorResponse: processorResponse, authModel: nil, currency: currency, ip: ip, narration: narration, status: status, authURL:nil, paymentType: nil, fraudStatus: nil, chargeType: nil, createdAt: nil, plan: nil, id: id, accountID: nil, customer: customer, card: nil) } } From 0eb1d72a041857fcbeb970d0a04f51d40dc0de42 Mon Sep 17 00:00:00 2001 From: Ismail Ibrahim Date: Tue, 16 Sep 2025 09:24:23 +0100 Subject: [PATCH 7/7] fix(pwbtverify): include transaction id payload --- FlutterwaveSDK/Classes/Model/PwbtVerify.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/FlutterwaveSDK/Classes/Model/PwbtVerify.swift b/FlutterwaveSDK/Classes/Model/PwbtVerify.swift index 23b5464..cf6d8f6 100644 --- a/FlutterwaveSDK/Classes/Model/PwbtVerify.swift +++ b/FlutterwaveSDK/Classes/Model/PwbtVerify.swift @@ -24,6 +24,7 @@ struct PwbtVerifyResponse: Codable { // MARK: - PwbtVerifyData struct PwbtVerifyData: Codable { + let id: Int? let txRef, flwRef: String? let amount: Double? let chargedAmount, appFee: Double? @@ -35,6 +36,7 @@ struct PwbtVerifyData: Codable { let customer: Customer? enum CodingKeys: String, CodingKey { + case id case txRef = "tx_ref" case flwRef = "flw_ref" case amount @@ -52,7 +54,7 @@ struct PwbtVerifyData: Codable { extension PwbtVerifyData { func toFlutterResponse() -> FlutterwaveDataResponse{ - return FlutterwaveDataResponse(txRef: txRef, flwRef: flwRef, deviceFingerprint: nil, amount: amount, chargedAmount: chargedAmount, appFee: appFee, merchantFee: merchantFee, processorResponse: processorResponse, authModel: authModel, currency: currency, ip: ip, narration: narration, status: status, authURL: nil, paymentType: paymentType, fraudStatus: nil, chargeType: nil, createdAt: nil, plan: nil, id: nil, accountID: nil, customer: customer, card: nil) + return FlutterwaveDataResponse(txRef: txRef, flwRef: flwRef, deviceFingerprint: nil, amount: amount, chargedAmount: chargedAmount, appFee: appFee, merchantFee: merchantFee, processorResponse: processorResponse, authModel: authModel, currency: currency, ip: ip, narration: narration, status: status, authURL: nil, paymentType: paymentType, fraudStatus: nil, chargeType: nil, createdAt: nil, plan: nil, id: id, accountID: nil, customer: customer, card: nil) } }