UnityIAP not working after update MacOS 15.4.1 and XCode 16.3

Before the I updated my macos and xcode, Unity IAP worked fine. But since Apple doesn’t accept any update targeting under iOS 18, so I had to update my macOS and XCode to the latest version.

After then, now all Unity IAP functions not working anymore. All purchased transactions go nuts, can’t validate receipts, weird product name displayed in initialization process, purchasing the product just go fail.

These are the full logs from XCode:

UnityIAP UnityEarlyTransactionObserver: Created
UnityIAP UnityEarlyTransactionObserver: Registered for lifecycle events
CrashReporter: initialized
Built from '2020.3/staging' branch, Version '2020.3.38f1 (8f5fde82e2dc)', Build type 'Release', Scripting Backend 'il2cpp'
MemoryManager: Using 'Default' Allocator.
CLIENT OF UIKIT REQUIRES UPDATE: This process does not adopt UIScene lifecycle. This will become an assert in a future version.
-> applicationDidFinishLaunching()

Setting UIViewControllerBasedStatusBarAppearance to NO is no longer supported.
Apple actively discourages that, and all application-wide methods of changing status bar appearance are deprecated

UnityIAP UnityEarlyTransactionObserver: Added to the payment queue
-> applicationDidBecomeActive()

UnityIAP: Requesting 49 products

UnityIAP: Requesting product data...

UnityIAP: Received 36 products

Unavailable product ezi_unlock_skillslot_3-ezi_unlock_skillslot_3
UnityEngine.Purchasing.PurchasingManager:HasAvailableProductsToPurchase(Boolean)
UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()
UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
System.Action:Invoke()
UnityEngine.Purchasing.Extension.UnityUtil:Update()

Unavailable product ezi_unlock_skillslot_4-ezi_unlock_skillslot_4
UnityEngine.Purchasing.PurchasingManager:HasAvailableProductsToPurchase(Boolean)
UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()
UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
System.Action:Invoke()
UnityEngine.Purchasing.Extension.UnityUtil:Update()

Unavailable product ezi_military_boots-ezi_military_boots
UnityEngine.Purchasing.PurchasingManager:HasAvailableProductsToPurchase(Boolean)
UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()
UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
System.Action:Invoke()
UnityEngine.Purchasing.Extension.UnityUtil:Update()

Unavailable product ezi_military_medikit-ezi_military_medikit
UnityEngine.Purchasing.PurchasingManager:HasAvailableProductsToPurchase(Boolean)
UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()
UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
System.Action:Invoke()
UnityEngine.Purchasing.Extension.UnityUtil:Update()

Unavailable product ezi_skin_nuke-ezi_skin_nuke
UnityEngine.Purchasing.PurchasingManager:HasAvailableProductsToPurchase(Boolean)
UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()
UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
System.Action:Invoke()
UnityEngine.Purchasing.Extension.UnityUtil:Update()

Unavailable product ezi_skin_army-ezi_skin_army
UnityEngine.Purchasing.PurchasingManager:HasAvailableProductsToPurchase(Boolean)
UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()
UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
System.Action:Invoke()
UnityEngine.Purchasing.Extension.UnityUtil:Update()

Unavailable product ezi_skin_navy-ezi_skin_navy
UnityEngine.Purchasing.PurchasingManager:HasAvailableProductsToPurchase(Boolean)
UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()
UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
System.Action:Invoke()
UnityEngine.Purchasing.Extension.UnityUtil:Update()

Unavailable product ezi_skin_oni-ezi_skin_oni
UnityEngine.Purchasing.PurchasingManager:HasAvailableProductsToPurchase(Boolean)
UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()
UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
System.Action:Invoke()
UnityEngine.Purchasing.Extension.UnityUtil:Update()

Unavailable product ezi_skin_neon-ezi_skin_neon
UnityEngine.Purchasing.PurchasingManager:HasAvailableProductsToPurchase(Boolean)
UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()
UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
System.Action:Invoke()
UnityEngine.Purchasing.Extension.UnityUtil:Update()

Unavailable product ezi_skin_emergency-ezi_skin_emergency
UnityEngine.Purchasing.PurchasingManager:HasAvailableProductsToPurchase(Boolean)
UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()
UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
System.Action:Invoke()
UnityEngine.Purchasing.Extension.UnityUtil:Update()

Unavailable product ezi_skin_heg-ezi_skin_heg
UnityEngine.Purchasing.PurchasingManager:HasAvailableProductsToPurchase(Boolean)
UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()
UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
System.Action:Invoke()
UnityEngine.Purchasing.Extension.UnityUtil:Update()

Unavailable product ezi_skin_desert-ezi_skin_desert
UnityEngine.Purchasing.PurchasingManager:HasAvailableProductsToPurchase(Boolean)
UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()
UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
System.Action:Invoke()
UnityEngine.Purchasing.Extension.UnityUtil:Update()

Unavailable product ezi_skin_jungle-ezi_skin_jungle
UnityEngine.Purchasing.PurchasingManager:HasAvailableProductsToPurchase(Boolean)
UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()
UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
System.Action:Invoke()
UnityEngine.Purchasing.Extension.UnityUtil:Update()

IAP Initialized.
ExtinctionGame.IAPManager:OnInitialized(IStoreController, IExtensionProvider)
UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
System.Action:Invoke()
UnityEngine.Purchasing.Extension.UnityUtil:Update()

Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
UnityIAP: Transaction 1000000863588501 not pending, nothing to finish here
UnityIAP: Transaction 1000000863931468 not pending, nothing to finish here
UnityIAP: Transaction 1000000895398964 not pending, nothing to finish here
UnityIAP: Transaction 1000000907037036 not pending, nothing to finish here
UnityIAP: Transaction 1000000924770007 not pending, nothing to finish here
UnityIAP: Transaction 2000000135051706 not pending, nothing to finish here
UnityIAP: Transaction 2000000200771014 not pending, nothing to finish here
UnityIAP: Transaction 2000000289297582 not pending, nothing to finish here
UnityIAP: Transaction 2000000322219484 not pending, nothing to finish here
UnityIAP: Transaction 2000000456826744 not pending, nothing to finish here
UnityIAP: Transaction 2000000538004649 not pending, nothing to finish here
UnityIAP: Transaction 2000000791657176 not pending, nothing to finish here
UnityIAP: Transaction 2000000900187551 not pending, nothing to finish here
UnityIAP: Transaction 1000000841347384 not pending, nothing to finish here
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
UnityIAP: Transaction 1000000901499453 not pending, nothing to finish here
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
UnityIAP: Transaction 2000000222372629 not pending, nothing to finish here
UnityIAP: Transaction 2000000300196513 not pending, nothing to finish here
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
Unity IAP: Unable to confirm purchase; Product has missing or empty transactionID
UnityIAP: Refresh app receipt
UnityIAP: Transaction 1000000863588501 not pending, nothing to finish here
UnityIAP: Transaction 1000000863931468 not pending, nothing to finish here
UnityIAP: Transaction 1000000895398964 not pending, nothing to finish here
UnityIAP: Transaction 1000000907037036 not pending, nothing to finish here
UnityIAP: Transaction 1000000924770007 not pending, nothing to finish here
UnityIAP: Transaction 2000000135051706 not pending, nothing to finish here
UnityIAP: Transaction 2000000200771014 not pending, nothing to finish here
UnityIAP: Transaction 2000000289297582 not pending, nothing to finish here
UnityIAP: Transaction 2000000322219484 not pending, nothing to finish here
UnityIAP: Transaction 2000000456826744 not pending, nothing to finish here
UnityIAP: Transaction 2000000538004649 not pending, nothing to finish here
UnityIAP: Transaction 2000000791657176 not pending, nothing to finish here
UnityIAP: Transaction 2000000900187551 not pending, nothing to finish here
UnityIAP: Transaction 1000000841347384 not pending, nothing to finish here
UnityIAP: Transaction 1000000901499453 not pending, nothing to finish here
UnityIAP: Transaction 2000000222372629 not pending, nothing to finish here
UnityIAP: Transaction 2000000300196513 not pending, nothing to finish here
UnityIAP: Add transaction observer
UnityIAP: UpdatedTransactions
UnityIAP UnityEarlyTransactionObserver: Request to initiate queued payments
<SKReceiptRefreshRequest: 0x15148d780>: Finished refreshing receipt with error: Error Domain=ASDErrorDomain Code=603 "Request throttled" UserInfo={NSLocalizedDescription=Request throttled, NSLocalizedFailureReason=Unified receipt is valid and current}
UnityIAP: RefreshReceipt status 1
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
ExtinctionGame.IAPManager:<OnInitialized>b__9_0(String)
System.Action`1:Invoke(T)
System.Action:Invoke()
UnityEngine.Purchasing.Extension.UnityUtil:Update()

Failed to buy product.
UnityEngine.Events.UnityAction:Invoke()
UnityEngine.Events.UnityEvent:Invoke()
UnityEngine.EventSystems.EventFunction`1:Invoke(T1, BaseEventData)
UnityEngine.EventSystems.ExecuteEvents:Execute(GameObject, BaseEventData, EventFunction`1)
UnityEngine.EventSystems.StandaloneInputModule:ProcessTouchPress(PointerEventData, Boolean, Boolean)
UnityEngine.EventSystems.StandaloneInputModule:ProcessTouchEvents()
UnityEngine.EventSystems.StandaloneInputModule:Process()

This is my code:

using UnityEngine;
using UnityEngine.Purchasing;
using UnityEngine.Purchasing.Security;
using IAPSetting = GameSettings.InAppPurchase;
using ExtinctionGame.Event;

namespace ExtinctionGame {
	public class IAPManager : GlobalSingleton<IAPManager>, IStoreListener {
		// The Unity Purchasing system	
		private static IStoreController m_StoreController;

		// The store-specific Purchasing subsystems	
		private static IExtensionProvider m_StoreExtensionProvider;

		private static bool m_PreviousPurchaseInProgress = false;
		
		public static bool Initialized => m_StoreController != null && m_StoreExtensionProvider != null;

		protected override void OnInitialize() {
			base.OnInitialize();

			if (m_StoreController == null) {
				InitializePurchasing();
			}

			ApplicationEventManager.OnIAPPurchaseSuccess.AddListener(HandleIAPPurchaseSuccess);
			ApplicationEventManager.OnIAPPurchaseFailure.AddListener(HandleIAPPurchaseFailure);
		}

		private static string GetProductId(IAPProduct product) {
			switch (product) {
				case IAPProduct.BasicCashPack:
					return "ezi_basic_cash_pack";
				case IAPProduct.MediumCashPack:
					return "ezi_medium_cash_pack";
				case IAPProduct.LargeCashPack:
					return "ezi_large_cash_pack";
				case IAPProduct.HugeCashPack:
					return "ezi_huge_cash_pack";
				case IAPProduct.MegaCashPack:
					return "ezi_mega_cash_pack";

				// DLC Weapons
				case IAPProduct.BallisticKnife:
					return "ezi_dlc_ballistic_knife";
				case IAPProduct.Warhammer:
					return "ezi_dlc_warhammer";
				case IAPProduct.USP:
					return "ezi_dlc_usp45";
				case IAPProduct.MK18MOD1:
					return "ezi_dlc_mk18_mod1";
				case IAPProduct.KSG:
					return "ezi_dlc_ksg";
				case IAPProduct.GSG16:
					return "ezi_dlc_gsg16";
				case IAPProduct.Nailgun:
					return "ezi_dlc_nailgun";
				case IAPProduct.Beretta93R:
					return "ezi_dlc_b93r";
				case IAPProduct.MSG90:
					return "ezi_dlc_msg90";
				case IAPProduct.MG3:
					return "ezi_dlc_mg3";
				case IAPProduct.M99:
					return "ezi_dlc_m99";
				case IAPProduct.M95:
					return "ezi_dlc_m95";
				case IAPProduct.RagingJudge:
					return "ezi_dlc_raging_judge";
				case IAPProduct.M32:
					return "ezi_dlc_m32";
				case IAPProduct.M16M203:
					return "ezi_dlc_m16_m203";
				case IAPProduct.PSRL1:
					return "ezi_dlc_psrl1";
				case IAPProduct.M202:
					return "ezi_dlc_m202";
				case IAPProduct.M82:
					return "ezi_dlc_m82";
				case IAPProduct.VEPR12:
					return "ezi_dlc_vepr12";
				case IAPProduct.RPK16:
					return "ezi_dlc_rpk16";
				case IAPProduct.MP510:
					return "ezi_dlc_mp510";
				case IAPProduct.XM2HGL:
					return "ezi_dlc_xm2hgl";

				// DLC Items
				case IAPProduct.DoubleExp:
					return "ezi_item_double_exp";
				case IAPProduct.SkillSlot3:
					return "ezi_unlock_skillslot_3";
				case IAPProduct.SkillSlot4:
					return "ezi_unlock_skillslot_4";

				// DLC Gadgets
				case IAPProduct.MilitaryArmor:
					return "ezi_military_armor";
				case IAPProduct.MilitaryAmmoBelt:
					return "ezi_military_ammobelt";
				case IAPProduct.MilitaryBoots:
					return "ezi_military_boots";
				case IAPProduct.MilitaryMedkit:
					return "ezi_military_medikit";
				case IAPProduct.HeavyBlastArmor:
					return "ezi_heavy_blast_armor";

				// DLC Utilities
				case IAPProduct.TranquilizerRifle:
					return "ezi_dlc_tranquilizer_rifle";
				case IAPProduct.MobileShotgunSentryGun:
					return "ezi_dlc_mobile_shotgun_sentrygun";
				case IAPProduct.Pipebomb:
					return "ezi_dlc_pipebomb";
				case IAPProduct.SmartProximityMine:
					return "ezi_dlc_smart_proximity_mine";
				case IAPProduct.Sevenbang:
					return "ezi_dlc_sevenbang";

				// Skins
				case IAPProduct.SkinNuke:
					return "ezi_skin_nuke";
				case IAPProduct.SkinArmy:
					return "ezi_skin_army";
				case IAPProduct.SkinNavy:
					return "ezi_skin_navy";
				case IAPProduct.SkinOni:
					return "ezi_skin_oni";
				case IAPProduct.SkinNeon:
					return "ezi_skin_neon";
				case IAPProduct.SkinEmergency:
					return "ezi_skin_emergency";
				case IAPProduct.SkinHEG:
					return "ezi_skin_heg";
				case IAPProduct.SkinDesert:
					return "ezi_skin_desert";
				case IAPProduct.SkinJungle:
					return "ezi_skin_jungle";

				default:
					throw new System.Exception("Invalid IAPProduct: " + product.ToString());
			}
		}

		private static IAPProduct GetIAPProductByProductId(string productId) {
			if (productId.Equals("ezi_basic_cash_pack")){
				return IAPProduct.BasicCashPack;
			}
			else if (productId.Equals("ezi_medium_cash_pack")){
				return IAPProduct.MediumCashPack;
			}
			else if (productId.Equals("ezi_large_cash_pack")){
				return IAPProduct.LargeCashPack;
			}
			else if (productId.Equals("ezi_huge_cash_pack")){
				return IAPProduct.HugeCashPack;
			}
			else if (productId.Equals("ezi_mega_cash_pack")){
				return IAPProduct.MegaCashPack;
			}

			else if (productId.Equals("ezi_dlc_ballistic_knife")){
				return IAPProduct.BallisticKnife;
			}
			else if (productId.Equals("ezi_dlc_warhammer")){
				return IAPProduct.Warhammer;
			}
			else if (productId.Equals("ezi_dlc_usp45")){
				return IAPProduct.USP;
			}
			else if (productId.Equals("ezi_dlc_mk18_mod1")){
				return IAPProduct.MK18MOD1;
			}
			else if (productId.Equals("ezi_dlc_ksg")){
				return IAPProduct.KSG;
			}
			else if (productId.Equals("ezi_dlc_gsg16")){
				return IAPProduct.GSG16;
			}
			else if (productId.Equals("ezi_dlc_nailgun")){
				return IAPProduct.Nailgun;
			}
			else if (productId.Equals("ezi_dlc_b93r")){
				return IAPProduct.Beretta93R;
			}
			else if (productId.Equals("ezi_dlc_msg90")){
				return IAPProduct.MSG90;
			}
			else if (productId.Equals("ezi_dlc_mg3")){
				return IAPProduct.MG3;
			}
			else if (productId.Equals("ezi_dlc_m99")){
				return IAPProduct.M99;
			}
			else if (productId.Equals("ezi_dlc_m95")){
				return IAPProduct.M95;
			}
			else if (productId.Equals("ezi_dlc_raging_judge")){
				return IAPProduct.RagingJudge;
			}
			else if (productId.Equals("ezi_dlc_m32")){
				return IAPProduct.M32;
			}
			else if (productId.Equals("ezi_dlc_m16_m203")){
				return IAPProduct.M16M203;
			}
			else if (productId.Equals("ezi_dlc_psrl1")){
				return IAPProduct.PSRL1;
			}
			else if (productId.Equals("ezi_dlc_m202")){
				return IAPProduct.M202;
			}
			else if (productId.Equals("ezi_dlc_m82")){
				return IAPProduct.M82;
			}
			else if (productId.Equals("ezi_dlc_vepr12")){
				return IAPProduct.VEPR12;
			}
			else if (productId.Equals("ezi_dlc_rpk16")){
				return IAPProduct.RPK16;
			}
			else if (productId.Equals("ezi_dlc_mp510")){
				return IAPProduct.MP510;
			}
			else if (productId.Equals("ezi_dlc_xm2hgl")){
				return IAPProduct.XM2HGL;
			}

			else if (productId.Equals("ezi_item_double_exp")){
				return IAPProduct.DoubleExp;
			}
			else if (productId.Equals("ezi_unlock_skillslot_3")){
				return IAPProduct.SkillSlot3;
			}
			else if (productId.Equals("ezi_unlock_skillslot_4")){
				return IAPProduct.SkillSlot4;
			}

			else if (productId.Equals("ezi_military_armor")){
				return IAPProduct.MilitaryArmor;
			}
			else if (productId.Equals("ezi_military_ammobelt")){
				return IAPProduct.MilitaryAmmoBelt;
			}
			else if (productId.Equals("ezi_military_boots")){
				return IAPProduct.MilitaryBoots;
			}
			else if (productId.Equals("ezi_military_medikit")){
				return IAPProduct.MilitaryMedkit;
			}
			else if (productId.Equals("ezi_heavy_blast_armor")){
				return IAPProduct.HeavyBlastArmor;
			}
			
			else if (productId.Equals("ezi_dlc_tranquilizer_rifle")){
				return IAPProduct.TranquilizerRifle;
			}
			else if (productId.Equals("ezi_dlc_mobile_shotgun_sentrygun")){
				return IAPProduct.MobileShotgunSentryGun;
			}
			else if (productId.Equals("ezi_dlc_pipebomb")){
				return IAPProduct.Pipebomb;
			}
			else if (productId.Equals("ezi_dlc_smart_proximity_mine")){
				return IAPProduct.SmartProximityMine;
			}
			else if (productId.Equals("ezi_dlc_sevenbang")){
				return IAPProduct.Sevenbang;
			}

			else if (productId.Equals("ezi_skin_nuke")) {
				return IAPProduct.SkinNuke;
			}
			else if (productId.Equals("ezi_skin_army")) {
				return IAPProduct.SkinArmy;
			}
			else if (productId.Equals("ezi_skin_navy")) {
				return IAPProduct.SkinNavy;
			}
			else if (productId.Equals("ezi_skin_oni")) {
				return IAPProduct.SkinOni;
			}
			else if (productId.Equals("ezi_skin_neon")) {
				return IAPProduct.SkinNeon;
			}
			else if (productId.Equals("ezi_skin_emergency")) {
				return IAPProduct.SkinEmergency;
			}
			else if (productId.Equals("ezi_skin_heg")) {
				return IAPProduct.SkinHEG;
			}
			else if (productId.Equals("ezi_skin_desert")) {
				return IAPProduct.SkinDesert;
			}
			else if (productId.Equals("ezi_skin_jungle")) {
				return IAPProduct.SkinJungle;
			}

			return IAPProduct.None;
		}

		public static int GetDLCCost(string equipmentName) {
			// Weapons
			if (equipmentName.Equals(WeaponNames.BallisticKnife)) {
				return 2;
			}
			else if (equipmentName.Equals(WeaponNames.Warhammer)) {
				return 2;
			}
			else if (equipmentName.Equals(WeaponNames.USP)) {
				return 2;
			}
			else if (equipmentName.Equals(WeaponNames.MK18MOD1)) {
				return 3;
			}
			else if (equipmentName.Equals(WeaponNames.KSG)) {
				return 3;
			}
			else if (equipmentName.Equals(WeaponNames.GSG16)) {
				return 3;
			}
			else if (equipmentName.Equals(WeaponNames.Nailgun)) {
				return 2;
			}
			else if (equipmentName.Equals(WeaponNames.Beretta93R)) {
				return 3;
			}
			else if (equipmentName.Equals(WeaponNames.RagingJudge)) {
				return 3;
			}
			else if (equipmentName.Equals(WeaponNames.MSG90)) {
				return 3;
			}
			else if (equipmentName.Equals(WeaponNames.MG3)) {
				return 4;
			}
			else if (equipmentName.Equals(WeaponNames.M99)) {
				return 3;
			}
			else if (equipmentName.Equals(WeaponNames.M32)) {
				return 4;
			}
			else if (equipmentName.Equals(WeaponNames.M95)) {
				return 4;
			}
			else if (equipmentName.Equals(WeaponNames.M16M203)) {
				return 4;
			}
			else if (equipmentName.Equals(WeaponNames.PSRL1)) {
				return 4;
			}
			else if (equipmentName.Equals(WeaponNames.M202)) {
				return 4;
			}
			else if (equipmentName.Equals(WeaponNames.M82)) {
				return 4;
			}
			else if (equipmentName.Equals(WeaponNames.VEPR12)) {
				return 4;
			}
			else if (equipmentName.Equals(WeaponNames.RPK16)) {
				return 4;
			}
			else if (equipmentName.Equals(WeaponNames.MP510)) {
				return 3;
			}
			else if (equipmentName.Equals(WeaponNames.XM2HGL)) {
				return 4;
			}

			// Equipment
			else if (equipmentName.Equals(EquipmentNames.MilitaryArmor)) {
				return 2;
			}
			else if (equipmentName.Equals(EquipmentNames.MilitaryAmmoBelt)) {
				return 2;
			}
			else if (equipmentName.Equals(EquipmentNames.MilitaryBoots)) {
				return 2;
			}
			else if (equipmentName.Equals(EquipmentNames.MilitaryMedkit)) {
				return 2;
			}
			else if (equipmentName.Equals(EquipmentNames.HeavyBlastArmor)) {
				return 2;
			}
			else if (equipmentName.Equals(WeaponNames.TranquilizerRifle)) {
				return 2;
			}
			else if (equipmentName.Equals(WeaponNames.MobileShotgunSentryGun)) {
				return 3;
			}
			else if (equipmentName.Equals(WeaponNames.Pipebomb)) {
				return 3;
			}
			else if (equipmentName.Equals(WeaponNames.SmartProximityMine)) {
				return 3;
			}
			else if (equipmentName.Equals(WeaponNames.Sevenbang)) {
				return 3;
			}

			throw new System.Exception("Invalid EquipmentName: " + equipmentName);
		}

		public void OnInitialized(IStoreController controller, IExtensionProvider extensions) {
			Debug.Log("IAP Initialized.");
			m_StoreController = controller;
			m_StoreExtensionProvider = extensions;

			foreach (var product in m_StoreController.products.all) {
				m_StoreController.ConfirmPendingPurchase(product);
			}

			var appleExtensions = extensions.GetExtension<IAppleExtensions>();
			appleExtensions.RefreshAppReceipt(
				(success) => {
					Debug.Log(success);
					ReverifyPurchases();
				},
				(message) => {
					Debug.Log(message);
					ReverifyPurchases();
				}
			);
		}

		public void OnInitializeFailed(InitializationFailureReason error) {
			Debug.LogError("Failed to initialize IAP: " + error);
		}

		public void OnInitializeFailed(InitializationFailureReason reason, string msg) {
			Debug.LogError("Failed to initialize IAP: " + reason.ToString());
			Debug.LogError(msg);
		}

		public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason) {
			m_PreviousPurchaseInProgress = false;

			Debug.Log("Failed to purchase product: " + failureReason.ToString());

			ApplicationEventManager.OnIAPPurchaseFailure.Invoke(
				GetIAPProductByProductId(product.definition.id),
				failureReason.ToString()
			);
		}

		public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) {
			m_PreviousPurchaseInProgress = false;
			
			string productId = args.purchasedProduct.definition.id;

			// Receipt Validation
			var validator = new CrossPlatformValidator(GooglePlayTangle.Data(), AppleTangle.Data(), Application.identifier);

			try {
				IPurchaseReceipt[] result = validator.Validate(args.purchasedProduct.receipt);
				Debug.Log("Receipt is valid. Contents:");

				foreach (IPurchaseReceipt productReceipt in result) {
					Debug.Log(productReceipt.productID);
					Debug.Log(productReceipt.purchaseDate);
					Debug.Log(productReceipt.transactionID);
				}

				PlayerData savedData = PlayerDataManager.SavedData;

				// Shop
				if (productId == GetProductId(IAPProduct.BasicCashPack)) {
					savedData.IAPSmallCashPackPurchased += 1;
					savedData.AddCash(TransactionType.InAppPurchase, IAPSetting.BasicCashPackAmount + IAPSetting.BasicCashPackBonusAmount);
				}
				else if (productId == GetProductId(IAPProduct.MediumCashPack)) {
					savedData.IAPMediumCashPackPurchased += 1;
					savedData.AddCash(TransactionType.InAppPurchase, savedData.cash += IAPSetting.MediumCashPackAmount + IAPSetting.MediumCashPackBonusAmount);
				}
				else if (productId == GetProductId(IAPProduct.LargeCashPack)) {
					savedData.IAPLargeCashPackPurchased += 1;
					savedData.AddCash(TransactionType.InAppPurchase, savedData.cash += IAPSetting.LargeCashPackAmount + IAPSetting.LargeCashPackBonusAmount);
				}
				else if (productId == GetProductId(IAPProduct.HugeCashPack)) {
					savedData.IAPHugeCashPackPurchased += 1;
					savedData.AddCash(TransactionType.InAppPurchase, savedData.cash += IAPSetting.HugeCashPackAmount + IAPSetting.HugeCashPackBonusAmount);
				}
				else if (productId == GetProductId(IAPProduct.MegaCashPack)) {
					savedData.IAPMegaCashPackPurchased += 1;
					savedData.AddCash(TransactionType.InAppPurchase, savedData.cash += IAPSetting.MegaCashPackAmount + IAPSetting.MegaCashPackBonusAmount);
				}
				else if (productId == GetProductId(IAPProduct.DoubleExp)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.DoubleExp);
				}

				// Skills
				else if (productId == GetProductId(IAPProduct.SkillSlot3)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.SkillSlot3);
				}
				else if (productId == GetProductId(IAPProduct.SkillSlot4)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.SkillSlot4);
				}

				// DLC
				else if (productId == GetProductId(IAPProduct.BallisticKnife)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.BallisticKnife);
				}
				else if (productId == GetProductId(IAPProduct.Warhammer)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.Warhammer);
				}
				else if (productId == GetProductId(IAPProduct.USP)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.USP);
				}
				else if (productId == GetProductId(IAPProduct.MK18MOD1)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.MK18MOD1);
				}
				else if (productId == GetProductId(IAPProduct.KSG)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.KSG);
				}
				else if (productId == GetProductId(IAPProduct.GSG16)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.GSG16);
				}
				else if (productId == GetProductId(IAPProduct.Nailgun)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.Nailgun);
				}
				else if (productId == GetProductId(IAPProduct.Beretta93R)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.Beretta93R);
				}
				else if (productId == GetProductId(IAPProduct.MSG90)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.MSG90);
				}
				else if (productId == GetProductId(IAPProduct.MG3)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.MG3);
				}
				else if (productId == GetProductId(IAPProduct.M99)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.M99);
				}
				else if (productId == GetProductId(IAPProduct.RagingJudge)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.RagingJudge);
				}
				else if (productId == GetProductId(IAPProduct.M32)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.M32);
				}
				else if (productId == GetProductId(IAPProduct.M95)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.M95);
				}
				else if (productId == GetProductId(IAPProduct.M16M203)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.M16M203);
				}
				else if (productId == GetProductId(IAPProduct.PSRL1)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.PSRL1);
				}
				else if (productId == GetProductId(IAPProduct.M202)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.M202);
				}
				else if (productId == GetProductId(IAPProduct.M82)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.M82);
				}
				else if (productId == GetProductId(IAPProduct.VEPR12)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.VEPR12);
				}
				else if (productId == GetProductId(IAPProduct.RPK16)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.RPK16);
				}
				else if (productId == GetProductId(IAPProduct.MP510)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.MP510);
				}
				else if (productId == GetProductId(IAPProduct.XM2HGL)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.XM2HGL);
				}

				// Armor
				else if (productId == GetProductId(IAPProduct.MilitaryArmor)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.MilitaryArmor);
				}
				else if (productId == GetProductId(IAPProduct.HeavyBlastArmor)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.HeavyBlastArmor);
				}

				// Ammo Belt
				else if (productId == GetProductId(IAPProduct.MilitaryAmmoBelt)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.MilitaryAmmoBelt);
				}

				// Mobility Boots
				else if (productId == GetProductId(IAPProduct.MilitaryBoots)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.MilitaryBoots);
				}

				// Medikits
				else if (productId == GetProductId(IAPProduct.MilitaryMedkit)) {
					savedData.OwnedIAPProduct.Add(IAPProduct.MilitaryMedkit);
				}

				// Utilities
				else if (productId.Equals(GetProductId(IAPProduct.TranquilizerRifle))) {
					savedData.OwnedIAPProduct.Add(IAPProduct.TranquilizerRifle);
				}
				else if (productId.Equals(GetProductId(IAPProduct.MobileShotgunSentryGun))) {
					savedData.OwnedIAPProduct.Add(IAPProduct.MobileShotgunSentryGun);
				}
				else if (productId.Equals(GetProductId(IAPProduct.Pipebomb))) {
					savedData.OwnedIAPProduct.Add(IAPProduct.Pipebomb);
				}
				else if (productId.Equals(GetProductId(IAPProduct.SmartProximityMine))) {
					savedData.OwnedIAPProduct.Add(IAPProduct.SmartProximityMine);
				}
				else if (productId.Equals(GetProductId(IAPProduct.Sevenbang))) {
					savedData.OwnedIAPProduct.Add(IAPProduct.Sevenbang);
				}

				// Skins
				else if (productId.Equals(GetProductId(IAPProduct.SkinNuke))) {
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinNuke);
				}
				else if (productId.Equals(GetProductId(IAPProduct.SkinArmy))) {
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinArmy);
				}
				else if (productId.Equals(GetProductId(IAPProduct.SkinNavy))) {
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinNavy);
				}
				else if (productId.Equals(GetProductId(IAPProduct.SkinOni))) {
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinOni);
				}
				else if (productId.Equals(GetProductId(IAPProduct.SkinNeon))) {
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinNeon);
				}
				else if (productId.Equals(GetProductId(IAPProduct.SkinEmergency))) {
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinEmergency);
				}
				else if (productId.Equals(GetProductId(IAPProduct.SkinHEG))) {
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinHEG);
				}
				else if (productId.Equals(GetProductId(IAPProduct.SkinDesert))) {
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinDesert);
				}
				else if (productId.Equals(GetProductId(IAPProduct.SkinJungle))) {
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinJungle);
				}

				PlayerDataManager.Instance.Save();
				CloudDataManager.Save(savedData);
			}
			catch (IAPSecurityException) {
				Debug.Log("Invalid receipt, not unlocking content.");
			}

			ApplicationEventManager.OnIAPPurchaseSuccess.Invoke(GetIAPProductByProductId(productId));

			return PurchaseProcessingResult.Complete;
		}

		public void InitializePurchasing() {
			if (Initialized) {
				return;
			}

			var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
			builder.AddProduct(GetProductId(IAPProduct.BasicCashPack), ProductType.Consumable);
			builder.AddProduct(GetProductId(IAPProduct.MediumCashPack), ProductType.Consumable);
			builder.AddProduct(GetProductId(IAPProduct.LargeCashPack), ProductType.Consumable);
			builder.AddProduct(GetProductId(IAPProduct.HugeCashPack), ProductType.Consumable);
			builder.AddProduct(GetProductId(IAPProduct.MegaCashPack), ProductType.Consumable);

			builder.AddProduct(GetProductId(IAPProduct.BallisticKnife), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.Warhammer), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.USP), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.MK18MOD1), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.KSG), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.GSG16), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.Nailgun), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.Beretta93R), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.MSG90), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.MG3), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.M99), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.RagingJudge), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.M32), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.M95), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.M16M203), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.PSRL1), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.M202), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.M82), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.VEPR12), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.RPK16), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.MP510), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.XM2HGL), ProductType.NonConsumable);

			builder.AddProduct(GetProductId(IAPProduct.DoubleExp), ProductType.NonConsumable);

			builder.AddProduct(GetProductId(IAPProduct.SkillSlot3), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.SkillSlot4), ProductType.NonConsumable);

			builder.AddProduct(GetProductId(IAPProduct.MilitaryArmor), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.MilitaryAmmoBelt), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.MilitaryBoots), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.MilitaryMedkit), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.HeavyBlastArmor), ProductType.NonConsumable);

			builder.AddProduct(GetProductId(IAPProduct.TranquilizerRifle), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.MobileShotgunSentryGun), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.Pipebomb), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.SmartProximityMine), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.Sevenbang), ProductType.NonConsumable);

			builder.AddProduct(GetProductId(IAPProduct.SkinNuke), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.SkinArmy), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.SkinNavy), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.SkinOni), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.SkinNeon), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.SkinEmergency), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.SkinHEG), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.SkinDesert), ProductType.NonConsumable);
			builder.AddProduct(GetProductId(IAPProduct.SkinJungle), ProductType.NonConsumable);

			UnityPurchasing.Initialize(this, builder);
		}

		public static void Purchase(IAPProduct product) {
			if (!Initialized) {
				Debug.Log("Failed to buy product. Not initialized.");
				ApplicationEventManager.OnIAPPurchaseFailure.Invoke(product, PurchaseFailureReason.PurchasingUnavailable.ToString());
			}
			else if (m_PreviousPurchaseInProgress) {
				Debug.Log("Failed to buy product. Previous Purchase in progress.");
				ApplicationEventManager.OnIAPPurchaseFailure.Invoke(product, PurchaseFailureReason.PurchasingUnavailable.ToString());
			}
			else {
				m_PreviousPurchaseInProgress = true;

				Product storeProduct = m_StoreController.products.WithID(GetProductId(product));

				if (storeProduct != null && storeProduct.availableToPurchase) {
					Debug.Log("Purchasing product async: " + storeProduct.definition.id);
					m_StoreController.InitiatePurchase(storeProduct);
				}
				else {
					Debug.Log("Failed to buy product.");
				}
			}
		}

		void HandleIAPPurchaseSuccess(IAPProduct product) {
			Debug.Log("Purchase Successful: " + product.ToString());
			AudioManager.PlayPurchasedSound();

			Dialog.Alert(LanguageManager.Data.Payment.PurchaseSuccess);
		}


		void HandleIAPPurchaseFailure(IAPProduct product, string reason) {
			Debug.Log("Failed to purchase: " + reason);

			Dialog.Alert(string.Format(
				"{0}\n({1})",
				LanguageManager.Data.Payment.PurchaseFailure,
				reason
			));

			AudioManager.PlayErrorSound();
		}

		void ReverifyPurchases() {
			if (m_StoreController == null) {
				Debug.LogError("Store Controller is null. Skip Reverify Products.");
				return;
			}

			Debug.Log("Starting Reverify Products...");

			PlayerData savedData = PlayerDataManager.SavedData;
			int restored = 0;
			int removed = 0;

			#region DLC - Weapons
			if (m_StoreController.products.WithID(GetProductId(IAPProduct.BallisticKnife)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.BallisticKnife) == false) {
					Debug.Log("Purchase Detected: Weapon BallisticKnife. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.BallisticKnife);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.BallisticKnife)) {
					Debug.Log("Refund Detected: Weapon BallisticKnife. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.BallisticKnife);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.Warhammer)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.Warhammer) == false) {
					Debug.Log("Purchase Detected: Weapon Warhammer. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.Warhammer);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.Warhammer)) {
					Debug.Log("Refund Detected: Weapon Warhammer. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.Warhammer);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.USP)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.USP) == false) {
					Debug.Log("Purchase Detected: Weapon USP. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.USP);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.USP)) {
					Debug.Log("Refund Detected: Weapon USP. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.USP);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.MK18MOD1)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.MK18MOD1) == false) {
					Debug.Log("Purchase Detected: Weapon MK18MOD1. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.MK18MOD1);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.MK18MOD1)) {
					Debug.Log("Refund Detected: Weapon MK18MOD1. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.MK18MOD1);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.KSG)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.KSG) == false) {
					Debug.Log("Purchase Detected: Weapon KSG. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.KSG);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.KSG)) {
					Debug.Log("Refund Detected: Weapon KSG. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.KSG);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.GSG16)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.GSG16) == false) {
					Debug.Log("Purchase Detected: Weapon GSG16. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.GSG16);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.GSG16)) {
					Debug.Log("Refund Detected: Weapon GSG16. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.GSG16);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.Nailgun)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.Nailgun) == false) {
					Debug.Log("Purchase Detected: Weapon Nailgun. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.Nailgun);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.Nailgun)) {
					Debug.Log("Refund Detected: Weapon Nailgun. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.Nailgun);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.Beretta93R)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.Beretta93R) == false) {
					Debug.Log("Purchase Detected: Weapon Beretta93R. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.Beretta93R);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.Beretta93R)) {
					Debug.Log("Refund Detected: Weapon Beretta93R. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.Beretta93R);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.MSG90)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.MSG90) == false) {
					Debug.Log("Purchase Detected: Weapon MSG90. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.MSG90);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.MSG90)) {
					Debug.Log("Refund Detected: Weapon MSG90. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.MSG90);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.MG3)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.MG3) == false) {
					Debug.Log("Purchase Detected: Weapon MG3. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.MG3);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.MG3)) {
					Debug.Log("Refund Detected: Weapon MG3. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.MG3);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.M99)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.M99) == false) {
					Debug.Log("Purchase Detected: Weapon M99. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.M99);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.M99)) {
					Debug.Log("Refund Detected: Weapon M99. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.M99);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.RagingJudge)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.RagingJudge) == false) {
					Debug.Log("Purchase Detected: Weapon RagingJudge. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.RagingJudge);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.RagingJudge)) {
					Debug.Log("Refund Detected: Weapon RagingJudge. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.RagingJudge);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.M32)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.M32) == false) {
					Debug.Log("Purchase Detected: Weapon M32. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.M32);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.M32)) {
					Debug.Log("Refund Detected: Weapon M32. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.M32);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.M95)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.M95) == false) {
					Debug.Log("Purchase Detected: Weapon M95. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.M95);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.M95)) {
					Debug.Log("Refund Detected: Weapon M95. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.M95);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.M16M203)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.M16M203) == false) {
					Debug.Log("Purchase Detected: Weapon M16M203. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.M16M203);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.M16M203)) {
					Debug.Log("Refund Detected: Weapon M16M203. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.M16M203);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.PSRL1)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.PSRL1) == false) {
					Debug.Log("Purchase Detected: Weapon PSRL1. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.PSRL1);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.PSRL1)) {
					Debug.Log("Refund Detected: Weapon PSRL1. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.PSRL1);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.M202)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.M202) == false) {
					Debug.Log("Purchase Detected: Weapon M202. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.M202);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.M202)) {
					Debug.Log("Refund Detected: Weapon M202. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.M202);
				}
			}
			
			if (m_StoreController.products.WithID(GetProductId(IAPProduct.M82)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.M82) == false) {
					Debug.Log("Purchase Detected: Weapon M82. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.M82);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.M82)) {
					Debug.Log("Refund Detected: Weapon M82. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.M82);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.VEPR12)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.VEPR12) == false) {
					Debug.Log("Purchase Detected: Weapon VEPR12. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.VEPR12);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.VEPR12)) {
					Debug.Log("Refund Detected: Weapon VEPR12. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.VEPR12);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.RPK16)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.RPK16) == false) {
					Debug.Log("Purchase Detected: Weapon RPK16. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.RPK16);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.RPK16)) {
					Debug.Log("Refund Detected: Weapon RPK16. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.RPK16);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.MP510)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.MP510) == false) {
					Debug.Log("Purchase Detected: Weapon MP510. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.MP510);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.MP510)) {
					Debug.Log("Refund Detected: Weapon MP510. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.MP510);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.XM2HGL)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.XM2HGL) == false) {
					Debug.Log("Purchase Detected: Weapon XM2HGL. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.XM2HGL);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.XM2HGL)) {
					Debug.Log("Refund Detected: Weapon XM2HGL. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.XM2HGL);
				}
			}
			#endregion

			#region DLC - Items
			if (m_StoreController.products.WithID(GetProductId(IAPProduct.DoubleExp)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.DoubleExp) == false) {
					Debug.Log("Purchase Detected: Item DoubleExp. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.DoubleExp);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.DoubleExp)) {
					Debug.Log("Refund Detected: Item DoubleExp. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.DoubleExp);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.SkillSlot3)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.SkillSlot3) == false) {
					Debug.Log("Purchase Detected: Item SkillSlot3. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.SkillSlot3);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.SkillSlot3)) {
					Debug.Log("Refund Detected: Item SkillSlot3. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.SkillSlot3);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.SkillSlot4)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.SkillSlot4) == false) {
					Debug.Log("Purchase Detected: Item SkillSlot4. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.SkillSlot4);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.SkillSlot4)) {
					Debug.Log("Refund Detected: Item SkillSlot4. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.SkillSlot4);
				}
			}
			#endregion

			#region DLC - Gadgets
			if (m_StoreController.products.WithID(GetProductId(IAPProduct.MilitaryArmor)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.MilitaryArmor) == false) {
					Debug.Log("Purchase Detected: Gadget MilitaryArmor. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.MilitaryArmor);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.MilitaryArmor)) {
					Debug.Log("Refund Detected: Gadget MilitaryArmor. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.MilitaryArmor);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.HeavyBlastArmor)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.HeavyBlastArmor) == false) {
					Debug.Log("Purchase Detected: Gadget HeavyBlastArmor. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.HeavyBlastArmor);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.HeavyBlastArmor)) {
					Debug.Log("Refund Detected: Gadget HeavyBlastArmor. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.HeavyBlastArmor);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.MilitaryAmmoBelt)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.MilitaryAmmoBelt) == false) {
					Debug.Log("Purchase Detected: Gadget MilitaryAmmoBelt. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.MilitaryAmmoBelt);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.MilitaryAmmoBelt)) {
					Debug.Log("Refund Detected: Gadget MilitaryAmmoBelt. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.MilitaryAmmoBelt);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.MilitaryBoots)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.MilitaryBoots) == false) {
					Debug.Log("Purchase Detected: Gadget MilitaryBoots. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.MilitaryBoots);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.MilitaryBoots)) {
					Debug.Log("Refund Detected: Gadget MilitaryBoots. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.MilitaryBoots);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.MilitaryMedkit)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.MilitaryMedkit) == false) {
					Debug.Log("Purchase Detected: Gadget MilitaryMedkit. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.MilitaryMedkit);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.MilitaryMedkit)) {
					Debug.Log("Refund Detected: Gadget MilitaryMedkit. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.MilitaryMedkit);
				}
			}
			#endregion

			#region DLC - Utilities
			if (m_StoreController.products.WithID(GetProductId(IAPProduct.TranquilizerRifle)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.TranquilizerRifle) == false) {
					Debug.Log("Purchase Detected: Utility TranquilizerRifle. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.TranquilizerRifle);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.TranquilizerRifle)) {
					Debug.Log("Refund Detected: Utility TranquilizerRifle. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.TranquilizerRifle);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.MobileShotgunSentryGun)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.MobileShotgunSentryGun) == false) {
					Debug.Log("Purchase Detected: Utility MobileShotgunSentryGun. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.MobileShotgunSentryGun);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.MobileShotgunSentryGun)) {
					Debug.Log("Refund Detected: Utility MobileShotgunSentryGun. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.MobileShotgunSentryGun);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.Pipebomb)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.Pipebomb) == false) {
					Debug.Log("Purchase Detected: Utility Pipebomb. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.Pipebomb);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.Pipebomb)) {
					Debug.Log("Refund Detected: Utility Pipebomb. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.Pipebomb);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.SmartProximityMine)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.SmartProximityMine) == false) {
					Debug.Log("Purchase Detected: Utility SmartProximityMine. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.SmartProximityMine);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.SmartProximityMine)) {
					Debug.Log("Refund Detected: Utility SmartProximityMine. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.SmartProximityMine);
				}
			}
			
			if (m_StoreController.products.WithID(GetProductId(IAPProduct.Sevenbang)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.Sevenbang) == false) {
					Debug.Log("Purchase Detected: Utility Sevenbang. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.Sevenbang);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.Sevenbang)) {
					Debug.Log("Refund Detected: Utility Sevenbang. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.Sevenbang);
				}
			}
			#endregion

			#region DLC - Skins
			if (m_StoreController.products.WithID(GetProductId(IAPProduct.SkinNuke)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.SkinNuke) == false) {
					Debug.Log("Purchase Detected: SkinNuke. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinNuke);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.SkinNuke)) {
					Debug.Log("Refund Detected: SkinNuke. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.SkinNuke);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.SkinArmy)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.SkinArmy) == false) {
					Debug.Log("Purchase Detected: SkinArmy. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinArmy);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.SkinArmy)) {
					Debug.Log("Refund Detected: SkinArmy. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.SkinArmy);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.SkinNavy)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.SkinNavy) == false) {
					Debug.Log("Purchase Detected: SkinNavy. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinNavy);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.SkinNavy)) {
					Debug.Log("Refund Detected: SkinNavy. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.SkinNavy);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.SkinOni)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.SkinOni) == false) {
					Debug.Log("Purchase Detected: SkinOni. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinOni);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.SkinOni)) {
					Debug.Log("Refund Detected: SkinOni. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.SkinOni);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.SkinNeon)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.SkinNeon) == false) {
					Debug.Log("Purchase Detected: SkinNeon. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinNeon);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.SkinNeon)) {
					Debug.Log("Refund Detected: SkinNeon. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.SkinNeon);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.SkinEmergency)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.SkinEmergency) == false) {
					Debug.Log("Purchase Detected: SkinEmergency. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinEmergency);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.SkinEmergency)) {
					Debug.Log("Refund Detected: SkinEmergency. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.SkinEmergency);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.SkinHEG)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.SkinHEG) == false) {
					Debug.Log("Purchase Detected: SkinHEG. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinHEG);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.SkinHEG)) {
					Debug.Log("Refund Detected: SkinHEG. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.SkinHEG);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.SkinDesert)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.SkinDesert) == false) {
					Debug.Log("Purchase Detected: SkinDesert. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinDesert);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.SkinDesert)) {
					Debug.Log("Refund Detected: SkinDesert. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.SkinDesert);
				}
			}

			if (m_StoreController.products.WithID(GetProductId(IAPProduct.SkinJungle)).hasReceipt) {
				if (savedData.HasIAPProduct(IAPProduct.SkinJungle) == false) {
					Debug.Log("Purchase Detected: SkinJungle. Adding...");
					savedData.OwnedIAPProduct.Add(IAPProduct.SkinJungle);
					restored += 1;
				}
			}
			else {
				if (savedData.HasIAPProduct(IAPProduct.SkinJungle)) {
					Debug.Log("Refund Detected: SkinJungle. Removing....");
					removed += savedData.OwnedIAPProduct.RemoveAll((p) => p == IAPProduct.SkinJungle);
				}
			}
			#endregion

			Debug.Log("Reverify Product Result:");
			Debug.Log("Restored Products: " + restored.ToString());
			Debug.Log("Removed Products: " + removed.ToString());

			if (restored > 0 || removed > 0) {
				PlayerDataManager.Instance.Save();
				CloudDataManager.Save(savedData);
			}
		}

		public void RestorePurchase(System.Action<bool> callback) {
			IAppleExtensions apple = m_StoreExtensionProvider.GetExtension<IAppleExtensions>();
			apple.RestoreTransactions(result => {
				callback(result);
			});
		}
	}
}

Unity version is 2020.3.38f1, Unity IAP 4.10.0. How to fix this?

Unity IAP has had a number of changes relating to IAP over the last few years one of them being fixing a NullReferenceException when retrieving products on Unity Engine 2020 in 4.12 you can see a full list of the changelog here.

I would recommend updating to version 4.12.2 and seeing if this resolves your issue.

Unfortunately 2020 is also no longer an LTS version so that might cause some issues too so I would also recommend updating this incase it is causing issues with compatibility to the updated SDK.

Just updated to 4.12.2 and got this and build failure from Unity.

GUID [b4326c66a9f464640b9457cbd6237bf6] for asset 'Packages/com.unity.purchasing/Plugins/UnityPurchasing/iOS/PrivacyInfo.xcprivacy.meta' conflicts with:
  'Packages/com.unity.purchasing/Plugins/UnityPurchasing/unitypurchasing.bundle/Contents/Resources/PrivacyInfo.xcprivacy.meta'
We can't assign a new GUID because the asset is in an immutable folder. The asset will be ignored.

UnityEditor.BuildPlayerWindow+BuildMethodException: 3 errors
  at UnityEditor.BuildPlayerWindow+DefaultBuildMethods.BuildPlayer (UnityEditor.BuildPlayerOptions options) [0x002c0] in /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPlayerWindowBuildMethods.cs:190 
  at UnityEditor.BuildPlayerWindow.CallBuildMethods (System.Boolean askForBuildLocation, UnityEditor.BuildOptions defaultBuildOptions) [0x00080] in /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPlayerWindowBuildMethods.cs:95 

Removed the package and reinstalled but the same. What the heck should I do

Hello? How do I fix this? I can’t update my game because of this.

How to fix this stuff

If there are GUID conflicts then there are a couple of ways you can get round this.

  1. close Unity, go to the root directory, delete the ‘library’ folder, once you reopen Unity the Library folder will regenerate, reimport any packages you need.
  2. Completely purge the IAP package and any purchasing files. Then reinstall the packages from the package manager
  3. Manually resolve the issues between the 2 files so that they are unique.

Deleted Library folder and opened it again now stuck in Importing “com.unity.modules/package.ModuleCompilationTrigger” over 8+ hours. The cancel button is also locked so I can’t do anything.

What the heck should I do now?

Hi @modernator24 !
Regarding the ModuleCompilationTrigger issue → that trigger is part of Unity’s internal system for figuring out which modules need to be included in your project. After deleting the Library folder, if there is a package error or a script compilation failure, Unity might hang at that point during the import step.

It is worth trying the following to isolate and potentially resolve the issue:

  1. Remove the IAP package line from Packages/manifest.json.
  2. Delete the Library, Temp, and obj folders.
  3. Reopen Unity.

If the project then loads past the “ModuleCompilationTrigger” step, that confirms the IAP package (and its broken metadata) was the likely cause.


Why This Might Happen
(I am not sure if that is the case, but might be worth trying)

It could be that the PrivacyInfo.xcprivacy file which is required by Apple for privacy declarations was accidentally duplicated in two places inside the IAP package:

  • Plugins/UnityPurchasing/iOS/
  • Plugins/UnityPurchasing/unitypurchasing.bundle/Contents/Resources/

Both copies share the same GUID, and Unity does not allow duplicate GUIDs inside immutable folders like Packages/. When this happens, Unity throws a GUID conflict and refuses to compile or build until the conflict is resolved.


Next Steps (Once Unity Opens Successfully)

To clean things up and get back to a working state:

  1. Fully remove IAP artifacts:
  • In Unity, go to Package Manager and remove the In-App Purchasing package.
  • Check Packages/manifest.json to confirm it’s no longer listed.
  • Then manually delete any leftover folders like Packages/com.unity.purchasing/ if they remain.
  • Also delete Library, Temp, and obj folders again to start fresh.
  1. Reinstall the IAP package cleanly:
  • Reopen Unity to regenerate the Library.
  • Once stable, reinstall the In-App Purchasing package via the Package Manager (preferably 4.12.2 or later).
  1. Verify the fix:
  • Open the Console and check that no GUID conflict errors appear.
  • Optionally, inspect Packages/com.unity.purchasing/Plugins/UnityPurchasing/ to ensure there is only one PrivacyInfo.xcprivacy file. The duplication should be gone in the latest package import.

Hope this helps!

After 24h of waiting, force quited the unity and restarted and now it opened, but still the same error messages appears.

Now I can’t even build. What the heck should I do now

Hello. How do I solve this issue.

How to fix this

How To Fix This

I did all you’ve told. Nothing working jacksh1t. What the heck should I do.

How to fix this.

How to fix this.

how to fix this

how to fix this

Hello @modernator24

For the GUID issue, the solution is to update your Unity editor to 2020.3.48:

For your initial issue, Apple had some issues retrieving products on the latest OS versions, but it’s been fixed since, so that should work properly now.