框架只能在模拟器上运行,但不能在设备

时间:2016-01-05 15:54:55

标签: ios xcode build arm64 dtcoretext

我正在使用Xcode版本7.2(7C68)。

我将DTCoreText项目构建为框架后遇到了问题。 DTCoreText.framework在ios模拟器上工作正常,但是当我想在设备上测试时,出现了以下问题:

enter image description here

我已检查过最新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   发布-iphonesimulator 文件夹。通过这样做,DTCoreText.framework只能在使用iphone模拟器时正常工作,但是   不在真实的设备上。

     
      
  • 使用设备构建
  •   
     

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

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

1 个答案:

答案 0 :(得分:3)

解决了问题!!!

我需要为“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中并替换旧文件!

完成!

现在我们应该能够将框架用于设备和模拟器!

<强>但是

这只是为了方便测试目的,如果你想将你的应用程序提交到app store。由于"iOS frameworks containing simulator slices can't be submitted to the App Store",apple会拒绝它。

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