我正在使用Xcode版本7.2(7C68)。
在将DTCoreText项目构建为框架之后,我遇到了一个问题。
DTCoreText.framework在ios模拟器上工作正常,但是当我想在设备上对其进行测试时,出现以下问题:
ios - 框架只能在模拟器上运行,而不能在设备上运行-LMLPHP
我在最新的DTCoreText-1.6.17项目中检查了构建设置:
目标: DTCoreText(iOS)
ARCHS: armv7,arm64
ONLY_ACTIVE_ARCH:
VALID_ARCHS: arm64,armv7,armv7s
我认为这些设置还可以。比我通过按Shift + CMD + i来“构建分析”。

  • 使用模拟器进行构建:

  • 我注意到我刚刚用来构建的当前设备是 Simulator
    (iPhone 6 Plus)
    。我在DTCoreText.framework下找到了
    发行-iphonesimulator的文件夹。这样,DTCoreText.framework仅在使用iphone模拟器时可以正常工作,但是
    不在真实设备上。
  • 使用设备进行构建:

  • 比我尝试用相同的版本重建DTCoreText.framework
    设置,但使用“通用iOS设备” “真实设备(例如:
    iPhone 6s)”
    。我在DTCoreText.framework下
    释放-iphoneos的文件夹。这样,DTCoreText.framework仅在使用真实设备时才能正常工作,而在iphone模拟器上则无法正常工作。

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

    最佳答案

    问题已解决!!!

    我需要为“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?

    关于ios - 框架只能在模拟器上运行,而不能在设备上运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34615853/

    10-13 04:07