【问题标题】:Undefined symbols for architecture i386, only on iPad simulator架构 i386 的未定义符号,仅在 iPad 模拟器上
【发布时间】:2018-10-05 11:20:34
【问题描述】:

在我的项目中有一个通过CocoaPods导入的名为JPush的框架。

在 iPhone 设备和 iPhone 模拟器上一切正常。但是当我切换到 iPad 模拟器时编译器一直在抱怨以下内容(我没有在 iPad 设备上尝试过,因为我没有任何 iPad)。

我收集了所有 iOS 设备架构

arm64:iPhone6s | iphone6s plus|iPhone6| iPhone6 plus|iPhone5S | iPad Air| iPad mini2(iPad mini with Retina Display)
armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)
armv7:iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4

32-bits processor:
simulator: i386
real device: armv7 or armv7s
64-bits processor: 
simulator: x86_64
real device: arm64

因此,当您遇到同样的错误时,请尝试使用file FILENAME 命令来显示您的静态库支持的架构。

【问题讨论】:

  • 我认为这个错误来自派生数据,所以到 ~/Library/Developer/Xcode/DerivedData 清除派生数据文件夹并再次运行。

标签: ios xcode ipad cocoapods


【解决方案1】:

您尝试链接的框架不包含 i386 切片:

libjpush-ios-3.0.9.a: Mach-O universal binary with 4 architectures: [arm_v7:current ar archive] [arm64]
libjpush-ios-3.0.9.a (for architecture armv7):  current ar archive
libjpush-ios-3.0.9.a (for architecture armv7s): current ar archive
libjpush-ios-3.0.9.a (for architecture x86_64): current ar archive random library
libjpush-ios-3.0.9.a (for architecture arm64):  current ar archive

不过,它确实包含一个 x86_64 切片。选择一个 64 位 iOS 设备进行模拟(iPhone 5S 或更高版本)并重建。

【讨论】:

  • 哇!你是怎么找到这些信息的?顺便说一句,我只想在 iPad 上测试我的项目。我的项目只有 iPhone,但如果 UI 布局不好,我仍然应该在 iPad 上进行测试,对吧?
  • @JsW Apple 总是在 iPad 上进行测试,以检查您的 iPhone 专用应用是否在 iPad 上工作。所以,你也应该在 iPad 上测试一下。
  • 我在库上运行了file 命令。您的构建目标是什么 iPad 型号?尝试选择一种较新的型号。
  • @duskwuff 知道了!我想到了! 32 位模拟器在 i386 上运行,64 位模拟器在 x86_64 上运行。所以我把模拟器改成 iPad Air,感觉就像是 64 位模拟器。谢谢,伙计!
猜你喜欢
  • 1970-01-01
  • 2012-03-08
  • 2011-08-14
  • 2011-10-30
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多