【问题标题】:Framework can only work on simulator, but not device框架只能在模拟器上工作,不能在设备上工作
【发布时间】:2016-04-09 12:34:18
【问题描述】:

我使用的是 Xcode 版本 7.2 (7C68)。

我在构建 DTCoreText 项目作为框架后遇到了一个问题。 DTCoreText.framework 在 ios 模拟器上运行良好,但是当我想在设备上测试它时,出现了以下问题:

我已经检查了最新DTCoreText-1.6.17 项目中的构建设置:

目标:DTCoreText (iOS)

ARCHS:armv7、arm64

ONLY_ACTIVE_ARCH:

VALID_ARCHS:arm64、armv7、armv7s

我认为这些设置都可以。比我通过按 Shift+CMD+i 来“构建分析”。

  • 使用模拟器构建:

我注意到我刚刚用于构建的当前设备是模拟器 (iPhone 6 Plus)。我在下面找到了 DTCoreText.framework Release-iphonesimulator 文件夹。通过这样做,DTCoreText.framework 仅在使用 iphone 模拟器时才能正常工作,但是 不在真实设备上。

  • 使用设备构建:

比我尝试用相同的构建重建 DTCoreText.framework 设置,但使用 "Generic iOS Device""Real Device(例如: iPhone 6s)"。我得到了 DTCoreText.framework 下 Release-iphoneos 文件夹。通过这样做,DTCoreText.framework 只能在使用真实设备时正常工作,但不能在 iphone 模拟器上运行。

我不知道为什么会这样。 如何为模拟器和真机构建DTCoreText.framework?

【问题讨论】:

    标签: ios xcode build arm64 dtcoretext


    【解决方案1】:

    问题解决了!!!

    我需要为“i386 x86_64 armv7 arm64”制作一个“FAT”框架!

    How to export "fat" Cocoa Touch Framework (for Simulator and Device)?

    这篇文章对我帮助很大!

    只需使用“lipo -info”命令来检查 ARCHS,例如:

    admins-MacBook-Pro:~ admin$
    admins-MacBook-Pro:~ admin$ lipo -info /Users/admin/Desktop/DT/device/DTCoreText.framework/DTCoreText
    Architectures in the fat file: /Users/admin/Desktop/DT/device/DTCoreText.framework/DTCoreText are: armv7 arm64
    admins-MacBook-Pro:~ admin$
    admins-MacBook-Pro:~ admin$ lipo -info /Users/admin/Desktop/DT/simulator/DTCoreText.framework/DTCoreText
    Architectures in the fat file: /Users/admin/Desktop/DT/simulator/DTCoreText.framework/DTCoreText are: i386 x86_64
    admins-MacBook-Pro:~ admin$
    

    如我们所见:

    • 使用模拟器构建时,xcode 使用 ARCHS "i386, x86_64" 生成框架
    • 使用设备构建时,xcode 使用 ARCHS "armv7, arm64" 生成框架

    要将两个框架组合在一起,请使用以下命令,例如:

    admins-MacBook-Pro:~ admin$ lipo -create /Users/admin/Desktop/DT/device/DTCoreText.framework/DTCoreText /Users/admin/Desktop/DT/simulator/DTCoreText.framework/DTCoreText -output /Users/admin/Desktop/DTCoreText
    

    现在您可以在桌面上找到“DTCoreText”二进制文件。使用 lipo cmd 再次检查:

    admins-MacBook-Pro:~ admin$ lipo -info /Users/admin/Desktop/DTCoreText
    Architectures in the fat file: /Users/admin/Desktop/DTCoreText are: i386 x86_64 armv7 arm64
    

    是的! ARCHS 是 "i386 x86_64 armv7 arm64"

    将“DTCoreText”二进制文件放入DTCoreText.framework中,替换旧的!

    完成!

    现在我们应该可以同时使用设备和模拟器的框架了!


    但是

    这只是为了方便测试目的,如果您想将您的应用提交到应用商店。由于"iOS frameworks containing simulator slices can't be submitted to the App Store",苹果将拒绝它。

    请阅读这篇文章: Creating iOS/OSX Frameworks: is it necessary to codesign them before distributing to other developers?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 2023-03-23
      • 1970-01-01
      • 2011-08-22
      相关资源
      最近更新 更多