【问题标题】:iOS 64 bit compatibilityiOS 64 位兼容性
【发布时间】:2014-12-18 09:58:36
【问题描述】:

今天早上我收到一封来自 Apple 的电子邮件,内容如下:

尊敬的开发者,

正如我们在 10 月宣布的那样,自 2015 年 2 月 1 日起推出新的 iOS 应用 提交到 App Store 必须包含 64 位支持并构建 使用 iOS 8 SDK。从 2015 年 6 月 1 日开始,应用程序更新也需要 遵循相同的要求。为了在您的项目中启用 64 位,我们 建议使用“标准”的默认 Xcode 构建设置 架构”来构建具有 32 位和 64 位的单个二进制文件 代码。

如果您有任何问题,请访问 Apple 开发者论坛。

此致,Apple 开发者技术支持

现在我有一个问题,您如何确保 iOS 应用程序兼容 64 位?

我的构建设置如下所示:

我的部署目标是 iOS 6.0。

我只需要确认该应用程序是 64 位兼容的,我是 iOS 的新手,不久前接手了一个相当大的项目,所以我宁愿询问并 100% 确定。

为了让事情更清楚一点,您如何确保 iOS 应用程序兼容 64 位?我知道您需要设置某些构建规则,例如图像中的那个,但我想知道有没有办法知道您的 iOS 应用程序是 64 位兼容的。 32 位 iOS 应用程序可以在 64 位硬件上运行,所以我不相信检查 iOS 应用程序是否在设备上运行会有所帮助。

我相信您可以上传一个新版本,看看您是否收到此消息:但我希望在不上传新版本的情况下有一个不错的选择。

谢谢!

【问题讨论】:

  • 我不确定我是否理解这个问题。你不能只在 64 位设备上测试它以确保它工作吗?
  • 如何确保 iOS 应用程序兼容 64 位?我知道您需要设置某些构建规则,例如图像中的那个,但我想知道有没有办法知道您的 iOS 应用程序是 64 位兼容的。
  • 它构建得很好,没有错误,它可以在所有运行 iOS 6/7/8/8.1 的 iPhone 上运行,但我只需要 100% 确定它是 64 位兼容的。仅查看它是否可以在手机上编译和运行是不够的,因为 32 位应用程序可以在 64 位手机上运行。
  • 进入应用存档或解压你的ipa,找到二进制文件并运行file binary,你会看到里面的所有拱门。
  • 请记住,为 64 位编译只是 64 位兼容性的第一步。您需要确保您可以在应用程序的 32 位和 64 位版本之间读取/写入文件或数据。 Apple 提供了帮助您的指南。见developer.apple.com/library/mac/documentation/Cocoa/Conceptual/…developer.apple.com/library/ios/documentation/General/…

标签: ios objective-c iphone xcode


【解决方案1】:

使用您的设置,您的二进制文件中应该会出现 arm64 和 armv7。你不会得到 armv7s,因为尽管它是一个有效的架构,it's not included in ARCHS_STANDARD 如果在 Xcode 6 上构建 (See also)。

仅仅因为它在 64 位设备上运行,并不意味着它支持 64 位。 64 位设备可以运行 32 位应用程序。

要确定它是否包含 arm64 块,您需要找到应用程序。转到 Xcode 首选项,然后选择 Locations 标签。派生数据行告诉您正在构建文件的位置。

打开一个终端(Finder->Applications->Utilities->Terminal)并使用“cd”命令转到该位置。就我而言,我的项目存储在 ~/MyProject

$ cd ~/MyProject
$ cd build
$ find . -name MyTarget
./build/MyTarget
./build/MyTarget/Build/Products/Debug-iphoneos/MyTarget.app/CoreControl
./build/MyTarget/Build/Products/Debug-iphoneos/MyTarget.app.dSYM/Contents/Resources/DWARF/CoreControl

现在我们知道二进制文件的存储位置(这是第二个结果),我们可以检查它以查看它包含哪些架构:

$ dwarfdump ./build/MyTarget/Build/Products/Debug-iphoneos/MyTarget.app/MyTarget
----------------------------------------------------------------------
 File: ./build/MyTarget/Build/Products/Debug-iphoneos/MyTarget.app/MyTarget (armv7)
----------------------------------------------------------------------
.debug_info contents:
< EMPTY >

就我而言,我只构建了 arm7,而不是 arm64。

【讨论】:

  • 或者查看构建日志并观察构建和链接或arm64架构?
  • 谢谢!我现在会尝试这个,我会让你知道结果,非常清楚,结构良好的答案,其中有足够的信息供新手遵循。谢谢(y)
  • @Droppy 也可以,虽然严格来说是在编译时验证 arm64 已构建,而不是整个构建过程的最终输出仍然包含它。
  • @apmartin1991 - 请注意,仅仅因为您已经在 64 位模式下编译了项目,并不意味着它会正常运行。大多数项目在为 64 位构建时都需要奇怪的混合,因为旧代码通常会假设,例如,NSInteger 是 32 位。
  • AirSource - 谢谢,一旦我确定它是 64 位的,我将从头开始测试应用程序 :)
猜你喜欢
  • 1970-01-01
  • 2010-10-21
  • 2019-06-26
  • 1970-01-01
  • 2023-03-30
  • 2019-08-19
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多