我正在使用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 发布-iphonesimulator 文件夹。通过这样做,DTCoreText.framework只能在使用iphone模拟器时正常工作,但是 不在真实的设备上。
- 使用设备构建
我尝试使用相同的版本重建DTCoreText.framework 设置,但使用"通用iOS设备" 或" Real Device(例如: iPhone 6s)" 。我得到了DTCoreText.framework 发布-iphoneos 文件夹。通过这样做,DTCoreText.framework只能在使用真实设备时正常工作,但不能在iphone模拟器上工作。
我不知道为什么会这样。 如何为模拟器和真实设备构建DTCoreText.framework?
答案 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$
我们可以看到:
要将两个框架组合在一起,请使用以下命令,例如:
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会拒绝它。