Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ISSUE-028

MarketplaceKit.framework不存在导致闪退

常见表现

启动闪退。

相关源码

import MarketplaceKit

func getDistributorName() async -> String {
	if #available(iOS 17.4, *) {
		let currentDistributor = try await AppDistributor.current
		switch currentDistributor {
		case .appStore:
			return "App Store"
		case .testFlight:
			return "TestFlight"
		case .marketplace(let bundleId):
			return "Alternative marketplace (\(bundleId))"
		case .web:
			return "Website"
		case .other:
			return "Other"
		default:
			return "Unknown"
		}
	} else {
		return "Unknown"
	}
}

原因分析

MarketplaceKit 只支持iOS,在macOS上调用此API时会因为找不到对应Framework而闪退。

解决方法

开发者方面:
通过ProcessInfo.processInfo.isiOSAppOnMac是否Mac平台,跳过相关API调用。

玩家方面:
方法一:通过二进制补丁跳到 if #available(iOS 17.4, *) 的另一个分支。
方法二:编译一个空实现的MarketplaceKit.framework,通过install_name_tool替换动态库路径。