diff --git a/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md index d10edc97a82e..89d648af5d49 100644 --- a/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md +++ b/packages/in_app_purchase/in_app_purchase_ios/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.2+2 + +* Fix crash when retrieveReceiptWithError gives an error. + ## 0.1.2+1 * Fix wrong data type when cancelling user credentials dialog. diff --git a/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/InAppPurchasePluginTests.m b/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/InAppPurchasePluginTests.m index e259e69d962c..79812f609980 100644 --- a/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/InAppPurchasePluginTests.m +++ b/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/InAppPurchasePluginTests.m @@ -251,6 +251,10 @@ - (void)testRetrieveReceiptDataError { [self waitForExpectations:@[ expectation ] timeout:5]; XCTAssertNotNil(result); XCTAssert([result isKindOfClass:[FlutterError class]]); + NSDictionary* details = ((FlutterError*)result).details; + XCTAssertNotNil(details[@"error"]); + NSNumber* errorCode = (NSNumber*)details[@"error"][@"code"]; + XCTAssertEqual(errorCode, [NSNumber numberWithInteger:99]); } - (void)testRefreshReceiptRequest { diff --git a/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/Stubs.m b/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/Stubs.m index f247a7e4b78a..364505d6754a 100644 --- a/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/Stubs.m +++ b/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/Stubs.m @@ -261,7 +261,15 @@ @implementation FIAPReceiptManagerStub : FIAPReceiptManager - (NSData *)getReceiptData:(NSURL *)url error:(NSError **)error { if (self.returnError) { - *error = [[NSError alloc] init]; + *error = [NSError errorWithDomain:@"test" + code:1 + userInfo:@{ + @"name" : @"test", + @"houseNr" : @5, + @"error" : [[NSError alloc] initWithDomain:@"internalTestDomain" + code:99 + userInfo:nil] + }]; return nil; } NSString *originalString = [NSString stringWithFormat:@"test"]; diff --git a/packages/in_app_purchase/in_app_purchase_ios/ios/Classes/FIAPReceiptManager.m b/packages/in_app_purchase/in_app_purchase_ios/ios/Classes/FIAPReceiptManager.m index 8038304d178f..b359b415d873 100644 --- a/packages/in_app_purchase/in_app_purchase_ios/ios/Classes/FIAPReceiptManager.m +++ b/packages/in_app_purchase/in_app_purchase_ios/ios/Classes/FIAPReceiptManager.m @@ -4,6 +4,7 @@ #import "FIAPReceiptManager.h" #import +#import "FIAObjectTranslator.h" @interface FIAPReceiptManager () // Gets the receipt file data from the location of the url. Can be nil if @@ -20,10 +21,10 @@ - (NSString *)retrieveReceiptWithError:(FlutterError **)flutterError { NSData *receipt = [self getReceiptData:receiptURL error:&receiptError]; if (!receipt || receiptError) { if (flutterError) { - *flutterError = [FlutterError - errorWithCode:[[NSString alloc] initWithFormat:@"%li", (long)receiptError.code] - message:receiptError.domain - details:receiptError.userInfo]; + NSDictionary *errorMap = [FIAObjectTranslator getMapFromNSError:receiptError]; + *flutterError = [FlutterError errorWithCode:errorMap[@"code"] + message:errorMap[@"domain"] + details:errorMap[@"userInfo"]]; } return nil; } diff --git a/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml index 69afe52b6ac3..c277686fb7c7 100644 --- a/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: in_app_purchase_ios description: An implementation for the iOS platform of the Flutter `in_app_purchase` plugin. This uses the iOS StoreKit Framework. repository: https://github.com/flutter/plugins/tree/master/packages/in_app_purchase/in_app_purchase_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 0.1.2+1 +version: 0.1.2+2 environment: sdk: ">=2.12.0 <3.0.0"