Swift包集成Google Places XCFramework:可构建但模拟器无法运行
Swift Package封装Google Places SDK XCFramework模拟器运行报错解决方案
问题重现
将Google Places SDK for iOS的XCFramework封装为Swift Package后,应用可正常构建,但模拟器上无法安装运行,报错如下:
Unable To Install “UsePlaces” Please try again later. Failed to load Info.plist from bundle at path /Users/dogahe/Library/Developer/CoreSimulator/Devices/C66A1B4F-91B0-4786-899A-ACF214F1920E/data/Library/Caches/com.apple.mobile.installd.staging/temp.ZzHcTC/extracted/UsePlaces.app/Frameworks/GooglePlaces.framework; Extra info about "/Users/dogahe/Library/Developer/CoreSimulator/Devices/C66A1B4F-91B0-4786-899A-ACF214F1920E/data/Library/Caches/com.apple.mobile.installd.staging/temp.ZzHcTC/extracted/UsePlaces.app/Frameworks/GooglePlaces.framework/Info.plist": Couldn't stat /Users/dogahe/Library/Developer/CoreSimulator/Devices/C66A1B4F-91B0-4786-899A-ACF214F1920E/data/Library/Caches/com.apple.mobile.installd.staging/temp.ZzHcTC/extracted/UsePlaces.app/Frameworks/GooglePlaces.framework/Info.plist: No such file or directory
该错误与直接集成时未将Google Places的Embed设置改为“Do Not Embed”的情况完全一致,但Swift Package无可视化Embed设置选项。
解决方案
问题根源是Swift Package默认会将动态XCFramework设置为“Embed & Sign”,需通过Package.swift配置调整链接方式,让框架仅被链接而不嵌入主应用包中:
1. 调整Package.swift配置
根据封装场景选择对应配置:
场景1:仅封装XCFramework(无自定义代码)
直接将XCFramework定义为动态库产品:
import PackageDescription let package = Package( name: "GooglePlaces", platforms: [.iOS(.v14)], // 适配你的最低iOS版本 products: [ .library( name: "GooglePlaces", type: .dynamic, // 标记为动态库 targets: ["GooglePlaces"]), ], targets: [ .binaryTarget( name: "GooglePlaces", path: "GooglePlaces.xcframework", linking: .dynamic // 指定动态链接 ) ] )
场景2:封装带自定义代码的Wrapper
如果你的Package包含封装Google Places的自定义代码,需将Wrapper target依赖动态链接的XCFramework:
import PackageDescription let package = Package( name: "GooglePlacesWrapper", platforms: [.iOS(.v14)], products: [ .library( name: "GooglePlacesWrapper", type: .dynamic, targets: ["GooglePlacesWrapper"]), ], targets: [ .target( name: "GooglePlacesWrapper", dependencies: [ .target(name: "GooglePlaces", condition: .when(platforms: [.iOS])) ]), .binaryTarget( name: "GooglePlaces", path: "Frameworks/GooglePlaces.xcframework", linking: .dynamic, publicHeadersPath: "Headers" // 若需暴露Google Places头文件则添加 ) ] )
2. 验证配置效果
将修改后的Swift Package引入主应用后,Xcode会自动将Google Places框架的Embed状态设置为“Do Not Embed”,重新构建并运行模拟器即可解决安装报错问题。
内容的提问来源于stack exchange,提问作者Dogahe
相关产品推荐
相关产品推荐

