[in_app_puchase_storekit] handle `appStoreReceiptURL` is nil (#7069)

* handle nil

* versio update
diff --git a/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md
index 5d93cc0..569e071 100644
--- a/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md
+++ b/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.3.5+2
+
+* Fix a crash when `appStoreReceiptURL` is nil.
+
 ## 0.3.5+1
 
 * Uses the new `sharedDarwinSource` flag when available.
diff --git a/packages/in_app_purchase/in_app_purchase_storekit/darwin/Classes/FIAPReceiptManager.m b/packages/in_app_purchase/in_app_purchase_storekit/darwin/Classes/FIAPReceiptManager.m
index fc125da..320e607 100644
--- a/packages/in_app_purchase/in_app_purchase_storekit/darwin/Classes/FIAPReceiptManager.m
+++ b/packages/in_app_purchase/in_app_purchase_storekit/darwin/Classes/FIAPReceiptManager.m
@@ -21,6 +21,9 @@
 
 - (NSString *)retrieveReceiptWithError:(FlutterError **)flutterError {
   NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
+  if (!receiptURL) {
+    return nil;
+  }
   NSError *receiptError;
   NSData *receipt = [self getReceiptData:receiptURL error:&receiptError];
   if (!receipt || receiptError) {
diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/shared/RunnerTests/InAppPurchasePluginTests.m b/packages/in_app_purchase/in_app_purchase_storekit/example/shared/RunnerTests/InAppPurchasePluginTests.m
index 9ace425..f7e6dcd 100644
--- a/packages/in_app_purchase/in_app_purchase_storekit/example/shared/RunnerTests/InAppPurchasePluginTests.m
+++ b/packages/in_app_purchase/in_app_purchase_storekit/example/shared/RunnerTests/InAppPurchasePluginTests.m
@@ -313,6 +313,23 @@
   XCTAssert([result isKindOfClass:[NSString class]]);
 }
 
+- (void)testRetrieveReceiptDataNil {
+  NSBundle *mockBundle = OCMPartialMock([NSBundle mainBundle]);
+  OCMStub(mockBundle.appStoreReceiptURL).andReturn(nil);
+  XCTestExpectation *expectation = [self expectationWithDescription:@"nil receipt data retrieved"];
+  FlutterMethodCall *call = [FlutterMethodCall
+      methodCallWithMethodName:@"-[InAppPurchasePlugin retrieveReceiptData:result:]"
+                     arguments:nil];
+  __block NSDictionary *result;
+  [self.plugin handleMethodCall:call
+                         result:^(id r) {
+                           result = r;
+                           [expectation fulfill];
+                         }];
+  [self waitForExpectations:@[ expectation ] timeout:5];
+  XCTAssertNil(result);
+}
+
 - (void)testRetrieveReceiptDataError {
   XCTestExpectation *expectation = [self expectationWithDescription:@"receipt data retrieved"];
   FlutterMethodCall *call = [FlutterMethodCall
diff --git a/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml
index 3a4b0fc..78ae8b1 100644
--- a/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml
+++ b/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml
@@ -2,7 +2,7 @@
 description: An implementation for the iOS and macOS platforms of the Flutter `in_app_purchase` plugin. This uses the StoreKit Framework.
 repository: https://github.com/flutter/plugins/tree/main/packages/in_app_purchase/in_app_purchase_storekit
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
-version: 0.3.5+1
+version: 0.3.5+2
 
 environment:
   sdk: ">=2.14.0 <3.0.0"