【问题标题】:How to load framework at runtime in Xcode?如何在 Xcode 运行时加载框架?
【发布时间】:2022-11-22 12:20:33
【问题描述】:

我有一个第三方框架customx.framework(iOS)customx.framework(模拟器).

在模拟器上运行项目customx.framework(模拟器)导入&用于设备 customx.framework(iOS)进口

xcode 不支持同时导入

目前我正在手动导入框架,所以我正在寻找运行时脚本更改或组合(iOS+模拟器)框架以导入到 xcode 项目中。

为了那个原因

  1. 我试过lipolibtool但似乎没有用。
  2. 我用过验证工作区但导入模块时失败。

    试过的链接 -

    iOS merge several framework into one

    Building for iOS Simulator, but the linked framework '****.framework' was built for iOS

【问题讨论】:

  • Swift 包可能就是您正在寻找的。你有更多的控制权。
  • @loremipsum 请再提示一下好吗?
  • 我没有确切的样本,但我会发布一些帮助我之前弄明白的链接。我不经常这样做,但我知道我花了一段时间才弄清楚你的framework必须变成XCFramework然后XCFramework可以与Swift Package Manager一起使用这个过程并不像你会想。一旦你得到一个包裹,它真的很容易管理。还有其他关于该主题的 WWDC 视频。我希望我能更具体一点。

标签: ios swift xcode llvm lipo


【解决方案1】:

Xcode 不支持同时导入

支持的。它被命名为XCF框架.

因此,假设框架的每个变体都已正确构建(注意BUILD_LIBRARY_FOR_DISTRIBUTION=YES,以防万一 - Xcode 自动将其设置为 YES),使用下一个命令将它们加入终端或 Xcode 脚本阶段:

$ xcodebuild -create-xcframework 
      -framework "/full_path_to_iOS_variant/customx.framework" 
      -framework "/full_path_to_Simulator_variant/customx.framework" 
      -output "/full_path_to_result/customx.xcframework"

然后在目标依赖中添加一次

就是这样。

【讨论】:

  • 这很有帮助。但是我有现成的框架(没有源代码访问权限)所以当我运行命令时我得到类似.. No swift interface file found within framework @Asperi 的错误
  • 好的,不确定你是如何得到它的以及为什么 swift 在那里,但实际上你可以手动构建这个包装 XCFramework,它只是一个围绕现有框架的捆绑包,在 plist 中有一些信息。这篇文章应该对appspector.com/blog/xcframeworks有帮助。
【解决方案2】:

您可以为 iOS 设备和 iOS 模拟器存档并将它们合并到一个 xcframework。这是我当前项目的 xcodebuild 命令。

- Archive for iOS devices
xcodebuild archive 
-scheme Framework-scheme 
-configuration Release 
-destination 'generic/platform=iOS' 
-archivePath './build/native/Framework-Name.framework-iphoneos.xcarchive' 
SKIP_INSTALL=NO 
BUILD_LIBRARIES_FOR_DISTRIBUTION=YES


- Archive for iOS simulator
xcodebuild archive 
-scheme Framework-scheme 
-configuration Release 
-destination 'generic/platform=iOS Simulator' 
-archivePath './build/native/Framework-Name.framework-iphonesimulator.xcarchive' 
SKIP_INSTALL=NO 
BUILD_LIBRARIES_FOR_DISTRIBUTION=YES

- build framework from archives
xcodebuild -create-xcframework 
-framework './build/native/AdTrue-Native.framework-iphoneos.xcarchive/Products/Library/Frameworks/Framework-Name.framework' 
-framework './build/native/AdTrue-Native.framework-iphonesimulator.xcarchive/Products/Library/Frameworks/Framework-Name.framework' 
-output './build/native/Framework-Name.xcframework'

【讨论】:

    猜你喜欢
    • 2014-05-07
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    相关资源
    最近更新 更多