Cocoa Touch Framework 无法在模拟器上调试嵌入项目

Cocoa Touch Framework fails to debug on simulator in embedding project

我有一个 Cocoa Touch 框架,使用 XCode 6 构建,目标是 iOS >= iOS8。 这个框架的目标架构设置是默认的,这意味着我没有改变任何东西。 架构设置为标准(不包括 x86_64,稍后会详细介绍)。 该框架本身包含 Swift 和 Objective-C 代码,因此使用 Ray Wenderlich 的静态库解决方法构建它是行不通的。

现在,如果我创建一个新项目并将框架项目添加到其中,该项目会同时为设备和模拟器构建,这很好。

但是,如果我使用 .framework 文件并将其添加到不同的项目,就像您添加任何其他框架一样,该项目将不会为模拟器构建。好吧,它确实构建了,但它崩溃了,因为它找不到相关的 类。它在设备上运行良好,归档也如预期的那样工作。

框架项目本身已经给我一个警告; "Apple Mach-O Linker Warning - Directory not found for option ....(Debug-ophoneos)".

非常感谢任何帮助!

我终于找到了解决这个问题的方法。 事实证明,XCode 不再创建开箱即用的胖二进制文件。不知道 Apple 背后的原因可能是什么,我也是,有时负责 XCode 的人似乎喜欢取笑使用他们产品的开发人员...

无论如何,您可以找到有关如何为模拟器和所有 iOS 设备创建胖二进制文件的权威指南(是的,您甚至必须对不同的体系结构进行 lipo 才能获得适用于新旧设备):https://kodmunki.wordpress.com/2015/03/04/cocoa-touch-frameworks-for-ios8-remix/

简而言之;

  • 创建一个 Cocoa 触控框架
  • 将架构设置为 arm64、armv7 和 armv7s
  • 将"Build Active Architecture"设置为"NO"
  • 将 "Valid Architectures" 设置为 arm64、armv1 和 armv7s
  • 将以下脚本作为存档添加到框架的构建方案中 Post-action;

    设置-e

    DEVICE_BIN="${OBJROOT}/UninstalledProducts/${TARGET_NAME}.framework" SIMULATOR_BIN="${SYMROOT}/../../../../Products/Debug- iphonesimulator/${TARGET_NAME}.framework"

    ARCHIVE_PATH="${SRCROOT}/_Archive" rm -rf "${ARCHIVE_PATH}" mkdir "${ARCHIVE_PATH}"

    if [ "${CONFIGURATION}" = "Release" ];然后

    if [ -d "${DEVICE_BIN}" ];然后 DEVICE_PATH="${ARCHIVE_PATH}/发布" mkdir "${DEVICE_PATH}" cp -r "${DEVICE_BIN}" "${DEVICE_PATH}" 菲 如果 [ -d "${SIMULATOR_BIN}" ];然后 SIMULATOR_PATH="${ARCHIVE_PATH}/调试" mkdir "${SIMULATOR_PATH}" cp -r "${DEVICE_BIN}" "${SIMULATOR_PATH}" lipo -create "${DEVICE_BIN}/${TARGET_NAME}" "${SIMULATOR_BIN}/${TARGET_NAME}" -output "${SIMULATOR_PATH}/${TARGET_NAME}.framework/${TARGET_NAME}"

    fi

    fi

    出口 0;

这将在您的项目目录中创建一个 _Archive 目录,您可以在其中找到用于调试和发布的框架。

重要提示:从今天(2015 年 5 月 22 日)开始,您必须先使用模拟器构建项目,然后使用设备存档。否则你将得不到通用二进制文件!

创建此 post 是为了避免死 link 错误,有关打包过程的更新,请始终尝试在 kodmunki 网站上执行的步骤 post 我'我先 link 上文,因为此 post 中的步骤可能已经过时了!