簡體   English   中英

如何為有條件地使用正確框架的設備和模擬器正確構建應用程序。 (不是通用/胖框架)

[英]how to correctly build an app for device and simulator that conditionally uses the correct framework. (not a universal/fat framework)

已經獲得了設備和模擬器的單獨框架,我想整合這些框架以實現所需的功能。 我已將模擬器框架包含在我的迦太基框架項目中。 當我編譯我的框架時,我收到以下錯誤

為 iOS-armv7 構建但試圖與為 iOS-arm64 構建的文件鏈接 架構 armv7 的未定義符號:“OBJCCLASS$...”,引用自:ViewController.o“OBJCCLASS$...”中的 objc-class-ref,引用自:DepedencyInjector.o 中的 objc-class-ref ViewController.o 中的 objc-class-ref ld:未找到架構 armv7 clang 的符號:錯誤:linker 命令失敗,退出代碼為 1(使用 -v 查看調用)

參考: https://developer.apple.com/forums/thread/66978 https://developer.apple.com/forums/thread/66978?answerId=215100022#21510002

如果您可以選擇將兩個框架鏈接在一起,您可以讓編譯器決定。 在這種情況下,您將創建一個 FAT 二進制文件。 這表示:

  • 您將兩個框架鏈接在一起
  • 創建一個(FAT)框架
  • 將此庫鏈接到 Xcode 中的應用程序
  • 讓編譯器決定正確的架構

創建 FAT 二進制文件的命令是:

lipo -create ./Simulator.framework/framework_binary ./Device.framework/framework_binary -output ./Universal

現在您必須復制文件夾Device.framework並將其命名為Universal.framework

將使用 lipo 創建的二進制文件復制到此文件夾中。

然后打開文件./Universal.framework/Info.plist並將字符串iPhoneSimulator添加到CFBundleSupportedPlatforms數組中。

現在從Simulator.framework/Modules/framework_name.swiftmodule/文件夾中復制x86_64.swiftdocx86_64.swiftmodule並將它們粘貼到Universal.framework/Modules/framework_name.swiftmodule/中。

將創建的通用框架導入目標Embedded Binries中,您應該能夠編譯您的項目。

您可以按如下方式構建 XCFramework(從命令行)。

xcodebuild \
    -create-xcframework \
    -framework  "<<path to simulator xcarchive>>/Products/Library/Frameworks/SomeFramework.framework" \
    -framework  "<<path to device xcarchive>>/Products/Library/Frameworks/SomeFramework.framework" \
    -output     "CombinedFramework.xcframework"

您可以為此添加更多內容並設置各種路徑和 output 來品嘗。

不確定這是否有幫助,因為您不是在尋找通用框架並且不確定如何對它進行分類...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM