Cocoa Touch 框架无法在嵌入项目中的模拟器上调试

Posted

技术标签:

【中文标题】Cocoa Touch 框架无法在嵌入项目中的模拟器上调试【英文标题】:Cocoa Touch Framework fails to debug on simulator in embedding project 【发布时间】: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)”。

任何帮助将不胜感激!

【问题讨论】:

【参考方案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。

以上是关于Cocoa Touch 框架无法在嵌入项目中的模拟器上调试的主要内容,如果未能解决你的问题,请参考以下文章

Cocoa Touch 框架无法识别

带有嵌入库的 Cocoa Touch Framework Swift

使用 Cocoa Touch Framework 的 iOS 8 项目未在模拟器中构建

将 cocoapod 依赖项添加到 cocoa touch 框架

将 Cocoa Touch 框架链接到 Today Extension 时出现链接器错误

在项目 SDK Cocoa Touch 框架中使用 Firebase Analytics 时崩溃