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替换动态库路径。