【问题标题】:Cocoa Touch Framework fails to debug on simulator in embedding projectCocoa Touch 框架无法在嵌入项目中的模拟器上调试
【发布时间】:2015-05-15 08:01:09
【问题描述】:

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

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

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

框架项目本身已经给了我一个警告; “Apple Mach-O 链接器警告 - 找不到选项的目录 ....(Debug-ophoneos)”。

任何帮助将不胜感激!

【问题讨论】:

    标签: ios objective-c xcode cocoa-touch


    【解决方案1】:

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

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

    总之;

    • 创建一个 Cocoa Touch 框架
    • 将架构设置为 arm64、armv7 和 armv7s
    • 将“构建活动架构”设置为“否”
    • 将“有效架构”设置为 arm64、armv1 和 armv7s
    • 将以下脚本作为存档后操作添加到框架的构建方案中;

      设置-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}"

      如果 [ "${CONFIGURATION}" = "Release" ];那么

      如果 [ -d "${DEVICE_BIN}" ];然后 DEVICE_PATH="${ARCHIVE_PATH}/Release" mkdir "${DEVICE_PATH}" cp -r "${DEVICE_BIN}" "${DEVICE_PATH}" 菲 如果 [ -d "${SIMULATOR_BIN}" ];然后 SIMULATOR_PATH="${ARCHIVE_PATH}/Debug" 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 日)开始,您必须先使用模拟器构建项目,然后使用设备存档。否则你不会得到一个通用的二进制文件!

    创建此帖子是为了避免死链接错误,有关打包过程的更新,请始终尝试我在上面首先链接的 kodmunki 网站上发布的步骤,因为此帖子中的步骤可能已经过时了!

    【讨论】:

    • “事实证明,XCode 不再创建开箱即用的胖二进制文件。” Xcode 从来没有为模拟器和设备做过。这是两个不同的 SDK。
    猜你喜欢
    • 2014-12-14
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多