You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:06:38