Xcode 找不到 strip-frameworks.sh 目录

Posted

技术标签:

【中文标题】Xcode 找不到 strip-frameworks.sh 目录【英文标题】:Xcode unable to find strip-frameworks.sh directory 【发布时间】:2016-01-27 09:34:06 【问题描述】:

我最近将 Xcode 更新到了 7.1 版,其中包括 Swift 2.1。我安装了 Swift 2.1 没有任何问题。在尝试运行我的项目后,我意识到我需要获取最新版本的 Realm,因为之前的版本不支持 Swift 2.1。我删除了旧框架并导入了 Realm 0.96.2。每当我运行时,我现在都会收到此错误:

bash: /Users/userName/Library/Developer/Xcode/DerivedData/appName-ghiroqitgsbvfhdqxsscyokyoouz/Build/Products/Debug-iphoneos/appName.app/Frameworks/Realm.framework/strip-frameworks.sh: No such file or directory

我怀疑问题出在您希望将应用程序提交到 App Store 所需的脚本上,因此我删除了运行脚本阶段,添加了一个新阶段,并从 Realm 文档站点复制了脚本:

bash "$BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/Realm.framework/strip-frameworks.sh"

我以为这样可以解决问题,但事实并非如此。然后我认为问题可能出在 Realm.framework 或 RealmSwift.framework 文件中,所以我删除了它们并重新导入它们(以防万一我搞砸了)。没有改变。有谁知道这个错误是否有修复?

谢谢! -CodeIt

【问题讨论】:

Strip Framework Architectures 应该在 Build Phases 选项卡下的 Embed Frameworks 之后。您可以使用鼠标拖动它(因为它不是很明显)。 Realm 应该在他们的文档中指定这个指令。 @marius 帮助说明了这一点。 【参考方案1】:

从错误消息看来,您似乎没有将 Realm.frameworkRealmSwift.framework 添加到 嵌入式二进制文件 窗格中,您可以在 General 中找到该窗格您的项目的选项卡,如下所示:

为了进一步验证,您可以检查标签构建阶段。它应该如下所示:

注意:确保运行脚本阶段嵌入框架阶段之后。

为什么需要这个脚本?

供应的框架不仅仅是单个可执行文件,实际上是 FAT 二进制文件,它们是不同架构上链接的可执行文件的存档。这包括 arm64armv7 的架构切片,它们是在手机上部署所必需的,以及 i386x86_64 是在模拟器中运行应用程序所必需的。

strip-frameworks.sh 脚本的主要职责是删除不必要的切片。这减少了最终包的大小,并且对于 AppStore 部署是必要的,因为 iTunes Connect 拒绝具有模拟器架构的应用程序。

更多详情

脚本在构建设置VALID_ARCHS 的基础上运行。因为这改变了框架的签名可执行文件,所以它还需要处理代码签名。自从引入位码以来,它也得到了进一步的后期处理作为责任。它从框架包中提取包含的*.bcsymbolmap 文件,并将它们放置在*.xcarchive 中的正确路径中。

FAQ topic on Bitcode of PSPDFKit 很好地解释了 BCSymbolMap 是什么:

BCSymbolMap 很像位码的 dSYM。 Xcode 将其构建为创建应用程序二进制文件的一部分,也适用于每个动态框架。重新符号化函数/方法名称以理解崩溃程序是必需的。

【讨论】:

马吕斯,谢谢!我从未将框架添加到 Embedded Binaries 窗格中,现在它可以完美运行!一个灯泡刚刚在我脑海中熄灭 - 脚本中的 $FRAMEWORKS_FOLDER_PATH 与嵌入式框架窗格中的框架目标有关,是吗? 是的,解析的构建设置$FRAMEWORKS_FOLDER_PATH配置/引用$BUILT_PRODUCTS_DIRFrameworks目录的相对路径。所以脚本失败了,因为框架没有复制到正确的位置。这不仅对脚本很重要,对发布也很重要,因为动态框架不会成为可执行文件的一部分,并且是分开的,因此必须捆绑在一起才能在运行时动态加载。 构建阶段的顺序至关重要!在嵌入框架之后剥离框架架构。谢谢你让我认识到@marius @marius 我已经确认了所有这些步骤,但仍然有问题中列出的错误。任何其他想法可能是什么问题? @marius - 更新答案以包括run script 步骤需要在embed binaries 之后会有所帮助,并且应该检查这一点。我怀疑在升级到最新版本的 Realm(或 Xcode)的某个阶段,我的 embed binaries 步骤“神奇地”移到了最后。上次触摸时(几个月前)它正在构建,但当它以这种方式破坏时,它会非常混乱。【参考方案2】:

在我的例子中,改变Build Phases中的流程顺序来解决

不行

好的

【讨论】:

以上是关于Xcode 找不到 strip-frameworks.sh 目录的主要内容,如果未能解决你的问题,请参考以下文章

使用 xcode 10 后 Xcode 9 找不到资产

xcode - 找不到设备支持文件[重复]

XCode - 为啥我找不到文件?

在 App Store 中找不到 Xcode 更新

Xcode 6 找不到 cocoapods 库

Xcode 找不到匹配的配置文件 - Ionic Cordova